【发布时间】: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