FIFO 控制器 的作用是什么?
发布网友
发布时间:2022-04-30 11:46
我来回答
共1个回答
热心网友
时间:2022-06-21 23:10
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