泉州企業(yè)免費建站雞西seo
目錄
- 1、前言
- 免責聲明
- 2、SODIMM內存條簡介
- 3、設計思路框架
- 視頻輸入
- 視頻緩存
- MIG配置調用SODIMM內存條
- VGA時序
- 視頻輸出
- 4、vivado工程詳解
- 5、上板調試驗證
- 6、福利:工程代碼的獲取
1、前言
FPGA應用中,數(shù)據(jù)緩存是一大重點,不管是圖像處理還是AD采集亦或是PCIE等等,都需要緩存數(shù)據(jù)以作后續(xù)處理,一般的FPGA可以掛載SDRAM、DDR3、DDR4等內存顆粒作為緩存介質,但有時限于IO口、FPGA型號等原因,還需要設計SODIMM適配額外的內存條才能滿足數(shù)據(jù)緩存的需求,這種需求一般用于高端項目;
本文使用Xilinx的V7 FPGA開發(fā)板NetFPGA-SUME平臺作為實驗板,該開發(fā)板板載2路SODIMM接口,可插入2個內存條作為緩存,該FPGA開發(fā)板可以在網上公開渠道買到;本例程使用HDMI輸入視頻或者內部生成的彩條視頻作為視頻源,將視頻緩存到SODIMM內存條中做圖像三幀緩存后再讀出送HDMI顯示,以驗證FPGA對SODIMM內存條的讀寫是否成功,如果輸出圖像混亂或者質量不高,則證明讀寫有誤,反之則成功;本博客詳細描述了FPGA使用SODIMM內存條接口的設計方案,工程代碼可綜合編譯上板調試,可直接項目移植,適用于在校學生、研究生項目開發(fā),也適用于在職工程師做學習提升,可應用于醫(yī)療、軍工等行業(yè)的高速接口或圖像處理領域;
提供完整的、跑通的工程源碼和技術支持;
工程源碼和技術支持的獲取方式放在了文章末尾,請耐心看到最后;
免責聲明
本工程及其源碼即有自己寫的一部分,也有網絡公開渠道獲取的一部分(包括CSDN、Xilinx官網、Altera官網等等),若大佬們覺得有所冒犯,請私信批評教育;基于此,本工程及其源碼僅限于讀者或粉絲個人學習和研究,禁止用于商業(yè)用途,若由于讀者或粉絲自身原因用于商業(yè)用途所導致的法律問題,與本博客及博主無關,請謹慎使用。。。
2、SODIMM內存條簡介
SODIMM接口是比較老式的內存條接口,說他老式是對電腦主板特別是精巧型筆記本主板而言,因為SODIMM接口的體積較大,現(xiàn)在已經流行到了M.2接口,但對于FPGA而言,SODIMM接口并不落伍,畢竟一般而言FPGA的內存需求沒有電腦那么大,加裝SODIMM接口內存條已經是頂配了,關于SODIMM內存條網上有專門的講解,我在這里就不羅嗦了,推薦一篇文章,鏈接如下:
點擊直接前往
3、設計思路框架
設計思路框架如下:
視頻輸入
我的開發(fā)板板載一個FMC接口,我手里正好有一個HDMI輸入輸出的FMC轉接板,其中HDMI輸入接口連接了一塊silcom9011芯片作為HDMI解碼器,將輸入的HDMI視頻TMDS差分視頻解碼為24bit的GRB視頻供FPGA使用;silcom9011芯片需要i2c配置才能使用,本例程提供verilog源碼實現(xiàn)的i2c控制器配置silcom9011,關于silcom9011詳細的配置使用,請看我往期的專門博客,地址如下:
點擊直接前往
HDMI輸出接口連接了一塊silcom9134芯片作為HDMI編碼器,將輸入的24bit的GRB視頻編碼為TMDS差分HDMI視頻輸出;所以視頻輸入可以使用輸入HDMI接口;但有的兄弟板子上也許沒有HDMI輸入接口,所以我專門設計了一個FPGA內部生成的動態(tài)彩條視頻,用來模擬輸入視頻,也可以作為視頻源參與測試,輸入依然可以觀測彩條的動態(tài)變化來驗證;二者的選擇通過工程源碼頂層的`define COLOR_TEST來選擇,選擇切換邏輯如下:
`ifdef COLOR_TESTassign ud_w_0_ud_wclk =vout_clk ;assign ud_w_0_ud_wde =video_de_color ;assign ud_w_0_ud_wvs =video_vs_color ;assign ud_w_0_ud_wdata=video_rgb_color;
`elseassign ud_w_0_ud_wclk =vin_clk ;assign ud_w_0_ud_wde =vin_de ;assign ud_w_0_ud_wvs =vin_vs ;assign ud_w_0_ud_wdata=vin_data;
`endif
如果在頂層把`define COLOR_TEST注釋掉,則輸入視頻源為HDMI輸入接口;
如果在頂層不把`define COLOR_TEST注釋掉,則輸入視頻源為動態(tài)彩條;
動態(tài)彩條頂層模塊接口如下:
視頻緩存
使用我的經典套路FDMA完成,FDMA是專門用于各種類型數(shù)據(jù)讀寫DDR的控制器,用它來緩存視頻也很方便,關于FDMA的專題講解,請看我往期的專門博客,地址如下:
點擊直接前往
MIG配置調用SODIMM內存條
SODIMM內存條本質上還是DDR3顆粒,Xilinx提供專門的MIG IP核作為PHY與之交互,但MIG配置調用SODIMM內存條與傳統(tǒng)不太一樣;其中的關鍵點如下:
其他配置則根據(jù)自己的內存條型號選擇即可;
我的板子內存條如下:
VGA時序
由于輸出視頻分辨率為1920x1080@60Hz;所以需要提供標準的VGA時序驅動才能形成視頻流,例程提供verilog源碼的VGA時序模塊,改模塊支持常用的7種分辨率,通過定成的宏定義修改,如下:
本設計使用了1080P時序;
視頻輸出
我的開發(fā)板板載一個FMC接口,我手里正好有一個HDMI輸入輸出的FMC轉接板,其中HDMI輸入接口連接了一塊silcom9011芯片作為HDMI解碼器,將輸入的HDMI視頻TMDS差分視頻解碼為24bit的GRB視頻供FPGA使用;HDMI輸出接口連接了一塊silcom9134芯片作為HDMI編碼器,將輸入的24bit的GRB視頻編碼為TMDS差分HDMI視頻輸出;silcom9134芯片需要i2c配置才能使用,本例程提供verilog源碼實現(xiàn)的i2c控制器配置silcom9134,關于silcom9134詳細的配置使用,請看我往期的專門博客,地址如下:
點擊直接前往
4、vivado工程詳解
開發(fā)板FPGA型號:Xilinx–V7–xc7vx690tffg1761-3;
開發(fā)環(huán)境:Vivado2019.1;
輸入:HDMI視頻或動態(tài)彩條,分辨率1920x1080@60Hz;
輸出:HDMI視頻,分辨率1920x1080@60Hz;
應用:FPGA使用SODIMM內存條;
工程Block Design如下:
工程代碼架構如下:
綜合編譯完成后的FPGA資源消耗和功耗預估如下:
5、上板調試驗證
板子如下:
HDMI接口輸出如下:
動態(tài)彩條輸出如下:
以動態(tài)彩條輸出為例,看看輸出演示視頻:
FPGA MIG配置SOMIDD內存條
6、福利:工程代碼的獲取
福利:工程代碼的獲取
代碼太大,無法郵箱發(fā)送,以某度網盤鏈接方式發(fā)送,
資料獲取方式:私,或者文章末尾的V名片。
網盤資料如下: