我已经在Verilog中编写了这个程序,但是当我尝试模拟它时,它只显示XXXX ......输出和输入变量。我不知道我做错了什么......
PS。在模拟文件中,我给出了例如值in = 16'b1101100100001111; #20;
。
module hamming_decoder(
output reg [10:0] out,
output reg [3:0] error_index,
output reg error,
output reg uncorrectable,
input [16:1] in
);
reg y; // in case "single error", gives the position of the error bit
reg [1:0] check; // if check[0] = 0 - no error
// if check[0] = 1 and check[1] = 0 => double error
// if check[0] = 1 and check[1] = 1 => single error
assign error_index[0] = in[16] ^ in[14] ^ in[12] ^ in[10] ^ in[8] ^ in[6] ^ in[4] ^ in[2];
assign error_index[1] = in[15] ^ in[14] ^ in[11] ^ in[10] ^ in[7] ^ in[6] ^ in[3] ^ in[2];
assign error_index[2] = in[13] ^ in[12] ^ in[11] ^ in[10] ^ in[5] ^ in[4] ^ in[3] ^ in[2];
assign error_index[3] = in[9] ^ in[8] ^ in[7] ^ in[6] ^ in[5] ^ in[4] ^ in[3] ^ in[2];
assign check[1] = in[1] ^ in[2] ^ in[3] ^ in[4] ^ in[5] ^ in[6] ^ in[7] ^ in[8] ^ in[9] ^ in[10] ^ in[11] ^ in[12] ^ in[13] ^ in[14] ^ in[15] ^ in[16];
always @(*)
begin
if (error_index[0] != 0 || error_index[1] != 0 || error_index[2] != 0 || error_index[3] != 0)
begin
check[0] = 1;
error = 1;
end
if (check[0] == 0)
begin
error = 0;
uncorrectable = 0;
out[0] = in[1];
out[1] = in[2];
out[2] = in[3];
out[3] = in[4];
out[4] = in[5];
out[5] = in[6];
out[6] = in[7];
out[7] = in[9];
out[8] = in[10];
out[9] = in[11];
out[10] = in[13];
end
else if(check[1] == 0)
begin
error = 1;
uncorrectable = 1;
out[0] = in[3];
out[1] = in[5];
out[2] = in[6];
out[3] = in[7];
out[4] = in[9];
out[5] = in[10];
out[6] = in[11];
out[7] = in[12];
out[8] = in[13];
out[9] = in[14];
out[10] = in[15];
end
else if (check[1] == 1 && check[0] != 0)
begin
error = 1;
uncorrectable = 0;
y = error_index[0] + error_index[1] * 2 + error_index[2] * 4 + error_index[3] * 8;
out[0] = in[3];
out[1] = in[5];
out[2] = in[6];
out[3] = in[7];
out[4] = in[9];
out[5] = in[10];
out[6] = in[11];
out[7] = in[12];
out[8] = in[13];
out[9] = in[14];
out[10] = in[15];
out[y-1] = !out[y-1]; // ?
end
end
endmodule
答案 0 :(得分:1)
这可能是与testbench端口连接相关的问题。你确定你的测试平台实例化吗?
另外,为了提供适当的输入,您需要为周期性输入提供时钟信号,否则所有输入都将在零模拟时间内进行设计。
此示例16'b1101100100001111
显示为单个错误输入数据。如果你也展示你的试验台,那就太好了。
我已经模拟了您的代码并为其提供了测试平台。离开逻辑部分,设计似乎工作正常。测试平台可用here。
编辑:
是的,您的设计是一个组合电路。从输入到输出的转换应在零模拟时间内进行。因此,只要 in 出现在100ns,就会计算 out 的值,并且测试会突然结束。只需在20ns延迟和中提后添加in = 0
。!!
我在上面的EDAPlayground链接中附加了您的测试,只是添加了上述修改。关于测试平台编码的基础知识PDF可能很有用。