資源描述:
《同步fifo與異步fifo》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、l同步FIFO之VHDL描述同步FIFO的意思是說FIFO的讀寫時鐘是同一個時鐘,不同于異步FIFO,異步FIFO的讀寫時鐘是完全異步的。同步FIFO的對外接口包括時鐘,清零,讀請求,寫請求,數(shù)據(jù)輸入總線,數(shù)據(jù)輸出總線,空以及滿信號。下面分別對同步FIFO的對外接口信號作一描述:1.?時鐘,輸入,用于同步FIFO的讀和寫,上升沿有效;2.?清零,輸入,異步清零信號,低電平有效,該信號有效時,F(xiàn)IFO被清空;3.?寫請求,輸入,低電平有效,該信號有效時,表明外部電路請求向FIFO寫入數(shù)據(jù);4.?讀請求,輸入,低電平有效,該信號有效時,表明外部電路請求從FIFO中讀取數(shù)據(jù);5.?數(shù)據(jù)輸入總線,輸
2、入,當(dāng)寫信號有效時,數(shù)據(jù)輸入總線上的數(shù)據(jù)被寫入到FIFO中;6.?數(shù)據(jù)輸出總線,輸出,當(dāng)讀信號有效時,數(shù)據(jù)從FIFO中被讀出并放到數(shù)據(jù)輸出總線上;7.?空,輸出,高電平有效,當(dāng)該信號有效時,表明FIFO中沒有任何數(shù)據(jù),全部為空;8.?滿,輸出,高電平有效,當(dāng)該信號有效時,表明FIFO已經(jīng)滿了,沒有空間可用來存貯數(shù)據(jù)。使用VHDL描述的FIFO將以上面的接口為基礎(chǔ),并且可以參數(shù)化配置FIFO的寬度和深度。先把對外接口描述出來吧。------------------------------------------------------------------------------------
3、-----------------------Designer:skycanny--Date:2007-1-29--Description:SynchronousFIFOcreatedbyVHDLlibraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;useieee.std_logic_arith.all;entitysfifoisgeneric(width:positivedepth:positive);port(clk:instd_logic;rst:instd_logic;wq:instd_logic;
4、rq:instd_logic;data???????:instd_logic_vector(width-1downto0);q:instd_logic_vector(width-1downto0);empty:outstd_logic;full:outstd_logic);endentitysfifo;下面的框圖主要描述同步FIFO的內(nèi)部結(jié)構(gòu),畫出框圖有助于對電路結(jié)構(gòu)的理解,同樣也有助于RTL代碼的編寫:l異步FIFOFIFO(先進先出隊列)是一種在電子系統(tǒng)得到廣泛應(yīng)用的器件,通常用于數(shù)據(jù)的緩存和用于容納異步信號的頻率或相位的差異。FIFO的實現(xiàn)通常是利用雙口RAM和讀寫地址產(chǎn)生模塊來實現(xiàn)的
5、。FIFO的接口信號包括異步的寫時鐘(wr_clk)和讀時鐘(rd_clk)、與寫時鐘同步的寫有效(wren)和寫數(shù)據(jù)(wr_data)、與讀時鐘同步的讀有效(rden)和讀數(shù)據(jù)(rd_data)。為了實現(xiàn)正確的讀寫和避免FIFO的上溢或下溢,通常還應(yīng)該給出與讀時鐘和寫時鐘同步的FIFO的空標(biāo)志(empty)和滿標(biāo)志(full)以禁止讀寫操作。1異步FIFO功能描述圖1給出了FIFO的接口信號和內(nèi)部模塊圖。由圖1可以看出,寫地址產(chǎn)生模塊根據(jù)寫時鐘和寫有效信號產(chǎn)生遞增的寫地睛,讀地址產(chǎn)生模塊根據(jù)讀時鐘和讀有效信號產(chǎn)生遞增的讀地址。FIFO的操作如下:在寫時鐘wr_clk的升沿,當(dāng)wren有效時
6、,將wr_data寫入雙口RAM中寫地址對應(yīng)的位置中;始終將讀地址對應(yīng)的雙口RAM中的數(shù)據(jù)輸出到讀數(shù)據(jù)總線上。這樣就實現(xiàn)了先進先出的功能。???寫地址產(chǎn)生模塊還根據(jù)讀地址和寫地址關(guān)系產(chǎn)生FIFO的滿標(biāo)志。當(dāng)wren有效時,若寫地址+2=讀地址時,full為1;當(dāng)wren無效時,若寫地址+1=讀地址時,full為1。讀地址產(chǎn)生模塊還根據(jù)讀地址和寫地址的差產(chǎn)生FIFO的空標(biāo)志。當(dāng)rden有效時,若寫地址-1=讀地址時,empty為1;當(dāng)rden無效時,若寫地址=讀地址時,empty為1。按照以上方式產(chǎn)生標(biāo)志信號是為了提前一個時鐘周期產(chǎn)生對應(yīng)的標(biāo)志信號。由于空標(biāo)志和滿標(biāo)志控制了FIFO的操作,因此
7、標(biāo)志錯誤會引起操作的錯誤。如上所述,標(biāo)志的產(chǎn)生是通過對讀寫地址的比較產(chǎn)生的,當(dāng)讀寫時鐘完全異步時,對讀寫地址進行比較時,可能得出錯誤的結(jié)果。例如,在讀地址變化過程中,由于讀地址的各位變化并不同步,計算讀寫地址的差值,可能產(chǎn)生錯誤的差值,導(dǎo)致產(chǎn)生錯誤的滿標(biāo)志信號。若將未滿標(biāo)志置為滿標(biāo)志時,可能降低了應(yīng)用的性能,降低寫數(shù)據(jù)速率;而將滿置標(biāo)志置為未滿時,執(zhí)行一次寫操作,則可能產(chǎn)生溢出錯誤,這對于實際應(yīng)用來說是絕對應(yīng)