I am trying to build a module that accepts two 16 bit inputs and depending a compare signal, evaluates a certain expression and sends a true (1) value to choice the output if the expression is evaluated as true.
This is my source code:
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
This is my testbench code:
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
When a comp_signal is given, it drives the output choice to X (an unknown state), and I haven't been able to figure out why. Can someone please offer some advice?
