大家看看这个代码段能综合不?
if(b)
a=c;
d<=a;
end
我的困惑是d值的改变不但取决于clk的上升沿到来,还取决于a=c这条阻塞赋值语句,这种阻塞于非阻塞混用的情况对应于什么电路结构,可以被综合吗?
可以综合,阻塞赋值只影响仿真结果。
多谢啦
可以 但是综合出来和仿真结果不一致
a和c都是寄存器
我希望先改变a再改变d,在modelsim里仿真和我的预期是一致的,那综合以后的结果应该是怎样的呢?
always@(posedge clk)
begin
if(b)
begin
a<=c;
d<=a;
end
end
你这个都是非阻塞的显然不符合要求
你的写法是最不符合规则的!
不知你要设计什么样功能的电路?
你这样写a和d的值一起改变,我的设计要求是a先变,然后把a的值赋给d,所以我才用阻塞赋值
a=b?c:0;
always @ (posedge clk )
begin
if (b)
d <= a ;
end
其实不是可不可综合的问题,是综合后综合前行为一致性的问题
风格不好的代码不要去研究了
不同的工具对这类代码有不同的解释
研究这有什么意思
可以的
写代码的时候要想到它实现以后的样子。
这样的代码综合以后不会达到你想要的效果。
数字设计中,想要指定寄存器值(要改变肯定是寄存器,组合电路没有保持功能,更谈不上改变)改变的先后顺序,作为设计人员可以控制的最小时间差别单位就是一个时钟周期,不如都写成“<=”.
如果你的想法是两个值都在同一个周期变化,但要有先后顺序,那我只能说:朋友,不用试图用模拟电路的思路做数字设计。
poor coding style.conditional and sequential should be separted.
说的有道理,多谢了!
不过你说组合电路里的数据不能保持也不对吧,组合电路里也可以对reg型数据赋值,只是非时钟沿触发的吧
要实现什么目的啊,这种代码没有多大意义
