1、建立fifo测试工程
我们新建一个工程“fifo_test”,在【IP管理】->【IP Creator】->[FIFO]添加fifo到工程。
在配置栏对要调用的fifo进行配置。
在设置FIFO的地址位宽的时候,系统不会自动对我们的设置进行匹配,比如在修改了写端口的地址位宽后,还需要手动设置读端口的地址位宽。在修改了数据位宽后也需要去设置相应的地址位宽,否则将会在信息栏提示无法生成IP。
生成IP后,把IP文件添加到工程。
右键点击打开查看IP文件。
2、设计测试文件并仿真
测试代码如下。
[C#] 纯文本查看 复制代码 `timescale 1ns/1ps
`define wrclk_period 40
`define rdclk_period 8
module fifo_test();
xsGSR xsGSR_INST(.GSR(1'b1));
xsPWR xsPWR_INST(.PUR(1'b1));
reg WrClock;
reg WrEn;
reg [15:0]Data;
reg RdClock;
reg RdEn;
reg Reset;
reg RPReset;
wire [7:0]Q;
wire Empty;
wire Full;
wire AlmostEmpty;
wire AlmostFull;
FIFO FIFO(
.Data(Data),
.WrClock(WrClock),
.RdClock(RdClock),
.WrEn(WrEn),
.RdEn(RdEn),
.Reset(Reset),
.RPReset(RPReset),
.Q(Q),
.Empty(Empty),
.Full(Full),
.AlmostEmpty(AlmostEmpty),
.AlmostFull(AlmostFull)
);
initial WrClock = 1;
always #(`wrclk_period/2)WrClock = ~WrClock;
initial RdClock = 1;
always #(`rdclk_period/2)RdClock = ~RdClock;
integer i;
always@(posedge RdClock)
if(AlmostFull)
RdEn <= 1;
else if(Empty)
RdEn <= 0;
initial begin
Reset =1;
RPReset =0;
Data = 0;
WrEn = 0;
#201;
Reset =0;
#200;
for (i=0;i <= 511 ;i = i + 1)begin
WrEn = 1;
Data = i;
#`wrclk_period;
end
WrEn = 0;
#10000;
$stop;
end
endmodule
我们通过计数器控制fifo的写入,写入计数数据。在识别到fifo将满的时候读数据,在fifo为空的时候停止读数据。
3、仿真验证点击左下角的toggle leaf name/full name以关闭路径名方便查看
在仿真中可以观察到计数开始,WrEn有效开始写入数据。
在AlmostFull有效RdEn拉高开始读数据。
在Empty有效后RdEn拉低停止读数据,读数据先读低八位。
工程源码
fifo_test.zip
(189.49 KB, 下载次数: 542)
更多智多晶FPGA相关资料,请查看下述汇总贴
【智多晶FPGA-001】小梅哥智多晶FPGA产品使用自助服务手册
|