今天写整形模块的时候想要用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