【发布时间】:2019-11-30 03:41:30
【问题描述】:
我正在尝试构建一个模块,该模块接受两个 16 位输入并根据比较信号评估某个表达式并发送一个真 (1) 值来选择输出(如果表达式被评估为真)。
这是我的源代码:
module comparator(input [15:0] r15_register, sourceone_register , input [1:0] comp_signal, output reg choice);
always @(*)begin
if (comp_signal == 2'b00) begin
//Check if soureceone is greater than r15.
choice = (sourceone_register > r15_register)? 1:0;
end
else if (comp_signal == 2'b01) begin
//Check is sourceone is less than r15.
choice = (sourceone_register <r15_register)? 1:0;
end
else if (comp_signal == 2'b10) begin
//Check if sourceone is equal to r15.
choice = (sourceone_register == r15_register)? 1:0;
end
else
choice <= 0;
end
endmodule
这是我的测试平台代码:
module comparator_fixture();
reg [15:0] r15_register, sourceone_register;
reg [1:0] comp_signal;
wire choice;
comparator utt(.r15_register(r15_register), .sourceone_register(soureone_register), .comp_signal(comp_signal), .choice(choice));
initial begin
#20;
comp_signal = 2'b00;
//Sourceone is greater than r15.
r15_register = 4;
sourceone_register = 6;
//Sourceone is less than r15.
#10;
comp_signal = 2'b01;
r15_register = 6;
sourceone_register = 4;
//Sourceone is equal to r15.
#10;
comp_signal = 2'b10;
r15_register =7;
sourceone_register =7;
#30;
$stop;
end
结束模块
当给出comp_signal 时,它会将输出选择驱动到 X(未知状态),我无法弄清楚原因。有人可以提供一些建议吗?
【问题讨论】:
-
什么时候将输出驱动到'x'?你模拟的所有60年代? “当一个 com_signal 给出时”是什么意思?
-
当我说“当给出 comp_signal 时”我的意思是信号可以是 2'b00、2'b01 或 2'b10,并且取决于输入的内容,假设是比较 sourceone 的内容是否大于、小于或等于 r15 的内容。
-
我上传了一个波形以显示它何时到达 X。感谢您的帮助。
标签: verilog