㈠ FIFO 控制器 的作用是什麼
IFO 是先入先出存儲器的縮寫,FIFO 控制器在數字系統中被大量使用,可以作為數據緩存
使用。時鍾同步的FIFO 控制器介面如下圖所示,主要介面信號定義如下:
RST_N:非同步復位信號,當RST_N 為低電平時,FULL 輸出『0』,EMPTY 信號輸出『1』
電平,FIFO 指針指向0,FIFO 被清空;
CLK:時鍾信號,輸出信號與CLK 信號同步;
DATAIN:數據輸入信號,8 位匯流排;
RD:讀有效信號,高電平有效,當RD 位高時,在時鍾信號CLK 的上升沿,DATAOUT 輸
出一個8 位的有效數據;
WR:寫有效信號,當WR 為高電平時,在CLK 的上升沿,從DATAIN 信號向存儲器寫入
一個8 位的有效數據;
DATAOUT:數據輸出信號,8 位匯流排,在CLK 的上升沿,當RD 為高電平時,從FIFO 中
輸出一個8 位的數據;
FULL:存儲器寫滿標志信號,高電平時表示存儲器中的數據已經寫滿;
EMPTY:存儲器讀空標志信號,高電平時表示存儲器中的數據已經被讀空了。
要求:用Verilog 寫一個8x16 的FIFO,完成先入先出的功能,並且在FIFO讀空時輸出EMPTY
有效信號,讀指針RP 不再移動;FIFO 寫滿時輸出FULL 有效信號,並且即使WR 有效也
不再向存儲單元中寫入數據(寫指針WP 不再移動)。
存儲單元使用一個二維數組來建模。注意存儲單元的地址在讀或者寫到最高地址時要能回到
最低值。
寫出合適的testbench 來測試所寫的Verilog 代碼,檢驗其正確性。
mole fifo_mem(data,clk,rstN,wrN,rdN,empty,full);
inout [7:0] data;
input clk,rstN,wrN,rdN;
output empty,full;
reg [4:0] _cntr,rd_cntr;
wire [3:0] add;
ram16X8 ram(.data(data),.addr(addr),.wrN(wrN),.oe(wrN));
always @(posedge clk or negedge rstN)
if(!rstN) wr_cntr<=0;
else if (!wrN) wr_cntr<=wr_cntr+1;
always @ (posedge clk or negedge rstN)
if(!rstN) rd_cntr<=0;
else if(!rdN) rd_cntr<=rd_cntr+1;
assign addr=wrN?rd_cntr [3:0]: wr_cntr [3:0];
assign empty=(wr_cntr [3:0] == rd_cntr [3:0])&&!(wr_cntr[4]^rd_cntr[4]);
assign full=(wr_cntr [3:0] ==rd_cntr [3:0])&&(wr_cntr[4]^rd_cntr[4]);
endmole