今天写整形模块的时候想要用fifo的empty信号,所以研究一下empty的信号特征:
(1) 复位的时候(低电平有效,即为0),empty线是红色的,代表既不是0也不是1,复位信号无效(即为1)且尚未有数据输入的时候,empty为1;
(2) Empty啥时候变为0呢?当第一组数据输入完成时empty有1变为0。如下图所示:
再回顾一下输出dout的信号特征:
信号输出dout的特征是啥呢?
第一次读的时候,dout先保持为0一个周期,再读写入的值。
Rd_en后,dout的数据首先保持一个时钟,即为之前的dout最后时刻的值,第二次读的时候先保持一个时钟周期,dout值为上一次读最后输出的值4。
在这里插入代码片`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2020/12/03 21:46:30
// Design Name:
// Module Name: fifo1_tst
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module fifo1_tst();
reg clk;
reg srst;
reg [17:0] din;
reg wr_en;
reg rd_en;
wire [17:0] dout;
wire full;
wire empty;
initial begin
clk=1;
srst=1;
wr_en=0;
rd_en=0;
#10 srst=0;
#100 wr_en=1;
din=1;
#10 din=2;
#10 din=3;
#10 din=4;
#10 wr_en=0;
#10 rd_en=1;
//din=0;
#100 rd_en=0;
#10 wr_en=1;
din=5;
#10 din=6;
#10 wr_en=0;
//din=0;
#100 rd_en=1;
end
always #5 clk=~clk;
fifo_generator_0 uut (
.clk(clk), // input wire clk
.srst(srst), // input wire srst
.din(din), // input wire [17 : 0] din
.wr_en(wr_en), // input wire wr_en
.rd_en(rd_en), // input wire rd_en
.dout(dout), // output wire [17 : 0] dout
.full(full), // output wire full
.empty(empty) // output wire empty
);
endmodule