神奇椰果 2023-06-02 16:51 采纳率: 66.7%
浏览 15
已结题

verilog中?:的写法和case写法,综合结果一样吗

a = b==1?1:
b==2?2:
b==3?3:
0
类似写法用case实现。
从代码上感觉前者是按顺序一级一级下来判断的,但是综合结果二者其实应该是一致的?是这样吗?

  • 写回答

2条回答 默认 最新

  • 老皮芽子 2023-06-02 17:37
    关注

    综合后是不一样的
    用下面 4 种方式写的代码,综合后的结果如下

    
    module xxx1
    (
        output    [7:0]    a,
        input    [7:0]    b
    );
    assign    a =     b == 1 ? 1:
                    b == 2 ? 2:
                    b == 3 ? 4:0;
    endmodule
    
    module xxx2
    (
        output    [7:0]    a,
        input    [7:0]    b
    );
    reg    [7:0]    a;
    always@(*)
    begin
        case(b)
        1:        a    <= b;
        2:        a    <= b;
        3:        a    <= b;
        default:a    <= 0;
        endcase
    end
    endmodule
    
    module xxx3
    (
        output    [7:0]    a,
        input    [7:0]    b
    );
    reg    [7:0]    a;
    always@(*)
    begin
        if(a<4)    a    <= b;
        else    a    <= 0;
    end
    endmodule
    
    module xxx4
    (
        output    [7:0]    a,
        input    [7:0]    b
    );
    assign    a    = b < 4 ? b:0;
    endmodule
    
    
    
    

    img

    img

    img

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月26日
  • 已采纳回答 6月18日
  • 创建了问题 6月2日