我不是Verilog的新手,但是我正在尝试构建一个模块,该模块接受两个16位输入并根据比较信号进行运算,计算一个特定的表达式,如果该表达式被评估为true,则发送一个true(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
endmodule
由于某种原因,当给出comp_signal时,它会将输出选择驱动到X的未知状态,而我一直无法弄清原因。有人可以提供一些建议吗?先感谢您。
我将您的代码放入Vivado并出现错误:
发现我的错误,在我的固定装置中,我在实例化过程中拼写“ source”的方式有一个错误。在修正拼写错误之后,我已经包含了运行的波形。