一個(gè)異步FIFO的設(shè)計(jì)示例_第1頁
一個(gè)異步FIFO的設(shè)計(jì)示例_第2頁
一個(gè)異步FIFO的設(shè)計(jì)示例_第3頁
一個(gè)異步FIFO的設(shè)計(jì)示例_第4頁
一個(gè)異步FIFO的設(shè)計(jì)示例_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、、異步FIFO技術(shù)規(guī)范 1. 總體描述 1.1.功能定義 異步FIFO ( First In First Out)指的是在兩個(gè)相互獨(dú)立的時(shí)鐘域下,數(shù)據(jù)從一個(gè) 時(shí)鐘域?qū)懭隖IFO而另一個(gè)時(shí)鐘域又從這個(gè) FIFO中將數(shù)據(jù)讀出。 本設(shè)計(jì)用8*256的RAM實(shí)現(xiàn)異步FIFO。 具體功能: 1 .寫使能有效,且FIFO不為滿時(shí),在寫時(shí)鐘的上升沿向FIFO中寫入數(shù)據(jù)。 2 .讀使能有效,且FIFO不為空時(shí),在讀時(shí)鐘的上升沿從FIFO中讀出數(shù)據(jù)。 3 .當(dāng)FIFO寫滿時(shí)產(chǎn)生滿信號,當(dāng)FIFO讀空時(shí)產(chǎn)生空信號。 1.2.應(yīng)用范圍 異步FIFO是用來作為緩沖的存儲(chǔ)器,它能對數(shù)據(jù)進(jìn)行快速、順序的存儲(chǔ)和發(fā)送 主要用

2、來解決不同速率器件間的速率匹配問題。 2. 引腳描述 datan7 2 full lit- r en r clk empty . w_clk 8*256 異步FIFO w_en data_out0 rst 2.1.引腳功能描述 信號名 輸入/輸出 功能描述 r_clk 輸入 讀數(shù)據(jù)時(shí)鐘信號 w_clk 輸入 寫數(shù)據(jù)時(shí)鐘信號 datan7 : 0 輸入 8位的輸入數(shù)據(jù) r_en 輸入 讀使能,高電平有效,在FIFO非空時(shí),clk上升 沿讀入數(shù)據(jù); w_en 輸入 寫使能,高電平有效,在FIFO非滿時(shí),clk上升 沿寫入數(shù)據(jù); rst 輸入 異步清零,低電平有效,低電平時(shí)讀地址,寫地址, 計(jì)數(shù)器都

3、清零。 empty 輸出 空信號,高電平有效,當(dāng) FIFO讀空時(shí)其值為1 full 輸出 滿信號,高電平有效,當(dāng)FIFO寫滿時(shí)其值為1 data_out7:0 輸出 8位的輸出數(shù)據(jù) 2.2.引腳時(shí)序描述 當(dāng)寫滿時(shí)full由低變高,當(dāng)讀空時(shí) empty由低變高。只要不為滿full就為低,不 為空empty 就為低。 3. 頂層模塊劃分 圖2 頂層模塊說明: 1. ram_fifo :存儲(chǔ)器模塊,用于存放及輸出數(shù)據(jù); 2. w_addr_reg :保存訪問RAM的寫地址; 3. r_addr_reg :保存訪問RAM的讀地址; 4. w_addr_adder :計(jì)算RAM下一個(gè)寫地址; 5. r_

4、addr_adder:計(jì)算RAM 下一個(gè)讀地址; 6. cmp :將讀地址和寫地址進(jìn)行比較產(chǎn)生空滿標(biāo)志。 設(shè)計(jì)思想說明: FIFO滿空的判定:當(dāng)讀地址的值加1之后等于寫地址的值時(shí),表明FIFO寫滿,當(dāng)寫 地址的值加一之后等于讀地址的值時(shí),表明FIFO 讀空。在初始狀態(tài)時(shí) FIFO的讀地址在 RAM的中間位置,寫地址在 RAM的開始位置,所以初始狀態(tài)FIFO不滿也不空??諠M信 號的產(chǎn)生由組合電路產(chǎn)生。 4. 功能模塊描述 4.1. ram_fifo 模塊 ram_fifo : RAM 存儲(chǔ)器。用 8*256 雙口 RAM 實(shí)現(xiàn)。 4.2. w_addr_reg 模塊 w_addr_reg 模塊:

