关于RTL的问题
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的问题,时序逻辑没有--赫赫,这是基本概念哦
