Verilog - 用于连接两个模块的电线的X值

时间:2016-07-08 22:00:17

标签: serialization module verilog system-verilog

我正在创建两个模块,serializerdeserializer,我正在尝试将serializer输出连接到deserializer输入。 但关键是我有一个不寻常的问题,我定义的临时变量没有改变,他们有x值。任何人都可以帮我这个吗?

这是serializer定义:

module serializer (clk, validInput, inputData, outputData, validOutput);

    input clk, validInput;
    input [0:9] inputData;
    output reg outputData;
    output  reg validOutput;

之后有一些代码,deserializer看起来像:

module deserializer( input clk, inputBit, validInput,
                     output reg validOutput,
                     output reg [0:9] outputData);

,控制器代码为:

module controller(  input clk, validInput,
                    input [0:9] inputData,
                    output [0:9] outputData,
                    output validOutput);
    wire tmpValid = 1, tmpData = 1;



    deserializer dsrilz(
        .clk(clk),
        .inputBit(tmpData),
        .validInput(tmpValid),
        .validOutput(validOutput),
        .outputData(outputData));

    serializer srilz (
        .clk(clk),
        .validInput(validInput),
        .inputData(inputData),
        .outputData(tmpData),
        .validOutput(tmpValid));

endmodule

问题是我将tmpDataserializer更改为另一个值,而不是我在开始时给出的值(现在在controller中定义的值为0时为零是1),除了变为零之外,它变为x。 有没有人知道我该怎么做才能解决它?

2 个答案:

答案 0 :(得分:1)

wire行未初始化网络,它会应用连续分配。

wire tmpValid = 1, tmpData = 1;可以有多个驱动程序。当驱动程序发送冲突数据(至少一个驱动程序和一个0驱动程序)时,网络会产生一个X.

简单的解决方案。将wire tmpValid, tmpData;更改为function lang() { alert("Hello, World! It's JavaScript this time"); } document.getElementById('test').onclick = lang

答案 1 :(得分:1)

如果我理解正确,你是从串行器(从其outputData端口)驱动tmpData,但你也在初始化控制器内的tmpData信号。换句话说,您正在创建具有相同强度的多个驱动程序,当它们都驱动1时将解析为1,但是当它们驱动相反的值时将解析为x。

您需要做的是在序列化器内初始化outputData和validOutput,并且不要在控制器中给出tmpValid或tmpData初始值。

wire tmpValid, tmpData;