5、寫地址寄存器。用來寄存寫地址加法器輸出的地址。 4.3. r_addr_reg 模塊 r_addr_reg 模塊:讀地址寄存器。用來寄存讀地址加法器輸出的地址。 4.4. w_addr_adder 模塊 w_addr_adder 模塊:寫地址加法器。把寫地址寄存器的輸出加一,即表示當(dāng)前 寫 地址的下一地址位。當(dāng) w_en 為低時(shí)停止累加。 4.5. r_addr_adder 模塊 r_addr_adder 模塊:讀地址加法器。把讀地址寄存器的輸出加一,即表示當(dāng)前 讀地址的下一地址位。當(dāng) r_en 為低時(shí)停止累加。 4.6. cmp 模塊 cmp 模塊:讀地址和寫地址進(jìn)行比較,產(chǎn)生滿空標(biāo)志。 、

6、異步 FIFO 總體設(shè)計(jì)方案 1. 概述 異步 FIFO 有高速、可靠性好等特點(diǎn)。由于異步 FIFO 在兩個(gè)不同時(shí)鐘系統(tǒng)之間能夠快 速而方便地傳輸實(shí)時(shí)數(shù)據(jù),因此在網(wǎng)絡(luò)接口、圖像處理等方面,異步FIFO 得到了廣泛的應(yīng) 用。 異步FIFO 指的是在兩個(gè)相互獨(dú)立的時(shí)鐘域下,數(shù)據(jù)從一個(gè)時(shí)鐘域?qū)懭?FIFO而另一個(gè)時(shí) 鐘域又從這個(gè)FIFO中將數(shù)據(jù)讀出。異步FIFO 通常被用來將數(shù)據(jù)從一個(gè)時(shí)鐘域安全地傳送 到另外一時(shí)鐘域。 2.功能模塊設(shè)計(jì) 2.1. ram_fifo 模塊 2.1.1. ram_fifo 模塊描述 ram_fifo : RAM 存儲(chǔ)器。用 8*256 雙口 RAM 實(shí)現(xiàn)。 2.1.2.

7、 管腳描述 信號名稱 輸入/輸出 源 功能描述 w_clk 輸入 PIN 寫時(shí)鐘信號 w_en 輸入 PIN 寫使能信號 w_addr7:0 輸入 w_addr_reg 寫地址信號 r_clk 輸入 PIN 讀時(shí)鐘信號 r_en 輸入 PIN 讀使能信號 r_addr7:0 輸入 w_addr_reg 讀地址信號 data_i n7:0 輸入 PIN 輸入數(shù)據(jù) data_out7:0 輸出 輸出數(shù)據(jù) 表2 2.1.3. 實(shí)現(xiàn)說明 應(yīng)使用雙口 RAM,雙地址輸入,并且?guī)в凶x寫使能,異步的讀寫時(shí)鐘。RAM寬度 為8bit,深度為256個(gè)存儲(chǔ)單元。 2.2. w_addr_reg 模塊 2.2.1.

8、 w_addr_reg 模塊描述 w_addr_reg 模塊:寫地址寄存器。用來寄存寫地址加法器輸出的地址。 2.2.2. 管腳描述 信號名稱 輸入/輸出 源 目標(biāo) 功能描述 W_clk 輸入 PIN 寫時(shí)鐘信號 Rst 輸入 PIN 復(fù)位信號,低電平有 效 W_addr_ nt 7:0 輸入 W_addr_ad dr 輸入數(shù)據(jù) W_addr7:0 輸出 RAM W_addr 輸出數(shù)據(jù) 表3 2.2.3. 實(shí)現(xiàn)說明 在時(shí)鐘的上升沿將8位的輸入數(shù)據(jù)鎖存輸出。 2.3. r_addr_reg 模塊 2.3.1. r_addr_reg 模塊描述 r_addr_reg 模塊:讀地址寄存器。用來寄存讀地

