Verilog 条件A>;B>;C没有得到正确的输出

Verilog 条件A>;B>;C没有得到正确的输出,verilog,Verilog,我制作了一个程序,能够比较3个输入,得到最大值(F) 问题是我无法获得问题的预期输出。 期望: A B C F 001(1) 111(9) 100(4) 111(9) 001(1) 001(1) 001(1) 000 实际产量: 模块输入比较器(A、B、C、F); 输入[2:0]A; 输入[2:0]B; 输入[2:0]C; 输出寄存器[2:0]F; 总是开始 如果(A>B>C)开始 F=A; 结束 否则,如果(A>B您不应该尝试像这样链接比较运算符:A>B>

我制作了一个程序,能够比较3个输入,得到最大值(F) 问题是我无法获得问题的预期输出。 期望:

A      B      C      F
001(1) 111(9) 100(4) 111(9)
001(1) 001(1)  001(1) 000 
实际产量:

模块输入比较器(A、B、C、F);
输入[2:0]A;
输入[2:0]B;
输入[2:0]C;
输出寄存器[2:0]F;
总是开始
如果(A>B>C)开始
F=A;
结束

否则,如果(A>B您不应该尝试像这样链接比较运算符:
A>B>C
。这与您认为的不同,这是一个常见的陷阱(请参见下面的解释)。您必须将每个比较分开:

module InputComparator(A,B,C,F);
input [2:0]A;
input [2:0]B;
input [2:0]C;
output reg [2:0]F;

    always @* begin
        if ((A>B) && (A>C)) begin   
            F = A;
            end
        else if ((B>A) && (B>C)) begin 
            F = B;
            end
        else if ((C>A) && (C>B)) begin 
            F = C;
            end
        else begin
            F = 3'b000; 
        end
end
endmodule
我得到了正确的输出:

--------------------------------------------------------
3 Input Comparator
--------------------------------------------------------
Time    A   B   C   F
--------------------------------------------------------
0   000 000 000 000
1   101 101 101 000
2   001 111 100 111
3   110 001 101 110
4   001 100 101 101
--------------------------------------------------------
--------------------------------------------------------

Verilog将
(A>B>C)
解释为
((A>B)>C)
。它首先计算
(A>B)
,解析为0或1。让我们假设它解析为1。因此,我们只剩下
(1>C)
,这显然不是您想要的

--------------------------------------------------------
3 Input Comparator
--------------------------------------------------------
Time    A   B   C   F
--------------------------------------------------------
0   000 000 000 000
1   101 101 101 000
2   001 111 100 111
3   110 001 101 110
4   001 100 101 101
--------------------------------------------------------
--------------------------------------------------------