奋斗的小孩fpga之旅吧 关注:81贴子:81
  • 3回复贴,共1

并行思维的重要性

只看楼主收藏回复

在fpga设计中,我们经常会写:
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
num1 <= 0;
num2 <= 0;
num3 <= 0;
end
else
begin
num1 <= 5;
num2 <= num1;
num3 <= num2;
end
end
上面的语句,如果按照c程序去理解的话,那么num3一下子就等于5了,因为c程序中,这三句赋值的话是数序执行的。但是在fpga设计当中的话,就不是这样了。
第一个时钟节拍,num1=5,num2=0;num3=0;
第二个时钟节拍,num1=5,num2=5;num3=0;
第三个时钟节拍,num1=5,num2=5;num3=5;
为什么会是这样的呢?
因为在fpga当中的话,所有的赋值都是并行执行的,也就是同一个时间执行的。当第一个时钟上升沿来的之前,num1=0,num2=0;num3=0;这三句赋值一起执行,所以就变成了num1=5,num2=0;num3=0;
(一起执行的意思:num2虽然被赋值num1,但是这个时候num1都还没有改变),再次重申,他们是一起改变的。
一定要记住,不然的话,总会错开一个或者几个时钟周期。


1楼2016-05-18 22:04回复
    并行思维,这是硬件描述语言和高级语言的最大区别之一


    2楼2016-09-21 20:03
    收起回复
      2025-08-22 05:36:40
      广告
      不感兴趣
      开通SVIP免广告
      你这不是非阻塞赋值吗?最后结果不该是5/0/0吗


      来自Android客户端3楼2016-10-12 23:28
      回复