微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 大家看看这个代码段能综合不?

大家看看这个代码段能综合不?

时间:10-02 整理:3721RD 点击:
always@(posedge clk)begin
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型数据赋值,只是非时钟沿触发的吧

要实现什么目的啊,这种代码没有多大意义

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

网站地图

Top