【小梅哥FPGA】Altera SOPC FrameBuffer體系design教程(應用VGA及時顯示肆聊包養網站意字符圖案)【AC620開闢板手把手教程】

作者:

分類:

[經歷] 【小梅哥FPGA】Altera SOPC FrameBuffer體系design教程(應用VGA及時顯示肆意字符圖案)【AC620開闢板手把手教程】
本文觸及到若干復雜IP的應用,包含SGDMA、Avalon ST adapter,是進階進修SOC/SOPC很是適合的起航材料。 小梅哥編寫,未經受權,嚴禁轉錄發載或用于任何貿易用處 在嵌進式體系中,LCD屏作為最友愛的人機交互方法,被大批的利用到了各個體系中。在基于ARM處置器的體系中,利用更長短常普遍。FPGA作為狹義嵌進式體系的一員,天然也有良多時辰需求來驅動顯示屏顯示一些內在的事務,例如常常有需求要用FPGA來做液晶測試架,做顯示器驅動測試卡。良多進修了FPGA的伴侶都了解,FPGA驅動VGA顯示器是比擬輕松的,簡直每個板卡商供給的材料中都供給了有諸如顯示彩條,顯示圖案,甚至顯示包養app簡略的文字。可是,當盼望顯示加倍復雜的內在的事務的時辰,往往就很難辦到了。由於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驅動時序簡直完整一樣,只是分歧的辨別率之間,當時序參數分歧。說到這個驅動480*272辨別率顯示屏靜態顯示復雜內在的事務,信任良多伴侶并不生疏,是的,在我們之前的SOPC公然課時辰,就曾經給大師講授過完成這種體系的一種方法,即便用了一片自力的SRAM來作為顯示屏的顯存,顯示驅動模塊直接讀取SRAM中的數據并及時刷新顯示,而NIOS 包養網推薦II CPU則只在需求刷新顯包養sd示內在的事務的時辰,才履行對SRAM的寫進操縱。此種方法,需求一片自力的SRAM作為顯存,以及一片SDRAM作為NIOS II的運轉內存。除了SRAM的應用會增添體系的BOM本錢外,SRAM也會占用失落FPGA芯片較多的管腳,招致必需得應用256腳BGA計劃的芯片才幹夠完成。是以,此種計劃僅合適在對本錢不太敏感高的場所應用。本節要先容的計劃,是對該體系改良優化獲得的。 本節所描寫的體系,僅需用到以下硬件資本1. 台灣包養    EP4CE6/EP4CE10型FPGA芯片一片(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核:l c包養站長lk_0:輸出時鐘治理單位,體系默許添加l altpll_0:PLL鎖相環,對輸出時鐘停止分頻和倍頻,以獲得兩路頻率為100MHz,相位相差180度的時鐘電子訊號,分辨供給給體系中邏輯電路任務(包括NIOS II軟核處置器)和SDRAM芯片應用。以及1路24M的時鐘電子訊號,供640*480辨別率的VGA驅動電路應用。l NIOS II CPU:完成體系的把持以及顯示內在的事務的處置。l SDRAM:NIOS II CPU運轉內存和TFT顯示圖像幀緩存。l onch包養價格pttip_memory:片上存儲器,指定SGDMA要履行的數據傳輸,重要用作SGDMA的描寫符存儲器。l lcd_sgdma:SGDMA IP,重要完成大批數據的高效搬運,支撐流形式,包養網VIP效力比Avalon MM接口的DMA核高。l timing_adapter:時序婚配IP核,重要包養網推薦用于流數據在兩個分歧模塊間停止傳遞時,對部門電子訊號加上必定延遲,使得數據和標志電子訊號可以或許完整同步(說的簡略點兒,就是用存放器打拍的方法對一些電子訊號停止延遲,使數據和把持電子訊號對齊)。l fifo:雙時鐘fifo,重要完成數據流的傳輸速率轉換。SGDMA輸入的數據流,是依照和存儲器雷同的時鐘速率(本例中為100M)停止的,而在數據應用端,即VGA顯示部門,是依照9M的時鐘取用數據的,是以應用雙時鐘fifo,處理跨時鐘域的題目。l VGA_SINK:該IP為第三方開源IP,由友晶科技供給,包養網dcard重要完成Avalon ST流數據轉換成VGA行場時序并驅動VGA屏停止顯示。l EPCS:EPCS FLASH存儲器把持IP,應用該IP,使得EPCS芯片可以或許存儲FPGA固件和NIOS II的法式。
l jtag_uart0:調試串口,重要用來打印一些調試信息,在design的後期調試中很有效
接上去,將具體講授本體系的搭建經過歷程。1、 altpll_0為了包管全部體系可以或許具有較高的機能,是以讓其運轉在100MHz,所以需求應用PLL對內部晶振發生的50MHz輸出的時鐘電子訊號停止倍頻,獲得兩路頻率為100M,相位相差90度的時鐘電子訊號。別的,還需求供給一路9MHz時鐘電子訊號供480*272辨別率的TFT屏驅動應用。關于PLL的具體添加和參數修正方法這里不再多說,僅供給設置成果:inclk0:50M不需求areset電子訊號和locked電子訊號c0:9MHzc1:100MHz,相位為0c2:100MHz,相位為-180度2、 nios i包養站長i cpu一切設置應用默許值,等后續添加完sdram和EPCS和,將復位向量(ResetVector)設置為epcs,將異常向量(Exception Vector)設置為sdram。3、 sdram數據位寬(Data Width)為16bit。構造(Architecture)為一個片選,4個bank。地址寬度(Address Width)Row地址為12、Column地址為9。其他默許即可。
4、 on包養甜心網chip_memory片上緩存onchip_memory作為SGDMA的描寫符存儲器,存儲SGDMA的數據傳輸描寫內在的事務。類型為RAM;數據位寬選擇32位;存儲器總量選擇16384Bytes(用戶可以依據本身芯片的RAM容量恰當增添或減小該值);
5、 lcd_sgdma選擇傳輸形式為存儲器到數據流形式(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。是以,接上去就需求添加一個雙時鐘fifo,先將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_SINKVGA_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(行顯示有用像素):640H_FPORCH:16時鐘周期H_SYNC:96時鐘周期H_BPROCH:48時鐘周期 V_DISP(行顯示包養感情有用像素):480V_FPORCH:1時鐘周期V_SYNC:2時鐘周期V_BPROCH:33時鐘周期
這些參數都是從VGA尺度中查到的。 9、EPCS EPCS的添加沒有什么需求特殊留意的,一切依照默許設置即可。 至此,我們曾經完成了全部顯示體系的組件添加任務,接上去就該停止組件間的總線銜接了。在總線銜接之前,必需要包養俱樂部先給大師講授一下本體系的數據流向,由於本體系和我們之前在SOPC公然課時辰講過的體系架構還不太一樣,包養管道本體系重要引進了Avalon ST總線。在之前公然課時辰講過的各類例子,都是基于Avalo“聽到你這麼說,我就放心了。”蘭學士笑著點了點頭。 “我們夫妻只有一個女兒,所以花兒從小就被寵壞了,被寵壞了,n 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接口的把持總線,與NIOSII CPU停止銜接,NIOS II CPU經由過程該接口讀寫SGDMA外部的把持和狀況存放器,以完成DMA的傳輸把持。這也是全部數據傳播輸獨一需求NIOS II介入的處所。NIOS II現實就飾演了個老板的腳色,設定SGDMA往做什么,SGDMA接就任務后就下往干搬運的苦力活兒了,而NIOS II這個老板,則可以坐在辦公室喝喝咖啡,了解一下狀況報紙,等著SGDMA把苦力干完后回來陳述(中止)或許隔一段時光打個德律風問問任務狀況和進度(查詢)。m_read: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_rea包養價格pttd:描寫符讀端口,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端口,即可完成數據流的主動連接。在本例中每個模塊端口銜接如下表所示:
當然,銜接完成總線后,不要忘了銜接復位收集、導出需求引出到體系頂層的電子訊號以及中止收集。l 修正NIOS II的復台灣包養網位向量為EPCS、異常向量為SDRAM。l 主動分派基地址。l 到HDL Eaxmple欄復制例化模版。l 保留并開端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 wire [7:0]   vga_b,               output wire       vga_hs,             output wire       vga_vs,             output wire       vga_bl,             output wire       sdram_clk,           output wire [1包養網VIP1: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                 (epcs_sce),                 .epcs_sdo                 (epcs_sdo),                 .epcs_data0                 (epcs_data0),             .sdram_clk_clk               (sdram_clk),               .sdram_addr                 (sdram_addr),           .sdram_ba                 (sdram_ba),                 .sdram_cas_n               (sdram_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工程。假如編譯掉敗,提醒無權限,請先封閉一切文件,然后選擇全部文件夾右鍵獲取治理員權限。
以下為main函數內在的事務 #include “stdio.h” #include “stdlib.h” #include “io.h” #include “sys/alt_alarm.h” #include “altera_avalon_sgdma包養違法.h” #include “altera_avalon_sgdma_descriptor.h” #include 在嫁給她之前,席世勳的家有十根手指之多。娶了她後,他趁公婆嫌媳婦不歡而散,廣納妃嬪,寵妃毀妻,立她為正妻。他在”altera_avalon_sgdma_regs.h” #include “alt_types.h” #include “alt_video_disp但即便是濃妝豔抹,害羞的低下頭,他還是一眼就認出了她。新娘果然是他在山上救出來的那個女孩,就是藍雪芙小姐的女兒lay.h” #include “unistd.h” #include “pic1.h” #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 controllern “);    display_global = alt_video_display_init(LCD_SGDMA_NAME, // Name of video controller         WIDTH, // Width 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 OKn”); // else //     printf(” – LCD FAILEDn”);    alt_video_display_clear_screen(display_global, 0xff);    show_pic(display_global, pic1);    usleep(1000000);    while(1){    } 包養意思}      編譯包養網ppt完成后下載sof,并在nios ii eds中履行run。銜接VGA顯示器,就能在屏幕上顯示一副美男圖,如下圖所示: 若有其它題目,請拜見小梅哥博客中關于NIOS II的相干內在的事務。如“【2017最新】處理NIOS II工程變動位置在磁盤上地位后project無法編譯題目.pdf”和“NIOS II 開闢留意點總結.pdf” 本文檔對應design工程名為:AC620_Framebuffer_VGA,請到AC620開闢板網盤/光盤材料中獲取。
接待參加芯航路FPGA技巧支撐群一路會商進修:472607506(已滿),615381411小梅哥2017年4月17日于成都

• 【 小梅哥 AC620V2 FPGA 開闢板 不花錢試用】小梅哥AC620開闢板全套材料下載鏈接 9985
• 【design實例】【小梅哥FPGA】基于AC620開闢板WM8731的音頻錄制與回放體系 4000
• 【小梅哥FPGA】【design實例】基于AC620開闢板的多通DDS道電子訊號產生器 3933


留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *