【问题标题】:Comparing two numbers without comparison operators in verilog在verilog中比较两个没有比较运算符的数字
【发布时间】:2017-03-02 02:00:32
【问题描述】:

两个 8 位输入被馈送到比较器,如果第一个大于第二个,它们应该被减去,否则它们应该被添加。但是,> 和

input[7:0] in1,in2;
output select;
assign select=(in1-in2)?0:1;

它总是减去,除非差等于 0。如果我使用除法,0 不能作为输入,否则我的程序可能会崩溃。有关如何解决此问题的任何建议?

非常感谢您的宝贵时间。

【问题讨论】:

    标签: verilog comparison-operators mux


    【解决方案1】:

    请记住,负数的最左边是 aways 1。因此您可以使用它来检查差异的符号。

    input[7:0] in1,in2;
    output select;
    wire [7:0] difference = in1-in2;
    wire sign_of_difference = difference[7];
    assign select = sign_of_difference? 0:1;
    

    【讨论】:

    • 非常感谢阿尔珀。但是,为什么这行得通而我使用的逻辑却没有?电线或尺寸匹配有什么区别吗?
    • 不客气 ZealousCoder。在 assign select=(in1-in2)?0:1; 中,in1-in2 是一个 8 位值。 (in1-in2)? 操作比较这个 8 位减法的结果是否大于零,只有当 in1-in2 为零时才返回 0。如果您认为它可以解决您的问题,请记住接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    • 2012-10-05
    • 2013-12-10
    相关资源
    最近更新 更多