微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教程序 verilog

请教程序 verilog

时间:10-02 整理:3721RD 点击:
第一中写法:
always@(posedge clk or negedge rst_n) begin
    if(!rst_n)
      a<= 32'b0;
    else if(counter==2)
      a <= result;
    else
      a<= a;
  end   
第二种写法:
always@(posedge clk or negedge rst_n) begin
    if(!rst_n)
      a<= 32'b0;
    else if(counter==2)
      a <= result;
end
这两种写法 ,1 第二种是不是latch ,第一种是d触发器?(条件不足,就成了latch,小弟是这样理解的。)
            2 这两种写法我觉得完成的功能是一样的,但是想问问那种跟好?
            3 这两种写法,综合后会是什么电路,请大家分析一下啊。?

latch是否只存在于组合电路?

两种都是d触发器,效果是一样的。第一种里 a<=a 是多余的。
组合逻辑在条件不全的时候会生成latch

这是时序逻辑,不是组合逻辑,不存在latch产生的毛刺,

一样的啊……

确实是一样的
你可以查看RTL图
应该是一样的

只有组合逻辑才产生latch吗

在第二种情况下,a的数据还是会继续保存下去,即与第一种情况是相同的额。生成的RTL图也是一样的。

时序逻辑不会有latch

对,这两种是一样的,我验证过了、



    没错,感觉第2种写法更好,简洁。

恩。时序逻辑不会infer latch。

一样的,你说的这种情况存在于电平敏感的组合电路中,这两种写法都是时序电路,不加else综合器默认成时序电路了

组合逻辑在条件不全的时候会生成latch

如果用代码检查工具检查,第一种会报warning

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top