比较无法正常工作-Verilog

问题描述 投票:0回答:2

我不是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的未知状态,而我一直无法弄清原因。有人可以提供一些建议吗?先感谢您。

Here is the waveform.

verilog
2个回答
0
投票

我将您的代码放入Vivado并出现错误:


0
投票

发现我的错误,在我的固定装置中,我在实例化过程中拼写“ source”的方式有一个错误。在修正拼写错误之后,我已经包含了运行的波形。

© www.soinside.com 2019 - 2024. All rights reserved.