Verilog - 连接两个模块的导线的 X 值
Verilog - X value for wire connecting two modules
我正在制作两个模块,一个 serializer
和一个 deserializer
,我正在尝试将 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
问题是当我将 tmpData
从 serializer
更改为另一个值而不是我在开始时给它的值(现在给零,而它在 controller
中定义的值是 1
),除了变为零,它变成了x
。
有谁知道我应该怎么做才能解决它?
行wire tmpValid = 1, tmpData = 1;
没有初始化网络,它应用连续赋值。
一个wire
可以有多个驱动程序。当驱动程序发送冲突数据(至少一个 1 驱动程序和一个 0 驱动程序)时,网络结果为 X。
简单的解决方案。将 wire tmpValid = 1, tmpData = 1;
更改为 wire tmpValid, tmpData;
如果我没理解错的话,你是从串行器(从它的输出数据端口)驱动 tmpData,但你也在初始化控制器内部的 tmpData 信号。换句话说,您正在创建多个具有相同强度的驱动程序,当它们都驱动 1 时将解析为 1,但当它们驱动相反的值时将解析为 x。
您需要做的是在序列化程序中初始化 outputData 和 validOutput,不要在控制器中给 tmpValid 或 tmpData 初始值。
wire tmpValid, tmpData;
我正在制作两个模块,一个 serializer
和一个 deserializer
,我正在尝试将 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
问题是当我将 tmpData
从 serializer
更改为另一个值而不是我在开始时给它的值(现在给零,而它在 controller
中定义的值是 1
),除了变为零,它变成了x
。
有谁知道我应该怎么做才能解决它?
行wire tmpValid = 1, tmpData = 1;
没有初始化网络,它应用连续赋值。
一个wire
可以有多个驱动程序。当驱动程序发送冲突数据(至少一个 1 驱动程序和一个 0 驱动程序)时,网络结果为 X。
简单的解决方案。将 wire tmpValid = 1, tmpData = 1;
更改为 wire tmpValid, tmpData;
如果我没理解错的话,你是从串行器(从它的输出数据端口)驱动 tmpData,但你也在初始化控制器内部的 tmpData 信号。换句话说,您正在创建多个具有相同强度的驱动程序,当它们都驱动 1 时将解析为 1,但当它们驱动相反的值时将解析为 x。
您需要做的是在序列化程序中初始化 outputData 和 validOutput,不要在控制器中给 tmpValid 或 tmpData 初始值。
wire tmpValid, tmpData;