首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么iverilog抱怨我的testbench模块?

为什么iverilog抱怨我的testbench模块?
EN

Stack Overflow用户
提问于 2019-03-08 12:30:42
回答 1查看 114关注 0票数 0

我正在为我的CompSci类编写一个verilog模块,这个模块特别是数据内存模块。从结构上和分析上看,我正在查看它,它应该基于我拥有的其他文件而工作,但我不确定为什么这个文件会特别出问题,给我所有的x。希望一双新的眼睛可以帮助我找到我遗漏的错误。提前谢谢。

datamem.v:

代码语言:javascript
复制
module datamem(Ina, Inb, enable, readwrite, dataOut, clk, rst);

input wire [31:0] Ina;
input wire [31:0] Inb;
input wire enable;
input wire readwrite;
input wire clk;
input wire rst;

reg [31:0] memory[0:65535];
output reg [31:0] dataOut;

always @(memory[Ina]) begin
        dataOut = memory[Ina];
    end

always @(posedge clk) begin
    if(1'b1 == readwrite) begin
        memory[Ina] = Inb;
    end
end

endmodule

datamem_tb.v:

代码语言:javascript
复制
module datamem_tb();

reg [31:0] Ina;
reg [31:0] Inb;
reg enable;
reg readwrite;
reg clk;
reg rst;

wire [31:0] dataOut;

datamem DUT (Ina, Inb, enable, readwrite, dataOut, clk, rst);

initial
begin

    Ina <= 32'd0;
    Inb <= 32'd0;
    enable <= 0;
    readwrite <= 0;

    #20 Ina <= 32'd1234;
    #20 Inb <= 32'd1234;
    #20 Ina <= 32'd0517;
    #20 Inb <= 32'd10259;

end

always @(Ina or Inb)
    #1 $display("| Ina = %d | Inb = %d | dataOut = %d |", Ina, Inb, dataOut);

endmodule
EN

回答 1

Stack Overflow用户

发布于 2019-03-08 12:51:38

关于为什么你会得到所有'x的几件事

  1. 如果您从不运行时钟,则需要添加类似以下内容才能进行时钟切换:

代码语言:javascript
复制
     initial begin
       clk = 1'b0;
       forever #5 clk = ~clk;
     end

  1. 您永远不会断言写入内存模块所需的readwrite (您在第20行将其设置为0,并且从不更改它)。在不写入的情况下,memory将为

的每个元素保留其原始值'x

除此之外,您的模块还存在一些其他问题:

使用隐式敏感列表(而不是对内存使用always @(*))

  • Use非阻塞赋值)为打印语句使用(memory[inA] <= inB)

  • Consider而不是always @(memory[inA]) $display,以避免计时问题,并且您只需要在测试台中的initial块的开始处调用它(http://referencedesigner.com/tutorials/verilog/verilog_09.php)

  • Your rst enable没有连接到任何东西。<
  1. >G232

内存单元实现的另一个示例可以在这里找到:Data memory unit

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55056750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档