Verilog 冗余条件运算符

Verilog 冗余条件运算符,verilog,Verilog,我在verilog代码中多次遇到这种编码风格: input enable; input [1:0] mode; wire mode_enable; assign mode_enable = ( enable & (mode == 2'b00) ) ? 1'b1 : 1'b0; 这里条件运算符的用途是什么?这似乎是多余和混乱的,因为我认为这会产生完全相同的结果: assign mode_enable = ( enable & (mode == 2'b00) ); 这有助于模拟

我在verilog代码中多次遇到这种编码风格:

input enable;
input [1:0] mode;
wire mode_enable;

assign mode_enable = ( enable & (mode == 2'b00) ) ? 1'b1 : 1'b0;
这里条件运算符的用途是什么?这似乎是多余和混乱的,因为我认为这会产生完全相同的结果:

assign mode_enable = ( enable & (mode == 2'b00) );
这有助于模拟或指导合成吗?

更新问题:

(enable&(mode==2'b00))
(enable&(mode==2'b00))之间唯一的区别是什么?1'b1:1'b0
是后者在合成时推断出的mux。合成甚至可以优化mux

RLT设计师想要mux的原因:

  • mux可以有一个更理想的扇出负载驱动器
  • 故意注入延迟,用于故障过滤和/或平衡逻辑传播延迟
  • 对于IC设计,它可以使手动ECO更容易,将一个输入与另一个网络交换
  • 以上原因在98%的情况下都是毫无意义的,只要工具得当。一个好的综合和时序分析工具将处理原因1和2。添加一个好的ECO工具,第三点已涵盖。其他2%主要用于您希望执行ECO的罕见情况,然后强制mux使最终输出位置和负载更可预测


    对原问题:

    只有当
    b
    c
    为单位时,它才是冗余的。若它们是多位宽度,那个么方程就不能简化<如果
    b
    c
    在相同的位索引上都有a 1值,则code>a将为1

    例如,假设
    b
    c
    的宽度为2位:(
    assigna=(b&c)?1'b1:1'b0

    • b
      =2
      c
      =3,
      a
      将是1,因为
      b&c
      =2
    • b
      =2
      c
      =1,
      a
      将为0,因为
      b&c
      =0

    如果所有
    a
    b
    c
    的大小都不是1,则不会给出相同的结果:

    assign a = b & c;
    
    但这是一样的:

    assign a = b && c;
    

    b和c的尺寸是多少?好问题。这是我看到的简化版本,但我认为b和c都是计算为单个位的表达式。我需要找到代码来查看。因为很多人都指出,如果我们处理多位信号,这并不是多余的,所以我调整了问题以使其更清楚。因此,总结一下:除非我有很好的理由,否则这不是我想做的事。我会问写代码的人,但他已经不在这里工作了。谢谢