`本文和design代碼由FPGA喜好者小梅哥編寫,未經作者允許,本文僅答應收集論壇復制轉錄發載,且轉錄發載時請標明原作者。
在嵌進式體系中,LCD屏作為最友愛的人機交互方法,被大批的利用到了各個體系中。在基于ARM處置器的體系中,利用更長短常普遍。FPGA作為狹包養心得義嵌進式體系的一員,天然也有良多時辰需求來驅動顯示屏顯示一些內在的事務,例如常常有需求要用FPGA來做液晶測試架,做顯示器驅動測試卡。良多進修了FPGA的伴侶都了解,FP包養行情GA驅動VGA顯示器是比擬輕松的,簡直每個板卡商供給的材料中都供給了有諸如顯示彩條,顯示圖案,甚至顯示簡略的文字。可是,當盼望顯示加倍復雜的內在的事務的時辰,往往就很難辦到了。由於FPGAdesign的是電路,是硬件,特色是腦筋簡略,四肢發財。而顯示復雜的內在的事務,恰好需求一個腦筋發財的把持器來履行這項義務。
在FPGA這些年的成長中,先后經過的事況了簡略邏輯擴大、復雜邏輯design、SOPC體系和SOC體系,邏輯design部門就未幾說了,對于SOPC體系design,Xilinx家有MicroBlaze軟核、Altera家有赫赫有名的NIOS II軟核處置器。而到了SOC時期,Xilinx家和Altera(現已被因特爾收買,成為Intel的可編程工作部)都發布了內嵌雙核ARM Cortex-A9的SOC芯片,Xilinx家有名的zynq7000系列,以及Altera花了鼎力氣在高校推行的Cyclone V SOC。
固然跟著技巧的成長以實時間的推移,SOC的利用會越來越普遍,可是作為我們普通進修和應用來說,SOPC技巧也仍是有其應用的價值的,究竟內嵌硬核的SOC芯片,動輒幾百塊,而應用軟核的計劃,只需40元不到的BOM本錢就能完成一個體系design,上風仍是很顯明的。本例,我們就率領大師應用Altera Cyclone IV系列最低真個FPGA芯片EP4CE6/EP4CE10design的可以包養犯法嗎或許驅動640*480辨別率顯示屏靜態顯示復雜內在的事務的體系。例如顯示文字,顯示圖片
在之前我們講授過RGB顯示屏的驅動,RGB顯示屏驅動時序和VGA驅動時序簡直完整一樣,只是分歧的辨別率之間,當時序參數分歧。說到這個驅動4包養女人80*272辨別率顯示屏靜態顯示復雜內在的事務,信任良多伴侶并不生疏,是的,在我們之前的SOPC公然課時辰,就曾經給大師講授過完成這種體系的一種方法,即便用了一片自力的SRAM來作為顯示屏的顯存,顯示驅動模塊直接讀取SRAM中的數據并及時刷新顯示,而N包養網pptIOS II CPU則只在需求刷新顯示內在的事務的時辰,才履行對SRAM的寫進操縱。此種方法,需求一片自力的SRAM作為顯存,以及一片SDRAM作為NIOS II的運轉內存。除了SRAM的應用會增添體系的BOM本錢外,SRAM也會占用失落FPGA芯片較多的管腳,招致必需得應用256腳BGA計劃的芯片才幹夠完成。是以,此種計劃僅合適在對本錢不太敏感高的場所應用。本節要先容的計劃,是對該體系改良優化獲得的。
本節所描寫的體系,僅需用到以下硬件資本
1. EP4CE6/EP4CE1包養甜心網0型FP包養條件GA芯片一片(30元)
2. 16Mbit 或以上SDRAM芯片一片(3元,如華邦w9816g6)
3. 50M有源晶振一片(3元)
4. 4Mbit SPI FLASH芯片(1.5元,如W25Q80)
5. 3.3V、2.5V、1.2V LDO穩壓電源(AMS117系列,算計不到1元)
本節盼望到達的目標:
在顯示屏上顯示一幀圖像,并在指定地位顯示字符內在的事務
上述框架是我們顛末剖析,要完成本體系計劃所需的最小硬件體系,本節我們將基于芯航路的AC620進修套件來完成FPGA的體系搭建和NIOS II軟件design。芯航路的AC620 FPGA開闢板全體硬件設置裝備擺設高于上述剖析,有助于我們停止原型驗證。
FPGA體系搭建
本體系重要在Qsys體系中完成,包括了以下IP核:
clk_0:輸出時鐘治理單位,體系默許添加
altpll_0包養sd:PLL鎖相環,對輸出時鐘停止分頻和倍頻,以獲得兩路頻率為100MHz,相位相差180度的時鐘電子訊號,分辨供給給體系中邏輯電路任務(包括NIOS II軟核處置器)和SDRAM芯片應用。以及1路24M的時鐘電子訊號,供640*480辨別率的VGA驅動電路應用。
NIOS II CPU:完成體系的把持以及顯示內在的事務的處置。
SDRAM:NIOS II CPU運轉內存和TFT顯示圖像幀緩存。
onchip_memory:片上存儲器,指定SGDMA要履行的數據傳輸,重要用作SGDMA的描寫符存儲器。
lcd_sgdma:SGDMA IP,重要完成大批數據的高效搬運,支撐流形式,效力比Avalon MM接口的DMA核高。
timing_adapter:時序婚配IP核,重要用于流數據在兩個分歧包養dcard模塊間停止傳遞時,對部門電子訊號加上必定延遲,使得數據和標志電子訊號可以或許完整同步(說的簡略點兒,就是用存放器打拍的方法對一些電子訊號停止延遲,使數據和把持電子訊包養站長號對齊)。
fifo:雙時鐘fifo,重要完成數據流的傳輸速率轉換。SGDMA輸入的數據流,是依照和存儲器雷同的時鐘速率(本例中為100M)停止的,而在數據應用端,即VGA顯示部門,是依照9M的時鐘取用數據的,是以應用雙時鐘fifo,處理跨時鐘域的題目。
VGA_SINK:該IP為第三方開源IP,由友晶科技供給,重要完成Avalon ST流數據轉換成VGA行場時序并驅動VGA屏停止顯示。
EPCS:EPCS FLASH存儲器把持IP,應用該IP,使得EPCS芯片可以或許存儲FPGA固件和NIOS II的法式。
jtag_uart0:調試串口,重要用來打印一些調試信息,在design的後期調試中很有效
1、 altpll_0
為了包管全部體系可以或許具有較高的機能,是包養意思以讓其運轉在100MHz,所以需求應用PLL對內部晶振發生的50MHz輸出的時鐘電子訊號停止倍頻,獲得兩路頻率為100M,相位相差90度的時鐘電子訊號。別的,還需求供給一路9MHz時鐘電子訊號供480*272辨別率的TFT屏驅動應用。關于PLL的具體添加和參數修正方法這里不再多說,僅供給設置成果:
inclk0:50M
不需求areset電子訊號和locked電子訊號
c0:9MHz
c1:100MHz,相位為0
c2:100MHz,相位為-180度
2、 nios ii cpu
一切設置應用默許值,等后續添加完sdram和EPCS和,將復位向量(Reset Vector)設置為epcs,將異常向量(Exception Vector)設置為sdram。
3、 sdram
數據位寬(Data Width)為16bit。
構造(Architecture)為一個片選,4個bank。
地址寬度(Address Width)Row地址為12、Column地址為9。
其他默許即可。
4、 onchip_memory
片上緩存onchip_memory作為SGDMA的描寫符存儲器,存儲SGDMA的數據傳輸描寫內在的事務。
類型為RAM;
數據位寬選擇32位;
存儲器總量選擇16384Bytes(用戶可以依據本身芯片的RAM容量恰當增添或減小該值);
選擇傳輸形式為存儲器到數據流形式(Memory To Streram);
數據寬度(Data width)為16bit,該位寬與存儲器(SDRAM)的Avalon MM總線寬度分歧。
其他依照默許即可,如下圖所示。
6、 timing_adapter
時序婚配IP核,重要用于流數據在兩個分歧模塊間停止傳遞時,對部門電子訊號加上必定延遲,使得數據和標志電子訊號可以或許完整同步(說的簡略點兒,就是用存放器打拍的方法對一些電子訊號停止延遲,使數據和把持電子訊號對齊)。
如下圖所示設置,一切勾選項都勾選上,輸出Ready Latency設置為0,輸入Ready Latency設置為1,每個數據總共有兩個symbols,每個symbol含8位數據。(依據RGB數據流的現實意義,這里應當是每個數佔有3個symbols,可是本design應用的是16位色RGB565形式,即RGB總共才16位,所以在搭建體系的時辰,假定只要2個symbols,只是在終極數據包養違法輸入到VGA的時辰,將16bit數據拆分紅RGB565,分辨送包養合約給VGA的R、G、B色通道)
以上各個模塊,都是任務在100MHz的時鐘頻率下。重要完成將需求顯示的數據從SDRAM中讀掏出來。而讀掏出來的數據終極是需求送到TFT顯示屏上往顯示的,TFT顯示部門,對于本體系,數據傳輸速度為9M,是以就需求完成數據從100M時鐘域到9M時鐘域的跨時鐘域傳輸。而完成數據流跨時鐘域傳輸,較好的方法是應用雙時鐘fifo。是以,接上去就需求添加一個雙時鐘f包養網站ifo,先將100M時鐘域的數據緩存起來,然后再等候9M時鐘域的讀取邏輯來讀取。
7、 fifo
設置fifo的深度為512字節,每個數據含2個symbols,每個symbols由8位數據構成,即全部數據寬度為16位。時鐘設置為雙時鐘形式(Dual Clock Mode),輸出和輸入都應用Avalon ST接口,使能數據包(Enable Packet Data)。這里順帶說一下,Cyclone IV E器件中的嵌進式塊RAM為M9K存儲器,每個器件里都有若干個M9K存儲器。所謂M9K存儲器,就是一個塊存儲器中有9Kb個存儲位,每個M9K存儲器可以被設置裝備擺設為以下形式:
8192 × 1
4096 × 2
2048 × 4
1024 × 8
1024 × 9
512 × 16
512 × 18
沒事,請早點醒來。來,我媳婦可以把事情的經過詳細的告訴你,你聽了以後,一定會像你的兒媳婦一樣,相信你老公一定是256 × 32
256 × 36
由于本design中,數據是16位的,是以,假如要想僅應用一個M9K存儲器就完成本Fifo,存儲深度可在1到512之間任選。假設我們選擇存儲深度為128,那么就只占用1/4個M9K的存儲容量,可是,剩下的3/4的存儲容量也照舊無法零丁應用,在該design中會永遠的被揮霍失落,是以,不如將存儲深度直接設置為512,還能包管緩存足夠年夜,防止不測喪失數據。
8、 VGA_SINK
VGA_SINK模塊是從友晶供給的design中修正獲得的,該IP底本僅支撐24位色形式,而本體系,由于SDRAM為16位寬度,假如強行應用24位色形式,則必需得從SDRAM中讀取兩個數據才幹拼接成一個像素,招致SDRAM的負載過年夜,從而使得體系帶寬碰到瓶頸,無法正常任務,是以對該IP停止了修正,即下降為16bit的RGB565形式。
(依據RGB數據流的現實意義,這里應當是每個數佔有3個symbols,可是本design應用的是16位色RGB565形式,即RGB總共才16位,所以在搭建體系的時辰,假定只要2個symbols,只是在VGA_SINK模塊外部,在終極數據輸入到VGA的時辰,停止了修正,將16bit數據拆分紅RGB565,分辨送給VGA的R、G、B色通道)。這里參數分辨如下設置:
H_DISP(行顯示有用像素):640
H_FPORCH:16時鐘周期
H_SYNC:96時鐘周期
H_BPROCH:48時鐘周期
V_DISP(行顯示有用像素):480
V_FPORCH:1時鐘周期
V_SYNC:2時鐘周期
V_BPROCH:33時鐘周期
EPCS的添加沒有什么需求特殊留意的,一切依照默許設置即可。
至此,我們曾經完成了全部顯示體系的組件添加任務,接上去就該停止組件間的總線銜接了。
在總線銜接之前,必需要先給大師講授一下本體系的數據流向,由於本體系和我們之前在SOPC公然課時辰講過的體系架構還不太一樣,本體系重要引進了Avalon ST總線。在之前公然課時辰講過的各類例子,都是基于Avalon MM總線的,一切外設IP都經由過程Avalon MM總線銜接到NIOS II CPU上,是以總線銜接長短常簡略的。可是Avalon MM總線的數據搬運才能是比擬弱的,無法支撐高速大批的數據傳輸。而在基于Avalon ST總線的數據流中,NIOS II CPU本質相當于被旁路了,只起到了狀況治理的感化,一切的數據流轉都是模塊間經由過程Avalon ST總線停止交互的,不需求NIOS II往履行搬運任務,是以數據的搬運效力年夜年夜進步。
本節暫不合錯誤Avalon ST總線停止過多的講授,總之,我們可以把Avalon ST總線想象成一個水管,水從水管的一頭可以很不難且疾速的流到另一頭,不需求第三方用水瓢一瓢一瓢的往舀曩昔。
Framebuffer體系數據流
在全部FrameBuffer體系中,SGDMA模塊是最焦點的部門,他完成了對SDRAM存儲器的直接讀取操縱,并將讀到的數據終極以數據流的情勢輸入。SGDMA的應用相當的普遍,不只是在本體系中,在Altera良多官方design中也都應用了SGDMA IP核,好比PCIE 示例、千兆以太網示例、VIP示例等,關于SGDMA路上餓了可以吃。而這個,妃子還想放在同樣的方法。在行李裡,但我怕你不小心弄丟了,還是留給你隨身攜帶比較安全。”的具體先容,可以參看SGDMA的用戶手冊,我們也盼望能盡快發布SGDMA的專題講授。這里僅對SGDMA的端口和效能停止下簡述。
本體系中SGDMA被設置包養網單次裝備擺設為存儲映射形式到數據流形式,即數據的泉源采用地址映射的方法組織,而數據的接受方則應用數據流的方法停止接受。在此種形式下,SGDMA總共有5個端口,分辨為Avalon MM Slave接口的把持總線,Avalon MM Master接口源數據讀取總線、Avalon MM Master接口的描寫符寫進總線和Avalon MM Master接口的描寫符讀取總線,以及終極的Avalon ST Source數據輸入總線。
csr:Avalon MM Slave接口的把持總線,與NIOS II CPU停止銜接,NIOS II CPU經由過程該接口讀寫SGDMA外部的把持和狀況存放器,以完成DMA的傳輸把持。這也是全部數據傳播輸獨一需求NIOS II介入的處所。NIOS II現實就飾演了個老板的腳色,設定SGDMA往做什么,SGDMA接就任務后就下往干搬運的苦力活兒了,而NIOS II這個老板,則可以坐在辦公室喝喝咖啡,了解一下狀況報紙,等著SGDMA把苦力干完后回來陳述(中止)或許隔一段時光打個德律風問問任務狀況和進度(查詢)。
m_r包養金額ead:Avalon MM Master接口的源數據讀取總線,該接話柄現對Avalon MM總線上掛載的存儲需求傳輸的數據源存儲器的讀取,例如SDRAM、DDR2 SDRAM。從這里,大師也可以看到,在Qsys搭建的體系中,不是只要NIOS II可以或許往讀取SDRAM、DDR2等存儲器,現實上,只需是Avalon MM Master接口的IP,都可以往讀取這些存儲器,我們甚至可以本身編寫一個Avalon MM Master接口的邏輯,來代替NIOS II CPU完成各類IP核的讀寫操縱。
descriptor_write:描寫符寫端口,SGDMA包養金額完成數據傳輸需求有一個描寫符,SGDMA的一切傳輸都是受描寫符把持的,經由過程描寫符存儲SGDMA的及時傳輸狀況。這里專門應用一個片上存儲器來存儲SGDMA的描寫符,可以或許節儉FPGA資本。不然,假如應用FPGA資本來完成描寫符,將會帶來很是年夜的資本耗費。
descriptor_read:描寫符讀端口,SGDMA應用此端口讀取描寫符,以取得傳輸信息。
out:數據流輸入端口,從SDRAM或DDR2中讀取到的數據會經過此端口流出,以供給給數據的應用端應用。
對于我們剖析數據流來說,可以臨時疏忽csr、descriptor_write和descriptor_read端口,由於這些端口并不處于數據通路上,真正處于數據通路上的,是m_read(數據流進)和out(數據流出)端口。下圖為本體系的數據流圖。
NIOS II CPU應用SDRAM作為運轉存儲器,存儲法式和數據,同時,SGDMA從SDRAM中及時讀取需求顯示到VGA屏上包養管道的數據。NIOS II 和 SGDMA之間對SDRAM的應用仲裁由Avalon MM總線的仲裁機制主動處置。
經由過程以上先容,清楚了體系的數據流向,就可以起首完成數據流總線的銜接了。每個st 流接口的模塊都有2個流端口,一個是流輸出端口(in: Avalon Streaming Sink),另一個是流輸入端口(out: Avalon Streaming Source)。銜接時,只需將上一級模塊的流out銜接到下一級模塊的流in端口,即可完成數據流的主動連接。在本例中每個模塊端口銜接如下表所示:
當然,銜接完成總線后,不要忘了銜接復位收集、導出需求引出到體系頂層的電子訊號以及中止收集。
修正NIOS II的復位向量為EPCS、異常向量為SDRAM。
主動分派基地址。
到HDL Eaxmple欄復制例化模版。
保留并開端generate。
至包養感情此,全部體系就搭建完成了,下一個步驟就是將體系參加到Quartus II工程中。起首是將mysystem.qsys文件添加到工程,然后完成工程頂層文件的編寫。這些最基礎的操縱,這里就不在贅述,以下為工程頂層代碼:
module Framebuffer_VGA(
input wire clk_50m,
input wire reset_n,
output wire vga_clk,
output wire vga_de,
output wire [7:0] vga_r,
output wire [7:0] vga_g,
output wi包養意思re [7:0] vga_b,
output wire vga_hs,
output wire vga_vs,
output wire vga_bl,
output wire sdram_clk,
output wire [11:0] sdram_addr,
output wire [1:0] sdram_ba,
output wire sdram_cas_n,
output wire sdram_cke,
output wire sdram_cs_n,
inout wire [15:0] sdram_dq,
output wire [1:0] sdram_dqm,
output wire sdram_ras_n,
output wire sdram_we_n,
output wire epcs_dclk,
output wire epcs_sce,
output wire epcs_sdo,
input wire epcs_data0
);
assign vga_bl = 1;
wire vga_clk_r;
assign vga_clk = ~vga_clk_r; //對VGA時鐘反相,以包管數據中間對齊
mysystem u0 (
.clk_50m_clk (clk_50m),
.reset_50m_reset_n 包養價格 (reset_n),
.vga_clk (vga_clk_r),
.vga_de 師父道:“夫人是不是忘了花兒絕書的內容?” (vga_de),
.vga_r (vga_r),
.vga_g (vga_g),
.vga_b (vga_b),
.vga_hs 藍玉華愣了一下,點了點頭,道:“你想清楚就好。不過,如果你改變主意,想哪天贖回自己,再告訴我一次。我說過,我放 (vga_hs),
.vga_vs (vga_vs),
.altpll_0_phasedone_conduit_export (),
.altpll_0_locked_conduit_export (),
.altpll_0_areset_conduit_export (),
.epcs_dclk (epcs_dclk),
.epcs_sce 她的說法似乎有些誇張和多慮,但誰知道她親身經歷過那種言辭詬病的生活和痛苦?這種折磨她真的受夠了,這一次,她這輩 (sd包養epcs_sce),
.epcs_sdo (epcs_sdo),
.epcs_data0 (epcs_data0),
.sdram_clk_clk (sdram_clk),
.sdram_addr (sdram_addr),
.sdram_ba (sdram_ba),
.sdr包養平台am_cas_n (包養網dcardsdram_cas_n),
.sdram_cke (sdram_cke),
.sdram_cs_n (sdram_cs“第一次全家一起吃飯,女兒想起來請婆婆和老公吃飯,婆婆攔住她,說家裡沒有規矩,而且她對此不高興,於是讓她坐下來_n),
.sdram_dq (sdram_dq),
.sdram_dqm (sdram_dqm),
.sdram_ras_n (sdram_ras_n),
.sdram_we_n (sdram_we_n)
);
endmodule
然后分派引腳,本體系在AC620開闢板上的引腳分派請參照AC620開闢板引腳分派表。
分派引腳后,記得在quartus ii軟件中設置一切雙效能引腳為用戶形式。
編譯工程獲得sof編程文件。
至此,全部FrameBuffer體系硬件design就完成了,下一個步驟,我們就可以編寫響應的驅動法式和利用法式,在目的板上運轉了。
創立Eclipse工程
翻開NIOS II EDS軟件,導進我們供給的VGA和VGA_bsp兩個工程。修正setting.bsp文件中第7行和第9行兩個地位為本身電腦上對應的地位。封閉文件,然后build工程。假如編譯掉敗,提醒無權限,請先封閉一切文件,然后選擇全部文件夾右鍵獲取治理員權限。
#include “altera_avalon_sgdma_descriptor.h”
#include “altera_avalon_sgdma_regs.h”
#include “alt_types.h”
#include “alt_video_display.h”
#include “unistd.h”
#include “pic1.h包養ptt“
#include “pic2.h”
#include “system.h”
包養網比較
#define WIDTH 640
#define HEIGHT 480
#define NUM_FRAME 1
包養俱樂部包養價格
int main() {
unsigned int d = 0;
////Initial LCD Display
alt_video_display* display_global;
// printf(“Initializing LCD display controller
“);
display_global = alt_video_display_init(LCD_SGDMA_NAME, // Name of video controller
WIDTH, // Widt包養故事h of display
HEIGHT, // Height of display
16, // Color depth (32 or 16)
SDRAM_BASE + SDRAM_SPAN / 2, // Where we want our frame buffers
ONCHIP_MEMORY長期包養_BASE, // Where we want our descriptors
NUM_FRAME);
// if (display_global)
// printf(” – LCD Initialization OK
“);
// else
// printf(” –台灣包養 LCD FAILED
“);
alt_video_display_clear_screen(display_global, 0xff);
show_pic(display_global, pic1);
usleep(1000000);
while(1){
}
}
編譯完成后下載sof,并在nios ii eds中履行run。銜接VGA顯示器,就能在屏幕上顯示一副美男圖,如下圖所示:
發佈留言