9、址加法器輸出的地址。 2.3.2. 管腳描述 信號名稱 輸入/輸出 源 目標(biāo) 功能描述 R_clk 輸入 PIN 讀時(shí)鐘信號 Rst 輸入 PIN 復(fù)位信號,低電平有 效 R_addr _ nt7:0 輸入 R_addr_ad der 輸入數(shù)據(jù) R_addr7:0 輸出 RAM R_addr 輸出數(shù)據(jù) 表4 2.3.3. 實(shí)現(xiàn)說明 在時(shí)鐘的上升沿將8位的輸入數(shù)據(jù)所存輸出。 2.4. w_addr_adder 模塊 信號名稱 輸入/輸出 源 目標(biāo) 功能描述 w_en 輸入 PIN 1-允許地址加1 ; 0-禁止地址加1 ; w_addr7:0 輸入 W_addr_re g 輸入數(shù)據(jù) W_addr

10、_ nt7:0 輸出 W_addr_re g 加一后輸出數(shù)據(jù) 表5 2.4.3. 實(shí)現(xiàn)說明 以w_addr為輸入,輸出為w_addr+1 。 241. w_addr_adder w_addr_adder 地址的下一地址位。當(dāng) 2.4.2. 管腳描述 模塊描述 模塊:寫地址加法器。把寫地址寄存器的輸出加一,即表示當(dāng)前寫 w_en為低時(shí)停止累加。 2.5. r_addr_adder 模塊 2.5.1. r_addr_adder模塊描述 r_addr_adder 模塊:讀地址加法器。把讀地址寄存器的輸出加一,即表示當(dāng)前讀 地址的下一地址位。當(dāng)r_en為低時(shí)停止累加。 2.5.2. 管腳描述 信號名稱

11、 輸入/輸出 源 目標(biāo) 功能描述 r_en 輸入 PIN 1-允許地址加1 ; 0-禁止地址加1 ; r_addr7:0 輸入 r_addr_reg 輸入數(shù)據(jù) r_addr_ nt7:0 輸出 r_addr_re g 加一后輸出數(shù)據(jù) 表6 2.5.3. 實(shí)現(xiàn)說明 2.6. cmp 模塊 2.6.1. cmp模塊描述 cmp模塊:讀地址和寫地址進(jìn)行比較,產(chǎn)生滿空標(biāo)志。 2.6.2. 管腳描述 信號名稱 輸入/輸出 源 目標(biāo) 功能描述 W_addr7:0 輸入 W_addr_reg FIFO當(dāng)前的寫地址 R_addr7:0 輸入 R_addr_re FIFO當(dāng)前的讀地址 empty 輸出 PIN

12、0-FIFO未空 1-FIFO讀空 full 輸出 PIN 0-FIFO未滿 1-FIFO寫滿 表7 2.6.3. 實(shí)現(xiàn)說明 將w_addr加一與r_addr對比,相等則 full為1否則為0 ; 將r_addr 加一與 w_addr對比,相等則 empty 為1否則為0 ; 三、異步FIFO驗(yàn)證方案 總體驗(yàn)證方案 1.1. 測試FIFO在正常狀態(tài)下,是否能寫入和讀出;full和empty的標(biāo)志位均為0 ; 1.2. 測試FIFO在寫滿時(shí),full是否能變?yōu)楦?;?dāng)滿時(shí)讀出一個(gè)數(shù),full能否由高變低。 1.3. 測試FIFO在讀空時(shí),empty是否能變?yōu)楦?;?dāng)空時(shí)寫入一個(gè)數(shù),empty能否由高

