集團(tuán)定制網(wǎng)站建設(shè)公司百度快照是什么意思?
1.簡(jiǎn)介
????????FIFO( First Input First Output)簡(jiǎn)單說(shuō)就是指先進(jìn)先出。FIFO存儲(chǔ)器是一個(gè)先入先出的雙口緩沖器,即第一個(gè)進(jìn)入其內(nèi)的數(shù)據(jù)第一個(gè)被移出,其中一個(gè)口是存儲(chǔ)器的輸入口,另一個(gè)口是存儲(chǔ)器的輸出口。
????????對(duì)于單片F(xiàn)IFO來(lái)說(shuō),主要有兩種結(jié)構(gòu):觸發(fā)導(dǎo)向結(jié)構(gòu)和零導(dǎo)向傳輸結(jié)構(gòu)。觸發(fā)導(dǎo)向傳輸結(jié)構(gòu)的FIFO是由寄存器陣列構(gòu)成的,零導(dǎo)向傳輸結(jié)構(gòu)的FIFO是由具有讀和寫(xiě)地址指針的雙口RAM構(gòu)成。
? ? ? ? FIFO與普通RAM存儲(chǔ)器的區(qū)別是沒(méi)有外部讀寫(xiě)地址線(指針),使用方便,但缺點(diǎn)是只能順序?qū)懭霐?shù)據(jù)和讀出數(shù)據(jù),其數(shù)據(jù)地址由內(nèi)部讀寫(xiě)指針自動(dòng)加1完成,不能像普通存儲(chǔ)器那樣可以由地址線決定讀取或?qū)懭肽硞€(gè)指定的地址。
1.1.功能
????????FIFO存儲(chǔ)器是系統(tǒng)的緩沖環(huán)節(jié),主要有幾方面的功能:
????????????????1)對(duì)連續(xù)的數(shù)據(jù)流進(jìn)行緩存,防止在進(jìn)機(jī)和存儲(chǔ)操作時(shí)丟失數(shù)據(jù);
????????????????2)數(shù)據(jù)集中起來(lái)進(jìn)行進(jìn)棧和存儲(chǔ),可避免頻繁的總線操作,減輕CPU的負(fù)擔(dān);
????????????????3)允許系統(tǒng)進(jìn)行DMA操作,提高數(shù)據(jù)的傳輸速度。這是至關(guān)重要的一點(diǎn),如果不采用DMA操作,數(shù)據(jù)傳輸將達(dá)不到傳輸要求,而且大大增加CPU的負(fù)擔(dān),無(wú)法同時(shí)完成數(shù)據(jù)的存儲(chǔ)工作。
1.2.用途
1.2.1.跨時(shí)鐘域多bit數(shù)據(jù)傳輸
????????解決一個(gè)系統(tǒng)多個(gè)時(shí)鐘所帶來(lái)的問(wèn)題:異步時(shí)鐘之間的接口電路。異步FIFO是解決這個(gè)問(wèn)題的一種便捷簡(jiǎn)單的方案,使用異步FIFO可以在兩個(gè)不同時(shí)鐘系統(tǒng)之間快速方便地傳輸實(shí)時(shí)數(shù)據(jù)。
1.2.2.達(dá)到數(shù)據(jù)匹配問(wèn)題(讀寫(xiě)位寬不一致)
????????對(duì)于不同寬度的數(shù)據(jù)接口也可以使用FIFO,例如單片機(jī)的8位輸出而DSP可能是16位輸入,在單片機(jī)與DSP連接時(shí)就可以使用FIFO來(lái)達(dá)到數(shù)據(jù)匹配的目的。
1.3.主要參數(shù)
- 寬度(WIDTH):FIFO每個(gè)地址的數(shù)據(jù)位寬(W);
- 深度(DEEPTH):FIFO可以存儲(chǔ)多少個(gè)W位的數(shù)據(jù);
- 滿(full)標(biāo)志:FIFO已滿或?qū)M時(shí),會(huì)輸出一個(gè)對(duì)寫(xiě)操作的反壓信號(hào),以阻止被繼續(xù)寫(xiě)入數(shù)據(jù)而溢出;
- 空(empty)標(biāo)志:FIFO已空或?qū)⒖諘r(shí),會(huì)輸出一個(gè)對(duì)讀操作的反壓信號(hào),以避免被繼續(xù)讀出無(wú)效數(shù)據(jù);
- 讀/寫(xiě)時(shí)鐘:讀/寫(xiě)操作所遵循的時(shí)鐘,每個(gè)時(shí)鐘沿觸發(fā)。
? ? ? ? 根據(jù)FIFO工作的時(shí)鐘域分為同步/異步FIFO。同步FIFO是指讀時(shí)鐘和寫(xiě)時(shí)鐘為同一個(gè)時(shí)鐘在時(shí)鐘沿來(lái)臨時(shí)同時(shí)發(fā)生讀寫(xiě)。異步FIFO讀寫(xiě)時(shí)鐘不一致,讀寫(xiě)相互獨(dú)立。
????????讀寫(xiě)指針即讀寫(xiě)地址,當(dāng)前讀/寫(xiě)操作完成后,指針自動(dòng)加一指向下一個(gè)地址(連續(xù)遞增)。
- 寫(xiě)指針:總是指向下一個(gè)將要被寫(xiě)入的地址,復(fù)位時(shí)指向編號(hào)0的地址;
- 讀指針:總是指向下一個(gè)將要被讀出的數(shù)據(jù)地址,復(fù)位時(shí)也指向編號(hào)0的地址且此時(shí)數(shù)據(jù)無(wú)效;
2.工作原理
2.1.空滿標(biāo)志
2.1.1.讀空信號(hào)(rd_empty)
? ? ? ? 一般情況下當(dāng)讀寫(xiě)指針相等時(shí),表明FIFO已空,這種情況發(fā)生在復(fù)位操作時(shí)或當(dāng)讀指針讀出FIFO中最后一個(gè)有效數(shù)據(jù)時(shí)(即讀指針追趕上寫(xiě)指針),此時(shí)讀空信號(hào)有效,如下左圖:
2.1.2.寫(xiě)滿信號(hào)(wr_full)
? ? ? ? 當(dāng)讀寫(xiě)指針再次相等時(shí),即寫(xiě)指針轉(zhuǎn)了一圈又折回來(lái)(wrapped around)從起始低位追上了讀指針(寫(xiě)比讀快),此時(shí)表明FIFO已滿,如上右圖:
2.2.空滿判斷機(jī)制
2.2.1.同步fifo空滿判斷
- 方案一:extra bit
? ? ? ? ????????深度為的FIFO其地址位寬為n,若數(shù)據(jù)位寬為W則該FIFO的容量為N*W bits。
? ? ? ? ????????現(xiàn)在在指針添加1個(gè)extra bit即地址的MSB,使其變?yōu)閚+1 bits,該extra bit用來(lái)指示讀/寫(xiě)指針是否連續(xù)遞增并越過(guò)了FIFO的最后一個(gè)地址,若越過(guò)則該MSB加1,其他位清零。例如深度為8的fifo,需要采用1+3bits的地址位寬,MSB作為指針折回標(biāo)志,低3bits作為地址。
? ? ? ? ????????那么判斷機(jī)制(讀指針讀出FIFO最后一個(gè)有效數(shù)據(jù)后即會(huì)停止遞增)為:
????????????????①如果兩個(gè)指針的MSB不同,就說(shuō)明寫(xiě)指針比讀指針多折回一次,此時(shí)若除開(kāi)MSB以外的地址位相等,則表示FIFO已滿;
????????????????②如果兩個(gè)指針的MSB相同,就說(shuō)明讀寫(xiě)指針的折回次數(shù)相同,若其他地址位相等,則表示讀寫(xiě)指針完全相等,FIFO已空。
- 方案二:設(shè)置數(shù)據(jù)計(jì)數(shù)器
? ? ? ? ????????設(shè)置一個(gè)data_counter,當(dāng)寫(xiě)使能有效時(shí)數(shù)據(jù)計(jì)數(shù)器加1,每讀出一個(gè)數(shù)據(jù)時(shí)該計(jì)數(shù)器又減1。如此,當(dāng)data_counter=0時(shí)FIFO為空,data_counter=FIFO深度時(shí)表明已滿。
? ? ? ? ????????缺點(diǎn):計(jì)數(shù)器會(huì)占用額外資源,當(dāng)FIFO較大時(shí),可能會(huì)降低FIFO的讀寫(xiě)速度。
2.2.2.異步fifo空滿判斷
- 判斷步驟如下:
????????????????①地址指針采用二進(jìn)制(binary)+extra bit
????????????????②二進(jìn)制指針轉(zhuǎn)gray碼后跨時(shí)鐘域同步做比較
????????當(dāng)讀寫(xiě)指針采用二進(jìn)制表示且讀寫(xiě)操作屬于異步時(shí)鐘時(shí),讀寫(xiě)指針做比較前需要先將其中一個(gè)指針同步到另一個(gè)指針的時(shí)鐘域后再操作,直接同步這樣容易產(chǎn)生亞穩(wěn)態(tài)問(wèn)題。
????????可以使用一個(gè)二進(jìn)制轉(zhuǎn)gray碼的轉(zhuǎn)換電路,將地址轉(zhuǎn)換為對(duì)應(yīng)的gray碼后再同步到另一個(gè)時(shí)鐘域,進(jìn)行對(duì)比產(chǎn)生空滿指示,如左下圖:
? ? ? ? ????????例如1+3bits的二進(jìn)制地址完全轉(zhuǎn)換為gray后如右上圖所示,此時(shí)空滿標(biāo)志不能按照原來(lái)二進(jìn)制的方法來(lái)判斷,gary碼指針的空滿判斷標(biāo)準(zhǔn)如下:
? ? ? ? ????????空標(biāo)志:gray碼地址完全相等(包括MSB)。
? ? ? ? ????????滿標(biāo)志:高兩位(MSB+次高位)不同,其余各位相同。
? ? ? ? ? ? ? ? PS:二進(jìn)制與格雷碼互相轉(zhuǎn)換?。
- 補(bǔ)充:
? ? ? ? ? ? ? ? ①同步方向產(chǎn)生保守的空滿機(jī)制:
? ? ? ? ? ? ? ? ????????讀指針同步到寫(xiě)時(shí)鐘域:經(jīng)過(guò)一定的同步時(shí)間后,此時(shí)同步后(寫(xiě)時(shí)鐘域的)讀指針小于或等于真實(shí)的(讀時(shí)鐘域)的讀指針,而寫(xiě)指針是即時(shí)且真實(shí)的,空滿判斷機(jī)制可產(chǎn)生保守的“假寫(xiě)滿”(正確且安全設(shè)計(jì))和錯(cuò)誤的“讀空”。
????????????????????????反之同理,總結(jié):寫(xiě)時(shí)鐘域產(chǎn)生正確的“假寫(xiě)滿”,讀時(shí)鐘域產(chǎn)生正確的“假讀空”。
? ? ? ? ? ? ? ? ②由于讀寫(xiě)異步快時(shí)鐘域同步慢時(shí)鐘域指針可能會(huì)漏采,不會(huì)影響空滿判斷邏輯:
? ? ? ? ? ? ? ? ? ? ? ? 舉例讀慢寫(xiě)快:寫(xiě)指針同步到讀時(shí)鐘域發(fā)生漏采,即讀時(shí)鐘域采樣到的寫(xiě)指針小于真實(shí)的(寫(xiě)時(shí)鐘域的)寫(xiě)指針,此時(shí)不會(huì)導(dǎo)致“讀空判斷邏輯”錯(cuò)誤,也是保守且正確的。反之亦然。
3.FIFO代碼設(shè)計(jì)示例
3.1.同步FIFO代碼
????????同步FIFO由于沒(méi)有跨時(shí)鐘的操作,所以只需要使用二進(jìn)制即可,不用格雷碼操作。根據(jù)上面的分析,有兩種方法進(jìn)行表示full/empty狀態(tài),代碼如下:
//1、generate full/empty signal by addr
assign full = (waddr_ptr == {~raddr_ptr[ADDR_WIDTH-1],radde_ptr[ADDR_WIDTH-2:0]});
assign empty = (waddr_ptr == raddr_ptr);
//2、generate full/empty signal by conuter
always @(posedge clk or negedge rst_n)beginif(!rst_n)begindata_cnt <= {ADDR_WIDTH{1'b0}};endelse if(wen && ren && !full && !empty)begindata_cnt <= data_cnt;endelse if(wen && !full)begindata_cnt <= data_cnt + 1'b1;endelse if(ren && !empty)begindata_cnt <= data_cnt - 1'b1;end
endassign full = (data_cnt == FIFO_DEPTH);
assign empty = (data_cnt == 0);
3.2.異步FIFO代碼
????????由于存在讀寫(xiě)時(shí)鐘不同步的問(wèn)題,采用的解決方法是:加兩級(jí)寄存器同步 + 格雷碼(目的都是消除亞穩(wěn)態(tài)),代碼示例如下:?
`timescale 1ns/1ps
module async_fifo #(parameter DATA_WIDTH = 32,parameter DATA_DEPTH = 8,parameter PTR_WIDTH = $clog2(DATA_DEPTH)
)(//write interface input wire clk_wr_i,input wire rst_n_wr_i, input wire wr_en_i,input wire [DATA_WIDTH-1:0] wr_data_i ,output wire wr_full_o,//read interfaceinput wire clk_rd_i,input wire rst_n_rd_i,input wire rd_en_i,output reg [DATA_WIDTH-1:0] rd_data_o,output wire rd_empty_o
);reg [DATA_WIDTH-1:0] fifo[DATA_DEPTH-1:0];reg wr_ptr_ext;reg [ PTR_WIDTH-1:0] wr_ptr;wire [ PTR_WIDTH :0] wr_ptr_gray;reg [ PTR_WIDTH :0] wr_ptr_gray_d1;reg [ PTR_WIDTH :0] wr_ptr_gray_d2;reg rd_ptr_ext;reg [ PTR_WIDTH-1:0] rd_ptr;wire [ PTR_WIDTH :0] rd_ptr_gray;reg [ PTR_WIDTH :0] rd_ptr_gray_d1;reg [ PTR_WIDTH :0] rd_ptr_gray_d2;//------------- ptr++ and data inout--------------
always @(posedge clk_wr_i or negedge rst_n_wr_i) beginif(!rst_n_wr_i)begin{wr_ptr_ext, wr_ptr} <= {(PTR_WIDTH+1){1'b0}};fifo[wr_ptr] <= { (DATA_WIDTH){1'b0}};endelse if(wr_en_i && !wr_full_o)begin{wr_ptr_ext, wr_ptr} <= {wr_ptr_ext, wr_ptr} + 1'b1;fifo[wr_ptr] <= wr_data_i;end
endalways @(posedge clk_rd_i or negedge rst_n_rd_i) beginif(!rst_n_rd_i)begin{rd_ptr_ext, rd_ptr} <= {(PTR_WIDTH+1){1'b0}};rd_data_o <= { (DATA_WIDTH){1'b0}};endelse if(rd_en_i && !rd_empty_o)begin{rd_ptr_ext, rd_ptr} <= {rd_ptr_ext, rd_ptr} + 1'b1;rd_data_o <= fifo[rd_ptr];end
end//--------- binary to gray ---------
assign rd_ptr_gray = {rd_ptr_ext, rd_ptr} ^ ({rd_ptr_ext, rd_ptr}>>1);
assign wr_ptr_gray = {wr_ptr_ext, wr_ptr} ^ ({wr_ptr_ext, wr_ptr}>>1);//--------- pointer sync -----------
always @(posedge clk_wr_i or negedge rst_n_wr_i) beginif(!rst_n_rd_i) beginrd_ptr_gray_d1 <= {(PTR_WIDTH+1){1'b0}};rd_ptr_gray_d2 <= {(PTR_WIDTH+1){1'b0}};endelse beginrd_ptr_gray_d1 <= rd_ptr_gray;rd_ptr_gray_d2 <= rd_ptr_gray_d1;end
endalways @(posedge clk_rd_i or negedge rst_n_rd_i) beginif(!rst_n_rd_i) beginwr_ptr_gray_d1 <= {(PTR_WIDTH+1){1'b0}};wr_ptr_gray_d2 <= {(PTR_WIDTH+1){1'b0}};endelse beginwr_ptr_gray_d1 <= wr_ptr_gray;wr_ptr_gray_d2 <= wr_ptr_gray_d1;end
end//------------ full_o and empty_o ------------------
assign wr_full_o = (wr_ptr_gray=={~rd_ptr_gray_d2[PTR_WIDTH:PTR_WIDTH-1],rd_ptr_gray_d2[PTR_WIDTH-2:0]}) ? 1'b1 : 1'b0;
assign rd_empty_o = (rd_ptr_gray==wr_ptr_gray_d2) ? 1'b1 : 1'b0;endmodule
4.FIFO的深度計(jì)算
4.1.概念
? ? ? ? 突發(fā)(burst)傳輸:In?telecommunication, a?burst transmission?or?data burst?is the broadcast of a relatively high-bandwidth transmission over a short period。某個(gè)短時(shí)間內(nèi)相對(duì)高帶寬的數(shù)據(jù)傳輸。
????????假如模塊A不間斷地往FIFO中寫(xiě)數(shù)據(jù),模塊B同樣不間斷地從FIFO中讀數(shù)據(jù),不同的是模塊A寫(xiě)數(shù)據(jù)的時(shí)鐘頻率要大于模塊B讀數(shù)據(jù)的時(shí)鐘頻率,那么在一段時(shí)間內(nèi)總是有一些數(shù)據(jù)沒(méi)來(lái)得及被讀走,如果系統(tǒng)一直在工作,那么那些沒(méi)有被讀走的數(shù)據(jù)會(huì)越累積越多,那么FIFO的深度需要是無(wú)窮大的,因此只有在突發(fā)數(shù)據(jù)傳輸過(guò)程中討論FIFO深度才是有意義的。一次傳遞一包數(shù)據(jù)完成后再去傳遞下一包數(shù)據(jù),一段時(shí)間內(nèi)傳遞的數(shù)據(jù)個(gè)數(shù)稱為burst length。
????????FIFO的最小深度與burst rate, burst size, read and write frequency等因素有關(guān)。要確定FIFO的深度,關(guān)鍵在于計(jì)算出在突發(fā)讀寫(xiě)這段時(shí)間內(nèi)有多少個(gè)數(shù)據(jù)沒(méi)有被讀走,即FIFO的最小深度就等于沒(méi)有被讀走的數(shù)據(jù)個(gè)數(shù)。
4.2.深度計(jì)算示例
????????假定模塊A向FIFO寫(xiě)數(shù)據(jù)的時(shí)鐘頻率為fa,模塊B從FIFO讀數(shù)據(jù)的時(shí)鐘頻率為fb。
場(chǎng)景1:idle cycles in both write and(or) read
假設(shè):
- 寫(xiě)數(shù)據(jù)時(shí)鐘頻率fa=80MHz,讀數(shù)據(jù)時(shí)鐘頻率fb=50MHz;
- 突發(fā)長(zhǎng)度= number of data to be transferred = 120;
- 每隔1個(gè)cycle寫(xiě)一次,每隔3個(gè)cycle讀一次。
那么:
- 每隔1個(gè)cycle寫(xiě)一次,意味著2個(gè)cycle才寫(xiě)一個(gè)數(shù)據(jù);每隔3個(gè)cycle讀一次,意味著4個(gè)cycle才讀一個(gè)數(shù)據(jù)。
- 寫(xiě)一個(gè)數(shù)據(jù)所需要的時(shí)間 = 2*1/80MHz = 25ns。突發(fā)傳輸中,寫(xiě)完所有數(shù)據(jù)所需要的時(shí)間 = 120*25ns = 3000ns。
- 讀一個(gè)數(shù)據(jù)所需要的時(shí)間 = 4*1/50MHz = 80ns。在3000ns內(nèi)能夠讀走的數(shù)據(jù)個(gè)數(shù) = 3000ns/80ns = 37.5。
- 所以在3000ns內(nèi)還沒(méi)有被讀走的數(shù)據(jù)個(gè)數(shù) = 120-37.5 = 82.5,因此FIFO的最小深度為83。
場(chǎng)景2:fa ≤?fb?with no idle cycles in both write and read
假設(shè):
- 寫(xiě)數(shù)據(jù)時(shí)鐘頻率fa=40MHz,讀數(shù)據(jù)時(shí)鐘頻率fb≥40MHz
- 突發(fā)長(zhǎng)度= number of data to be transferred = 120
- 在突發(fā)傳輸過(guò)程中,數(shù)據(jù)都是連續(xù)讀寫(xiě)的
由于讀數(shù)據(jù)比寫(xiě)數(shù)據(jù)要快,因此FIFO只起到跨時(shí)鐘域的作用,FIFO的最小深度為1即可。
場(chǎng)景3:Data rates are given,read and write random
????????在工程設(shè)計(jì)中還存在一種情形,只給出數(shù)據(jù)在一段時(shí)間內(nèi)的讀寫(xiě)速率,怎么讀寫(xiě)完全隨機(jī),這種情況需要考慮最壞的一種情況避免數(shù)據(jù)丟失。在最壞的情形中,讀寫(xiě)的速率應(yīng)該相差最大,也就是說(shuō)需要找出最大的寫(xiě)速率和最小的讀速率。
假設(shè):
- 寫(xiě)數(shù)據(jù)時(shí)鐘頻率fa=80MHz,讀數(shù)據(jù)時(shí)鐘頻率fb=50MHz
- 在寫(xiě)時(shí)鐘周期內(nèi),每100個(gè)周期就有40個(gè)數(shù)據(jù)寫(xiě)入FIFO
- 在讀時(shí)鐘周期內(nèi),每10個(gè)周期可以有8個(gè)數(shù)據(jù)讀出FIFO
那么:
- 首先沒(méi)有給出數(shù)據(jù)的突發(fā)長(zhǎng)度,從假設(shè)中可以得出每100個(gè)周期就有40個(gè)數(shù)據(jù)寫(xiě)入FIFO,因?yàn)閿?shù)據(jù)是隨機(jī)寫(xiě)入FIFO的,需要考慮做壞的情形,即寫(xiě)速率最大的情形,只有如下圖背靠背的情形才是寫(xiě)速率最高的情形,burst length為80。
- 注意:這里需要驗(yàn)證一下是否有解,即寫(xiě)入burst數(shù)據(jù)時(shí)間必須大于等于讀出burst數(shù)據(jù)時(shí)間,不然數(shù)據(jù)就會(huì)越累積越多,使得FIFO的深度必須為無(wú)窮大。首先寫(xiě)入80個(gè)數(shù)據(jù)需要的時(shí)間 = 1/80MHz*(80*100/40)=2500ns,讀出80個(gè)數(shù)據(jù)需要的時(shí)間 = 1/50MHz*(80*10/8)=2000ns,由于寫(xiě)入burst數(shù)據(jù)時(shí)間大于對(duì)出burst數(shù)據(jù)時(shí)間,因此有解。
- 下面來(lái)計(jì)算FIFO最小深度,連續(xù)寫(xiě)入80個(gè)數(shù)據(jù)最快所需要時(shí)間 = 1/80MHz * 80 = 1000ns。
- 從FIFO中讀出一個(gè)數(shù)據(jù)至少所需時(shí)間 = (1/50MHz) * (10/8) = 25ns。那么在1000ns內(nèi)能夠讀出的數(shù)據(jù) = 1000ns/25ns = 40。
- 在1000ns內(nèi)沒(méi)有讀出的數(shù)據(jù) = 80 - 40 = 40,因此FIFO的最小深度為40。
? ? ? ? ?參考FIFO深度計(jì)算。
4.3.異步FIFO的深度不為2的正整數(shù)次冪
4.3.1.FIFO的深度為1
? ? ? ? 方案一:將深度加1變?yōu)?,這樣地址指針用1bit表示即可,且不用添加extra bit。
? ? ? ? ?方案二:采用脈沖同步讀寫(xiě)信號(hào),參考深度為1的異步FIFO設(shè)計(jì)。
? ? ? ? 方案三:采用握手機(jī)制去跨時(shí)鐘,不屬于FIFO類(lèi)型。
4.3.2.FIFO的深度為其他任意數(shù)
? ? ? ? 無(wú)論FIFO的深度為奇數(shù)或偶數(shù),都需要對(duì)地址指針擴(kuò)展1bit來(lái)作為標(biāo)志位,這樣產(chǎn)生的地址指針循環(huán)一定為偶數(shù),再利用格雷碼的環(huán)回對(duì)稱性,采用“掐頭去尾+地址偏移”的方法。
? ? ? ? 地址同步后不能采用原來(lái)2的整數(shù)次冪的gray判斷空滿機(jī)制來(lái)做判斷,此時(shí)可以將格雷碼再轉(zhuǎn)回二進(jìn)制后再做空滿判斷。
? ? ? ? 參考任意深度異步FIFO設(shè)計(jì)。
5.讀寫(xiě)位寬不一致問(wèn)題
? ? ? ? 對(duì)于異步fifo,由于地址不能跳變,fifo的位寬可以選擇輸入輸出位寬的最小公倍數(shù),會(huì)有一定的保守性。
? ? ? ? 參考FPGA之FIFO詳解,讀寫(xiě)位寬不同。