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

关于RTL的问题

时间:10-02 整理:3721RD 点击:
always@(posedge clk  ) begin
   if(m==1)begin
         c<= addr ;
   end
   else if(!(m==1)) begin
        // do nothing
   end
//VCS coverage off
   else  begin
       c<= 3'bxxx;
   end
//VCS coverage on
end

就这段代码小弟请教几个问题:
1  //VCS coverage off  和VCS  coverage on 的作用是什么?
2  c<=3'bxxx  这样写的用处是什么?
3  这段代码这样写有什么好处?

1  //VCS coverage off  和VCS  coverage on 的作用是什么?
    用于VCS跑覆盖率用的,综合的时候不关心其电路。
2  c<=3'bxxx  这样写的用处是什么?
    用于仿真时,当C出现X态,便于查找原因。
3  这段代码这样写有什么好处?
    至于好处,具体说不一来,个人感觉这种写法已经有点不常规了。

还请牛人拍砖

always@(posedge clk  ) begin
   if(m==1)begin
         c<= addr ;
   end
只需要这样写就OK了,后面两段没用,最后那个else都不可能覆盖到

连个最起码的复位都没有
基本功要扎实啊


这样写不就产生latch了嘛

1.也并不是所有的FF都必须复位,不带reset的FF多得很
2.便于检测因M信号出现bug(C=x则原因是M信号挂了)
3.3#只是hold住addr,也不算latch了,时序逻辑里不用else只是为了hold住数据,并非完全意义上的latch


写在always@(posedge clk) reg中一般不会产生latch啊。


你都基于时钟了 哪来latch
只是m=1后c就不会再变了
与下面等效
if(m==1)
    c<=a;
else
   c <=c;

首先声明是否有复位并不代表代码是否规范,当然内部普通逻辑还是要有复位,下面是异步复位的例子:
always @(posedge clk or negedge reset_n)
if(!reset_n)
signal <=#1 3'b000;//初始值可选
else if( m == 1'b1)
signal <=#1 signalB;

需要注意的是!reset_n , 还有就是 == 1'b1,一定要写宽度,
小编写的至少后一点没有注意。
另外小编写的else if及else都是多余,
latch 肯定没有,只有写组合逻辑才有生成latch的问题,时序逻辑没有--赫赫,这是基本概念哦

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

网站地图

Top