【问题标题】:Verilog program won't read inputVerilog 程序不会读取输入
【发布时间】:2015-11-04 11:54:09
【问题描述】:

我已经用 Verilog 编写了这个程序,但是当我尝试模拟它时,它只在输出和输入变量上显示 XXXX...。我不明白我做错了什么......

附言。在我给出的模拟文件中,例如值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

【问题讨论】:

    标签: testing verilog hamming-code


    【解决方案1】:

    这可能是与测试台端口连接有关的问题。您确定您的测试台实例化了吗?

    此外,为了提供正确的输入,您需要有一个用于周期性输入的时钟信号,否则您的所有输入都将在零仿真时间在设计中传播。

    此示例16'b1101100100001111 显示为单个错误输入数据。如果你也展示你的测试台,那就太好了。

    我已经模拟了您的代码并为其提供了一个测试平台。离开逻辑部分,设计似乎工作正常。测试平台可用here

    编辑:

    是的,您的设计是一个组合电路。从输入到输出的转换应在零仿真时间内发生。因此,一旦 in 出现在 100ns,就会计算出 out 的值,并且测试会突然结束。只需在 20ns 延迟后添加 in = 0 和中提琴..!!

    我已经在上面的 EDAPlayground 链接中附加了你的测试,只是添加了上面的修改。这个关于测试台编码基础的PDF 可能很有用。

    【讨论】:

    • 这是我的 Verilog 测试夹具文件:`timescale 1ns / 1ps module hamming_decoder_test; // 输入:reg [16:1] in; // 输出:wire [10:0] out;线 [3:0] 错误索引;接线错误;电线无法纠正; hamming_decoder uut (.out(out), .error_index(error_index), .error(error), .uncorrectable(uncorrectable), .in(in));初始开始 = 0; #100;在 = 16'b1110101110001011; #20;结束模块
    • 对不起:这是文件和显示结果的打印屏幕:we.tl/2ty5m8VbGZ
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-04-06
    相关资源
    最近更新 更多