Verilog Xilinx FIFO IP块输出仿真
我在玩Xilinx FIFO IP块,在以下输出中我无法解释一些事情: 试验台代码:Verilog Xilinx FIFO IP块输出仿真,verilog,Verilog,我在玩Xilinx FIFO IP块,在以下输出中我无法解释一些事情: 试验台代码: `define wrclk_period 20 ; `define rdclk_period 10 ; module testbench; reg rst; reg wr_clk ; reg rd_clk ; reg [7:0] din ; reg wr_en ; reg rd_en ; wire [7:0] dout ; wire full ; wire empty ; fifo_generator
`define wrclk_period 20 ;
`define rdclk_period 10 ;
module testbench;
reg rst;
reg wr_clk ;
reg rd_clk ;
reg [7:0] din ;
reg wr_en ;
reg rd_en ;
wire [7:0] dout ;
wire full ;
wire empty ;
fifo_generator_0 FG0(rst,wr_clk,rd_clk,din,wr_en,rd_en,dout,full,empty) ;
initial wr_clk = 1 ;
always #10 wr_clk = ~wr_clk ;
initial rd_clk = 1 ;
always #5 rd_clk = ~rd_clk ;
integer i,j ;
initial begin
rst = 1 ;
#10
din = 0 ;
wr_en = 0 ;
rd_en = 0 ;
rst = 0 ;
#`wrclk_period ;
rst = 1 ;
#`wrclk_period ;
rst = 0 ;
#60;
for(i= 0 ; i<=5 ; i = i+1 ) begin
wr_en = 1 ;
din = i ;
#`wrclk_period ;
end
wr_en = 0 ;
#`wrclk_period ;
#`rdclk_period ;
for( j= 0 ; j<=5 ; j = j+1 ) begin
rd_en = 1 ;
#`rdclk_period ;
end
rd_en = 0 ;
#`rdclk_period ;
$stop ;
end
endmodule
`定义wrclk_周期20;
`定义rdclk_周期10;
模块测试台;
注册rst;
雷格沃鲁克;
雷格尔德钟;
注册号[7:0]din;
注册商标;
雷格尔登;
金属丝[7:0]dout;
满线;
电线是空的;
先进先出发生器0 FG0(rst、wr clk、rd clk、din、wr en、rd en、dout、满、空);
初始wr_clk=1;
始终#10 wr#clk=~wr#clk;
初始rd_clk=1;
始终#第五时钟=~第三时钟;
整数i,j;
初始开始
rst=1;
#10
din=0;
wr_en=0;
rd_en=0;
rst=0;
#`wrclk_期;
rst=1;
#`wrclk_期;
rst=0;
#60;
对于(i=0;i对不起,在评论中有此内容,但空间严重不足
我不熟悉IP,但可以做出一些有根据的猜测
1/我怀疑在重置后,您必须等待更长的时间才能开始使用FIFO。可能到那时,full标志已低。
“满”标志的问题可能是因为复位后FIFO电平必须通过需要几个周期的时钟域交叉。作为预防措施,设计者将其设置为“满”,因为这是故障安全状态
2/我还怀疑未写入值0x01,因为FIFO仍然认为它已满
3/更仔细地研究波形:2->3是一个时钟,3->4是一个时钟,但当FIFO为空时,您正在读取!!因此,只有在FIFO不再为空时,5才会出现
一般来说,如果你第一次测试一个这样的块,你的计时时间会长很多。所以在写之前重置后等待更长的时间,在写之后等待更长的时间,然后再读取
最后一点意见:您的rd_en
似乎运行在rd_clk
的上升沿,没问题。但是您的wr_en
信号运行在wr_clk的下降沿或rd_clk
的上升沿。如果是后者,则是错误的