13、 變低。 1.4. 異步復(fù)位后,F(xiàn)IFO是否可以正常工作。 另外,在編寫激勵(lì)時(shí),F(xiàn)IFO讀空后,則將讀使能禁止,F(xiàn)IFO寫滿后,則將寫使能禁 止,以保證讀出和寫入數(shù)據(jù)的正確性。 四、電路設(shè)計(jì)源代碼及仿真激勵(lì) ( 1)異步 FIFO 源代碼: module fifo( data_in, data_out, r_en, w_en, r_clk, w_clk, full, empty, rst ); input 7:0data_in; input r_en; input w_en; input r_clk; input w_clk; input rst; output 7:0data_out; ou

14、tput empty; output full; wire 7:0w_addr; wire 7:0r_addr; wire 7:0w_addr_nt; wire7:0r_addr_nt; ram u1( .data_out(data_out), .data_in(data_in), .w_clk(w_clk), .r_clk(r_clk), .w_en(w_en), .r_en(r_en), .w_addr(w_addr), .r_addr(r_addr) ); w_addr_reg u2( .w_addr(w_addr), .w_addr_nt(w_addr_nt), .w_clk(w_cl

15、k), .rst(rst) ); r_addr_reg u3( .r_addr(r_addr), .r_addr_nt(r_addr_nt), .r_clk(r_clk), .rst(rst) ); w_addr_adder u4( .w_en(w_en), .w_addr(w_addr), .w_addr_nt(w_addr_nt) ); r_addr_adder u5( .r_en(r_en), .r_addr(r_addr), .r_addr_nt(r_addr_nt) ); cmp u6( .w_addr(w_addr), .r_addr(r_addr), .full(full), .

16、empty(empty) ); endmodule module ram( data_out, data_in, w_clk, r_clk, w_en, r_en, w_addr, r_addr ); input 7:0data_in; input w_clk; input r_clk; input w_en; input r_en; input 7:0w_addr; input 7:0r_addr; output 7:0data_out; reg 7:0ram_f255:0; reg 7:0data_out; always(posedge r_clk) begin if(!r_en) dat

17、a_out = 8hzz; else begin data_out = ram _fr_addr; end end always(posedge w_clk) begin if(!r_en) ram_fw_addr = ram_fw_addr; else begin ram_fw_addr = data_in; end end endmodule /w_addr_reg module w_addr_reg( w_addr, w_addr_nt, w_clk, rst ); input 7:0w_addr_nt; input rst; w_clk; input always(posedge w_

18、clk or negedge rst) begin if(!rst) w_addr = 8h1f; else w_addr = w_addr_nt; end endmodule /r_addr_reg module r_addr_reg( r_addr, r_addr_nt, r_clk, rst ); input 7:0r_addr_nt; input r_clk; input rst; output 7:0r_addr; always(posedge r_clk or negedge rst) begin if(!rst) r_addr = 8h00; else r_addr = r_ad

19、dr_nt; end endmodule / / /w_addr_adder module w_addr_adder( ); w_en, w_addr, w_addr_nt input w_en; input 7:0w_addr; output 7:0w_addr_nt; assign w_addr_nt = w_en ? (w_addr + 8h01) : w_addr; endmodule /r_addr_adder module r_addr_adder( r_en, r_addr, r_addr_nt ); input r_en; input 7:0r_addr; output 7:0

20、r_addr_nt; assign r_ addr_nt = r_en ? (r_addr + 8h01) : r_addr; endmodule /cmp module cmp ( w_addr, r_addr, empty, full ); input 7:0w_addr; input 7:0r_addr; output empty; output full; assign empty = r_addr + 1 = w_addr; assign full = w_addr + 1 = r_addr; endmodule 見 fifo_tb.v timescale 1n s/100ps module fifo_tb; reg 7:0data_in; reg r_en; reg w_en; reg r_clk; reg w_clk; reg rst; wire 7:0data_out wire full; wire empty; reg 7:0count; fifo u( .data_in(data_in), .data_out(data_out), .r_en(r_en), .r_clk(r_clk), .w_en(w_en), .w_clk(w

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論