微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 大家帮忙看看这小段Verilog代码,多谢!

大家帮忙看看这小段Verilog代码,多谢!

时间:10-02 整理:3721RD 点击:

always @ (negedge nReset or posedge CLK)
if(!nReset)
begin
     a<=0;
     b<=0;
     c<=0;
end
else
begin
     a<=a;
     b<=b;
     c<=c;
    if(d)    a<=a+1'b1;
    if(e)
    begin
      a<=0;
      c<=0;
      if(d || a)                       c<=1;
      if(a>b)                         b<=a;
      if(d && a+1'b1)>b)       b<=a+1'b1;
    end
end
我觉得有点问题:如果d和e同时都成立的话,那么a到底是执行加1还是置0呢?
但是这段代码编译确实没有问题的,可以正常使用。非常的疑惑啊。望高手指点。

自己顶一个哦 不然沉了

这代码写的。
你说的编译没问题 不代表功能正确
你仿一下就知道了 到处都是错

楼上何处此言 能否说的详细点 这是已经实现的项目里抽出来的一小段 我看不明白
其他没什么问题的 我就是有“如果d和e同时都成立的话,那么a到底是执行加1还是置0呢?”的疑惑

刚才确实有点问题,现在改好了。

如果你这个是已经实现的项目 只能说明有其他的逻辑保证了这部分功能的实现
比如其他逻辑保障了d和e不会同时有效 所以就不会出现你说的冲突问题
单看这段code 怎么会没有问题。

看代码可以看到的是d和e是可能同时有效的:
if(e)
    begin
      if(d || a)                       c<=1;

把整个项目里面的一小段抽出来 不好说啊 1# psd0208

自己可以去仿真
这样会覆盖
多个IF都满足时后面执行的结果会覆盖前面的结果。

貌似明白了:
begin end里面的语句是从上到下顺序执行的,所以在d和e同时有效的情况下,先执行了a+1,然后又因为满足条件而执行了a=0,这样的话最后的结果还是a=0。
不错不错!


对的 我就是这个意思 MOSFET正解 谢谢!

这代码写的?

在Quartus综合器中if...else...是有优先级的,如果d和e同时生效的时候,会优先执行d分支下的语句,而不会去执行e分支下的语句

13# sirius.yuan ?

verilog是并行执行的........
给a赋值的条件同时满足的话就会有问题.........

应该先搞清要实现什么功能再写code吧

基本同意13楼,不过不是不执行e分支下的语句,而是执行完d分支再执行e分支。

是啊,begin end 是顺序执行的。

学习了!

学习了……

谢谢。

你说的明显不对啊
赋值语句 <=和=得区别你看懂了么
阻塞和非阻塞你还是仔细考虑下吧

22# wyqkiss
此a=0,非彼a=0

这样问题很多把?reset结束了a=a,d和e满足了,a又有其他的赋值。
这么写程序的可读性太差了,应该根据条件的优先级关系把同一个寄存器的赋值按照顺序用if elseif else写写清楚。

呵呵,看看讨论也能学到点

这代码毫无可读性

不错不错!

我也是10#那样想的呀!

小编这样写代码,综合工具就没告诉你sythnsis-simulation mismatch的warning?

先不要代码不谈功能正确性,从代码的可读性方面来讲,根本不能released.一个难以看懂的代码,在绝大多数情况下,功能是错的。

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

网站地图

Top