版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、異步FIFO設計 摘要本文采用格雷碼設計了一個異步FIFO,經(jīng)過DC綜合的結果如下:時鐘頻率:1.1GHz面積: 10744.447um2功耗: 7.791mw目 錄1. 異步FIFO的設計21.1 異步FIFO簡介21.2 FIFO的參數(shù)21.3 FIFO的設計原理21.4 FIFO的設計模塊61.5 用modelsim仿真FIFO111.6 用DC對FIFO進行綜合132.參考文獻151. 異步FIFO的設計1.1 異步FIFO簡介FIFO是英文First In First Out 的縮寫,是一種先進先出的數(shù)據(jù)緩存器,它與普通存儲器的區(qū)別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點就
2、是只能順序寫入數(shù)據(jù),順序的讀出數(shù)據(jù),其數(shù)據(jù)地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址。根均FIFO工作的時鐘域,可以將FIFO分為同步FIFO和異步FIFO。同步FIFO是指讀時鐘和寫時鐘為同一個時鐘。在時鐘沿來臨時同時發(fā)生讀寫操作。異步FIFO是指讀寫時鐘不一致,讀寫時鐘是互相獨立的。異步FIFO(Asynchronous FIFO),一般用于不同時鐘域之間的數(shù)據(jù)傳輸,比如FIFO的一端連接頻率較低的AD數(shù)據(jù)采樣信號,另一端與計算機的頻率較高的PCI總線相連。另外,對于不同寬度的數(shù)據(jù)接口也可以用AFIFO,例如單片機為8位數(shù)據(jù)輸出,而DSP可
3、能是16位數(shù)據(jù)輸入,在單片機與DSP連接時就可以使用AFIFO來達到數(shù)據(jù)匹配的目的。由于實際中,異步FIFO比較常見。為了便于描述,在后面的章節(jié)中將異步FIFO簡稱為FIFO.1.2 FIFO的參數(shù)FIFO的寬度: 進行一次讀寫操作的數(shù)據(jù)的位寬。FIFO的深度: 雙口存儲器中能容納的數(shù)據(jù)的總數(shù)。滿標志: FIFO已滿或將要滿時由FIFO的狀態(tài)電路送出的一個信號,以阻止FIFO的寫操作繼續(xù)向FIFO中寫數(shù)據(jù)而造成溢出。 空標志: FIFO已空或將要空時由FIFO的狀態(tài)電路送出的一個信號,以阻止FIFO的讀操作繼續(xù)從FIFO中讀出數(shù)據(jù)而造成無效數(shù)據(jù)的讀出。 讀時鐘: 讀操作所遵循的時鐘,在每個時鐘
4、沿來臨時讀數(shù)據(jù)。 寫時鐘: 寫操作所遵循的時鐘,在每個時鐘沿來臨時寫數(shù)據(jù)。 讀指針: 指向下一個讀出地址。讀完后自動加1。 寫指針: 指向下一個要寫入的地址的,寫完自動加1。 讀寫指針其實就是讀寫memory的地址,只不過這個地址不能任意選擇,而是連續(xù)的。1.3 FIFO的設計原理整體的框圖如下:圖1.1 FIFO的整體電路圖 FIFO的讀寫指針FIFO可以看成是先進新出的緩沖區(qū),它不像普通的存儲器那樣,有專門的地址信號。它只能根據(jù)地址,順序地讀寫緩沖區(qū)。所以需要有兩個讀寫指針。這里定義如下:wptr: 寫數(shù)據(jù)的指針rptr: 讀數(shù)據(jù)的指針每讀/寫完一個數(shù)據(jù),讀/寫指針就會加1,指向下一個待讀
5、/寫的位置。1.3.2 同步器的設計為了產生空/滿標志,需要對2個讀/寫指針進行比較。由于FIFO的讀/寫時鐘信號,來自2個不同的時鐘域,所以先要將這2個指針同步到一個時鐘域。這里采用兩級D觸發(fā)器級聯(lián)來構成同步器。1.3.3 格雷碼計數(shù)器 采用二進制碼對地址指針進行計數(shù)時,從一個計數(shù)值變到下一個計數(shù)值時,可能有多位發(fā)生跳變,如從7à8變化時,低位由0111à1000,這樣同步器在采樣數(shù)據(jù)時,可能會發(fā)生錯誤。由于采用格雷碼計數(shù)時,每次只有1位發(fā)生跳變,這樣使亞穩(wěn)態(tài)發(fā)生錯誤的可能性大大減小了。1.3.4 空標志的產生由于讀/寫指針,總是指向FIFO的memory中下一個要讀/寫
6、的位置。只有在讀/寫復位的時候,讀/寫指針才回到0位置。復位后,隨著數(shù)據(jù)的讀出/寫入,讀/寫指針指向的地址逐漸增加。如果讀的速度比較快,當讀指針趕上寫指針,即讀指針與寫指針指向同一個位置時,輸出的空標志有效。如下圖所示:圖1.2 FIFO的空/滿標志1.3.5 滿標志的產生滿標志的產生,基于這樣的原理:即“寫指針比空指針多繞了一圈”后,又指向了空指針所指向的位置。由上可知,空標志的產生,也是由于讀/寫指針指向了同一位置。那怎么來區(qū)分,當讀/寫指針指向同一位置時,F(xiàn)IFO是滿,還是空呢?這里,采用增加一位地址位的方法,來區(qū)分滿標志和空標志。假設FIFO的深度為16,那么采用5位的讀/寫地址指針。
7、地址的低4位,用來對尋址memory,讀/寫指針的最高位用來判斷FIFO為空還是為滿。當讀/寫指針的低4位相同時,如果最高位也相同,那么空標志有效,否則滿標志有效。 由于格雷碼具有一個特性:關于中間的計數(shù)值對稱。如果從格雷碼的中間劃開,把它分成2段。分別從上往下看,會發(fā)現(xiàn)在對應的位置,只有最高的2位是完全相反,而其余的低位部分則是相同的。因此,當讀/寫指針的最高2位完全相反,而其余的低位完全相同時,滿標志有效(“讀指針比寫指針多繞了一圈”)。具體如下圖所示:圖1.3 格雷碼的對稱特性1.3.6 格雷碼計數(shù)器如果讀/寫數(shù)據(jù)的使能信號(rinc/winc)有效,在下一個讀/寫時鐘的上升沿到來時,會
8、從(對)memory讀出/寫入一個數(shù)據(jù),并且相應的讀/寫指針會加1。由于習慣上用二進制碼來尋址memory,而且用二進制碼能很方便地進行累積操作,所以這里以二進制碼為主,并將二進制碼轉換為格雷碼,以比較讀/寫指針來產生空/滿標志位。二進制碼可以通過以下方式轉換成格雷碼:gray = (bin >> 1) bin其中,gray表示格雷碼,bin表示二進制碼。如,設一個5位的二進制碼為B4:0,它對應的格雷碼為G4:0,則G4 = B4G3 = B3 B3G2 = B2 B2G1 = B1 B1G0 = B0 B0具體如下圖所示: 圖1.4 比較指針和尋址指針的產生電路1.4 FIFO
9、的設計模塊整個FIFO包括1個頂層模塊和5個子模塊。1.4.1 子模塊fifomem這個子模塊,主要實現(xiàn)對FIFO的memory進行操作。如果寫使能信號(winc)有效,且FIFO滿標志(wfull)無效,則在下一個寫時鐘(wclk)的上升沿到來時,將數(shù)據(jù)(wdata)寫入到memory中寫地址(waddr)指針所指向的位置。同時,只要給出讀地址(raddr),就可以從memory中讀出數(shù)據(jù)(rdata),與讀時鐘(rclk)無關。相應的代碼如下所示:module fifomem #(parameter DATASIZE = 8, / Memory data word width parame
10、ter ADDRSIZE = 4) / Number of mem address bits (output DATASIZE-1:0 rdata, input DATASIZE-1:0 wdata, input ADDRSIZE-1:0 waddr, raddr, input wclken, wfull, wclk); / RTL Verilog memory model localparam DEPTH = 1<<ADDRSIZE; reg DATASIZE-1:0 mem 0:DEPTH-1; assign rdata = memraddr; always (posedge
11、wclk) if (wclken && !wfull) memwaddr <= wdata;endmodule1.4.2 子模塊sync_r2w這個子模塊,通過2個D觸發(fā)器的級聯(lián),將格雷碼表示的讀指針,同步到寫時鐘域中。相應的代碼如下:module sync_r2w #(parameter ADDRSIZE = 4) (output reg ADDRSIZE:0 wq2_rptr, input ADDRSIZE:0 rptr, input wclk, wrst_n); reg ADDRSIZE:0 wq1_rptr; always (posedge wclk or neg
12、edge wrst_n) if (!wrst_n) wq2_rptr,wq1_rptr <= 0; else wq2_rptr,wq1_rptr <= wq1_rptr,rptr;endmodule1.4.3 子模塊sync_w2r這個子模塊,也采用2個D觸發(fā)器的級聯(lián),將格雷碼表示的讀指針,同步到寫時鐘域中。相應的代碼如下:module sync_w2r #(parameter ADDRSIZE = 4) (output reg ADDRSIZE:0 rq2_wptr, input ADDRSIZE:0 wptr, input rclk, rrst_n); reg ADDRSIZE
13、:0 rq1_wptr; always (posedge rclk or negedge rrst_n) if (!rrst_n) rq2_wptr,rq1_wptr <= 0; else rq2_wptr,rq1_wptr <= rq1_wptr,wptr;Endmodule1.4.4 子模塊rptr_empty這個子模塊的輸入包括:讀使能信號(rinc)、讀時鐘(rclk)、讀復位信號(rrst_n,低電平有效)。輸出包括:讀尋址指針(raddr)、讀比較指針(rptr)。其中讀尋址指針為二進制碼,讀比較指針為格雷碼,且讀尋址指針比讀比較指針少一位??梢詤⒄請D1.4,相關的代碼
14、如下:module rptr_empty #(parameter ADDRSIZE = 4) (output reg rempty, output ADDRSIZE-1:0 raddr, output reg ADDRSIZE :0 rptr, input ADDRSIZE :0 rq2_wptr, input rinc, rclk, rrst_n); reg ADDRSIZE:0 rbin; wire ADDRSIZE:0 rgraynext, rbinnext; always (posedge rclk or negedge rrst_n) if (!rrst_n) rbin, rptr
15、<= 0; else rbin, rptr <= rbinnext, rgraynext; / Memory read-address pointer (okay to use binary to address memory) assign raddr = rbinADDRSIZE-1:0; assign rbinnext = rbin + (rinc & rempty); assign rgraynext = (rbinnext>>1) rbinnext; /- / FIFO empty when the next rptr = synchronized w
16、ptr or on reset /- assign rempty_val = (rgraynext = rq2_wptr); always (posedge rclk or negedge rrst_n) if (!rrst_n) rempty <= 1'b1; else rempty <= rempty_val;endmodule1.4.5 子模塊rptr_empty這個子模塊的輸入包括:寫使能信號(winc)、寫時鐘(wclk)、寫復位信號(wrst_n,低電平有效)。輸出包括:寫尋址指針(waddr)、寫比較指針(wptr)。其中讀尋址指針為二進制碼,讀比較指針為格雷
17、碼,且讀尋址指針比讀比較指針少一位??梢詤⒄請D1.4,相關的代碼如下:module wptr_full #(parameter ADDRSIZE = 4) (output reg wfull, output ADDRSIZE-1:0 waddr, output reg ADDRSIZE :0 wptr, input ADDRSIZE :0 wq2_rptr, input winc, wclk, wrst_n); reg ADDRSIZE:0 wbin; wire ADDRSIZE:0 wgraynext, wbinnext; / GRAYSTYLE2 pointer always (posed
18、ge wclk or negedge wrst_n) if (!wrst_n) wbin, wptr <= 0; else wbin, wptr <= wbinnext, wgraynext; / Memory write-address pointer (okay to use binary to address memory) assign waddr = wbinADDRSIZE-1:0; assign wbinnext = wbin + (winc & wfull); assign wgraynext = (wbinnext>>1) wbinnext;
19、/- / Simplified version of the three necessary full-tests: / assign wfull_val=(wgnextADDRSIZE !=wq2_rptrADDRSIZE ) && / (wgnextADDRSIZE-1 !=wq2_rptrADDRSIZE-1) && / (wgnextADDRSIZE-2:0=wq2_rptrADDRSIZE-2:0); /- assign wfull_val = (wgraynext=wq2_rptrADDRSIZE:ADDRSIZE-1, wq2_rptrADDRSI
20、ZE-2:0); always (posedge wclk or negedge wrst_n) if (!wrst_n) wfull <= 1'b0; else wfull <= wfull_val;endmodule1.4.6 頂層模塊afifo這個頂層模塊,主要完成5個子模塊例化和互聯(lián)??梢詤⒄請D1.1,相關的代碼如下:module afifo #(parameter DSIZE = 8, parameter ASIZE = 4) (output DSIZE-1:0 rdata, output wfull, output rempty, input DSIZE-1:0
21、 wdata, input winc, wclk, wrst_n, input rinc, rclk, rrst_n); wire ASIZE-1:0 waddr, raddr; wire ASIZE :0 wptr, rptr, wq2_rptr, rq2_wptr; sync_r2w sync_r2w (.wq2_rptr(wq2_rptr), .rptr(rptr), .wclk(wclk), .wrst_n(wrst_n); sync_w2r sync_w2r (.rq2_wptr(rq2_wptr), .wptr(wptr), .rclk(rclk), .rrst_n(rrst_n)
22、; fifomem #(DSIZE, ASIZE) fifomem (.rdata(rdata), .wdata(wdata), .waddr(waddr), .raddr(raddr), .wclken(winc), .wfull(wfull), .wclk(wclk); rptr_empty #(ASIZE) rptr_empty (.rempty(rempty), .raddr(raddr), .rptr(rptr), .rq2_wptr(rq2_wptr), .rinc(rinc), .rclk(rclk), .rrst_n(rrst_n); wptr_full #(ASIZE) wp
23、tr_full (.wfull(wfull), .waddr(waddr), .wptr(wptr), .wq2_rptr(wq2_rptr), .winc(winc), .wclk(wclk), .wrst_n(wrst_n); endmodule1.5 用modelsim仿真FIFO 編寫測試代碼根據(jù)前面的頂層模塊afifo,編寫測試代碼如下:timescale 1ns/1nsmodule test; reg 7:0 wdata; reg winc; reg wclk; reg wrst_n; reg rinc; reg rclk; reg rrst_n; wire 7:0 rdata;
24、wire wfull; wire rempty; integer i; always begin #50 wclk = 1; #50 wclk = 0; end always begin #100 rclk = 1; #100 rclk = 0; end initial begin wrst_n = 0; rrst_n = 0; rinc = 0; winc = 0; wclk = 0; rclk = 0; wdata = 0; i = 0; #400; wrst_n = 1; rrst_n = 1; for (i = 0; i < 16; i = i + 1) begin repeat
25、 (1) (posedge wclk) #20 winc = 1; wdata = i; end repeat (1) (posedge wclk) #20 winc = 0; for (i = 0; i < 16; i = i + 1) begin repeat (1) (posedge rclk) #20 rinc = 1; end repeat (1) (posedge rclk) #20 rinc = 0; end afifo afifo (.rdata(rdata), .wdata(wdata), .wclk(wclk), .rclk(rclk), .wrst_n(wrst_n
26、), .rrst_n(rrst_n), .wfull(wfull), .rempty(rempty), .winc(winc), .rinc(rinc) );endmodule1.5.2仿真波形當寫時鐘(wclk)和讀時鐘(rclk)的周期相同,且都為50ns時,波形如下:圖1.5 仿真波形-讀寫時鐘的周期都為50ns當寫時鐘(wclk)周期為100ns,讀時鐘(rclk)周期為50ns時,波形如下:圖1.6 仿真波形-讀/寫時鐘的周期都為50ns/100ns當寫時鐘(wclk)周期為50ns,讀時鐘(rclk)周期為100ns時,波形如下:圖1.6 仿真波形-讀/寫時鐘的周期都為100ns/
27、50ns仿真結果根據(jù)前面的3種仿真波形,可以看出所設計的FIFO,能滿足功能要求。1.6 用DC對FIFO進行綜合編寫DC的啟動文件#.synopsys_dc.setup for afifo#modified by He Zhongzhu#June 22nd, 2011set search_path ". $search_path lib rtl scripts mapped unmapped"set target_library "tt_1v20_25c.db" set link_library " * $target_library dw_
28、foundation.sldb"set symbol_library " smic13g.sdb "#set synthesis_library "dw_foundation.sldb standard.sldb"set cache_write /set cache_read $cache_write# specify directory for intermediate files from analyzedefine_design_lib DEFAULT -path ./analyzed# suppress Driving cell war
29、ningsuppress_message UID-401 DDB-24set verilogout_no_tri truedefine_name_rules BORG -allowed A-Za-z0-9_ -first_restricted "_" -last_restricted "_" -max_length 30set verilogout_no_tri true# specify variblesset dw_prefer_mc_inside trueset sh_enable_line_editing true編寫DC的約束文件#top.con for afifo#created by zzhe#June 22th, 2011reset_design#create_clock -period 5 -name vclk;#virtual clockcreate_clock -period 0.9 get_ports wclkcreate_clock -period 0.9 get_ports rclk#set_uncertain_delay -setup get_clocks vclk#set_clock_latency -source -max get_clocks vclk#set_clock_transi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國超微細合金線材行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國低浴比氣液染色機行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球汽車油漆測厚儀行業(yè)調研及趨勢分析報告
- 2025年全球及中國眼內液體填充物行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025年全球及中國初創(chuàng)企業(yè)媒體服務平臺行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球知識產權審計服務行業(yè)調研及趨勢分析報告
- 2025-2030全球設備用墊圈和密封材料行業(yè)調研及趨勢分析報告
- 2025-2030全球微膠囊脂質粉行業(yè)調研及趨勢分析報告
- 2025年全球及中國車規(guī)級數(shù)字功放電感行業(yè)頭部企業(yè)市場占有率及排名調研報告
- 2025-2030全球螺旋繞線機行業(yè)調研及趨勢分析報告
- 第二章《有理數(shù)的運算》單元備課教學實錄2024-2025學年人教版數(shù)學七年級上冊
- DB31-T 596-2021 城市軌道交通合理通風技術管理要求
- 華為智慧園區(qū)解決方案介紹
- 2022年江西省公務員錄用考試《申論》真題(縣鄉(xiāng)卷)及答案解析
- 人教版八年級英語上冊期末專項復習-完形填空和閱讀理解(含答案)
- 一例蛇串瘡患者個案護理課件
- 低壓電工理論考試題庫低壓電工考試題
- 國家電網(wǎng)培訓課件
- 五年級上冊口算練習400題及答案
- 駱駝祥子選擇題100道及答案
- 2024年公務員考試題庫附答案【完整版】
評論
0/150
提交評論