Verilog 比较没有发挥应有的作用

Verilog 比较没有发挥应有的作用,verilog,Verilog,我试图构建一个模块,该模块接受两个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) begi

我试图构建一个模块,该模块接受两个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
端模

当给出一个
comp_信号时,它会将输出选项驱动到X(未知状态),我还不知道为什么。有人能给点建议吗


我将您的代码放入Vivado,并得到错误:

  • 未声明的符号soureone_寄存器,假定为默认网络类型导线
  • 意外EOF
我发现你的波形已经“奇怪”了,因为
choice
为零,而其他任何值都没有给出。所以不管你用什么方法产生波形,它都不能是你展示的代码


在我修复了错误之后,
选项
不再是X。

发现了我的错误,在我的夹具中,在实例化过程中,我拼写“source”时出现了一个错误。我已经包括了一个波形的运行后,我修复了我的拼写错误


何时将输出驱动到“x”?你模拟的所有60年代?“当一个com_信号被给出”是什么意思?当我说“当一个com_信号被给出”时,我的意思是信号可以是2'b00、2'b01或2'b10,并且根据输入的内容,假设比较sourceone内容是否大于,小于或等于r15的内容。我上传了一个波形来显示它何时到达X。谢谢你的帮助。你能给我解释一下错误吗?因为我没有收到这些错误,我也在使用Vivado。该波形是我在Vivado上点击run simulation>behavorial simulation时弹出的,因此我不确定为什么它是0ns到20ns。关于模拟运行,我删除了声明选项为0的else语句,然后当我运行波形时,所有60ns模拟的选项都是X。请注意,当comp_信号没有给定值时,由于最后一个else语句,choice变为0,但当它被给定值时,它变为X。好的,下一步是改进测试台,以测试在每种情况下
choice
是否变低:-)感谢您的帮助,我也将其添加到了测试台。
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