【问题标题】:Verilog Testbench Results not showing desired dataRead?Verilog 测试台结果未显示所需的数据读取?
【发布时间】:2022-01-13 02:00:51
【问题描述】:

我为 Data_Mem 创建了以下模块:

module Data_Mem(
    input clk,
    input memWrite,
    input [5:0] addr,
    input [31:0] writeData,
    output [31:0] readData
    );
    reg [31:0] readData;
    reg [31:0] addrSpace [0:63];
    integer i;
    
    initial begin
       for (i=0;i<64;i=i+1)
           addrSpace[i] = 0;
    end
    always @ (*) begin
       if (memWrite == 1)
           begin
           addrSpace[addr] <= writeData;
           end
       readData <= addrSpace[addr];
    end
 endmodule

现在,我编写了以下测试台,以查看是否可以将值保留在指定的位置或地址。测试台如下:

    reg [5:0] addr;
    reg [31:0] writeData;
    reg memWrite, clk;
    wire [31:0] readData;
    //
    Data_Mem datamem_testUnit1(.clk(clk), .memWrite(memWrite), .writeData(writeData), .readData(readData));
    initial
        begin
            #10 a = 6'b001111; writeData = 32'h000A; memWrite = 0;
            #10 a = 6'b000001; writeData = 32'h000C; memWrite = 1;
            #10 a = 6'b000001; 
            #10 $finish;
            end
      endmodule

对于模拟结果,我看到它接受了我想要的值,但 dataRead 一直只是 XXXX。我已经包含了第二个 addr 00011,以查看此结果是否是由于写入时的任何重叠,但即使 addr 仍被声明为 000001,我也看不到 readData 所需的“000C”。请帮忙! I have included a screenshot of my simulation results.

【问题讨论】:

    标签: verilog test-bench


    【解决方案1】:

    您似乎只是忘记将测试台中的addr 信号连接到Data_Mem 模块的addr 端口。试试

        Data_Mem datamem_testUnit1(.clk(clk), .memWrite(memWrite), .addr(addr), .writeData(writeData), .readData(readData));
    

    另外,你的 always-block 会推断出锁存器。我想你可能希望它有时钟,像这样:

    always @ (posedge clk) begin
    

    不过,这涉及到必须在测试台中驱动 clk 端口。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多