微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 关于Verilog HDL中的的非阻塞赋值问题

关于Verilog HDL中的的非阻塞赋值问题

时间:10-02 整理:3721RD 点击:
我是一个半路出家的FPGA应用工程师,这段时间在设计时序的时候突然发现一个矛盾的问题,希望能有人能帮忙解惑:
在一个always的同步时序逻辑里,比如有这样几句话:
     always @(posedge clk_sys)
        begin
           ......
           Buffer[Reading_Index] < =Dout_From_FIFO ;
           Reading_Index <= Reading_Index +1'b1 ;
           ......
        end
Reading_Index 假如是一个4位的计数器,从0开始,那么在第一个clock上升沿结束的时候,是不是Buffer[0]被赋值,Reading_Index 从0变成1呢?如果我把这两句话颠倒一下,结果是不是变成Reading_Index 为1, Buffer[1]被赋值?

如果是<=这种赋值,就不会产生你所描述的现象,这种赋值方式,右边给左边是同时进行的,没有先后顺序。

的确如此

明白了,always内部的信号都是在某一个上沿之后改变,内部的赋值都是前一个时钟的结果。
但是 书上有一句话“在begin。end之间的语句是顺序执行的”, 一点不解。

……………………6^

<=符号是并行执行的

真正的硬件哪有顺序执行之说
顺序执行是指仿真的时候仿真软件如何执行,但无论如何,仿真软件的行为应该和硬件一致

嗯,楼上说得没错,这个顺序取决于仿真工具对同一个时间点执行事务的理解能力了。

赞同2楼说法!

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

网站地图

Top