|
例說FPGA連載62:電子點菜單之FIFO例化說明 特權同學,版權所有 配套例程和更多資料下載鏈接: http://pan.baidu.com/s/1c0nf6Qc
ddr_avl_bridge.v模塊中,使用了3個FIFO,分別用于DDR2數據寫入緩存和DDR2數據讀出緩存。如圖10.6所示,實際上,我們只需要例化兩種類型的FIFO,即圖示的名稱為rdfifo_for_sdram和wrfifo_for_sdram的兩個FIFO。
圖10.6 FIFO模塊截圖 為什么這里可以有兩個名稱為“rdfifo_for_sdram”的FIFO呢?其實,仔細看,你會發現這兩個FIFO在“:”后面的名稱不一樣。一個為“rdfifo_dj_for_sdram_inst”,另一個為“rdfifo_rf_for_sdram_inst”。我們可以先到ddr_avl_bridge.v模塊的verilog代碼中查看一下這兩個FIFO的例化。 //例化SDRAM讀出數據緩存FIFO模塊 rdfifo_for_sdram rdfifo_rf_for_sdram_inst( .aclr(!local_rst_n || rdfifo_clr_r[3]), .data(local_rdata), //128bit input .rdclk(clk_33m), .rdreq(lcd_rfreq), .wrclk(phy_clk), .wrreq(local_rdata_valid && rf_dj_flag), .q(lcd_rfdb), //16bit output .wrusedw(rfifo_rf_used) ); //例化SDRAM讀出數據緩存FIFO模塊 rdfifo_for_sdram rdfifo_dj_for_sdram_inst( .aclr(!local_rst_n || rdfifo_clr_r[3]), .data(local_rdata), //128bit input .rdclk(clk_33m), .rdreq(lcd_djreq), .wrclk(phy_clk), .wrreq(local_rdata_valid && !rf_dj_flag), .q(lcd_djdb), //16bit output .wrusedw(rfifo_dj_used) ); 我們在一開始講解IP核例化的時候就提到過,如這里的“rdfifo_for_sdram”是我們配置的IP核名稱,而“rdfifo_rf_for_sdram_inst”則是我們在應用中集成的模塊名稱。換句話說,同一個工程中,可以有多個不同名稱的IP核模塊(如“rdfifo_rf_for_sdram_inst”),它們的配置都是出于同一個IP核(如“rdfifo_for_sdram”)。或者,我們可以認為這類似與C語言中多次調用同一個函數,只不過,對于FPGA邏輯而言,每一次“調用”都必須實打實的消耗一份“資源”。 |