为什么iverilog抱怨我的测试台模块?
我正在为我的CompSci类编写一个verilog模块,这个模块就是数据存储模块。从结构和分析上看,我正在看它,它应该基于我拥有的其他文件工作,但我不确定为什么这一个特别地起作用,并给我所有的x。希望一双新的眼睛能帮助我发现我错过的错误。提前谢谢 datamem.v:为什么iverilog抱怨我的测试台模块?,verilog,iverilog,Verilog,Iverilog,我正在为我的CompSci类编写一个verilog模块,这个模块就是数据存储模块。从结构和分析上看,我正在看它,它应该基于我拥有的其他文件工作,但我不确定为什么这一个特别地起作用,并给我所有的x。希望一双新的眼睛能帮助我发现我错过的错误。提前谢谢 datamem.v: module datamem(Ina, Inb, enable, readwrite, dataOut, clk, rst); input wire [31:0] Ina; input wire [31:0] Inb; inpu
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:
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
module datamem_tb();
reg[31:0]Ina;
reg[31:0]Inb;
注册启用;
reg读写;
注册时钟;
注册rst;
连线[31:0]数据输出;
数据存储器DUT(Ina、Inb、启用、读写、数据输出、时钟、rst);
最初的
开始
关于为什么你会得到所有的'x
,有几点:
如果从未运行过时钟,则需要添加以下内容以切换时钟:
您从不断言写入内存模块所需的readwrite
(您在第20行将其设置为0
,并且从不更改它)。如果不写入,内存
将为每个元素保留其原始值'x
除此之外,您的模块还有一些其他问题:
使用隐式敏感列表(而不是always@(内存[inA])
使用always@(*)
)
对内存写入使用非阻塞分配(memory[inA]
initial begin
clk = 1'b0;
forever #5 clk = ~clk;
end