Verilog:为什么我不能倒线?

时间:2014-10-26 02:08:20

标签: verilog system-verilog invert

module hamming_code #( parameter TOTAL_LENGTH = 15,
                               parameter PARITY_BITS = 4
                           )
                (
                    //inputs
                    input [TOTAL_LENGTH-1:0] codeword,

                    //outputs
                    output [TOTAL_LENGTH-1:0] correctedWord
                //  output reg badData
                );
wire b;
assign  correctedWord = codeword;

assign  b = ~codeword[0];
assign correctedWord[0] = b;

endmodule

我试图反转导线阵列中单根导线的值。但是,每当我这样做时,该位置变为'X'而不是0或1.为什么会出现这种情况?

1 个答案:

答案 0 :(得分:5)

您拥有的三个assign语句全部并行应用,而不是按顺序应用。您将correctedWord的位0分配两次,分配给每个赋值中的相反值。如果您对一条线路有多个分配,则有一个决定输出的分辨率功能。在你的情况下,有两个驱动程序,一个驱动1,一个驱动0,解析为X.

你想做这样的事情:

assign  correctedWord[TOTAL_LENGTH-1:1] = codeword[TOTAL_LENGTH-1:1];
assign  correctedWord[0] = ~codeword[0];

或者这个:

assign  correctedWord = {codeword[TOTAL_LENGTH-1:1], ~codeword[0]};