0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

告诉你真正的verilog执行顺序,纠正你的思路偏差

电子工程师 来源:未知 作者:李倩 2018-08-31 16:45 次阅读

· 程序执行顺序 ·

和C/C++一类编程语言不同,HDL用于电路描述,代表着门电路和触发器的组合。任何时刻,只要上电后,FPGA就等价于一堆数字电路,每个电路按照自己的条件执行,不会因为某个模块放在代码前面,就会先工作。这就需要设计人员,按照每个模块并行工作的思路来调整设计。这给软件开发人员入门带来了难度,但是同时也是FPGA的价值所在,正因为FPGA能够并行执行,所以很多算法和设计可以在低频时钟下高实时性,快速出结果。这是FPGA的优势,也是火起来的一个重要原因,所以希望大家好好去理解。

同时大家要明白verilog不是不能实现顺序执行,而是实现顺序执行并不像语法那么直观,最简单的顺序执行方法就是用状态机去控制每一个寄存器的跳变,C/C++编程也可以认为本质上就是大型的一个状态机,verilog要做到那样也只是做成状态机去模拟他的工作。只要是数字电路能够实现的,FPGA都可以做到。

模块内部的执行顺序比较复杂,优秀的设计中,模块内部是并行工作的,即使是begin end语句内部,这里很多读者会问,begin end不是串行语句块吗?下面详细解释这个问题。

begin end之间存在阻塞赋值和非阻塞赋值2种赋值方法,如果使用不当不仅仅会出现竞争冒险,还会导致你的理解和编译器理解不一样,最终生成的电路和自己想的天差地别,导致一些难修正的错误。所以必须按照以下两条执行准则使用赋值语句:

描述组合逻辑的always块里面用阻塞式赋值

描述时序逻辑的always块里面用非阻塞赋值

在组合逻辑中,阻塞赋值只和电平有关,往往和触发边沿没有关系,可以看成是并行运行的组合逻辑电路。而时序逻辑中,非阻塞赋值是本身就是并行执行的。因此,优秀的设计,其begin end内部也是并行执行的。大家为了加深理解,可以去看看实例说明里面的例子。

· 实例说明 ·

modulepara_demo(clk,reset,a,b);

inputclk;

inputreset;

input[3:0]a;

output[3:0]b;

reg[3:0]tempa1,tempa2,b;

always@(posedgeclk)

begin

if(!reset)begin

tempa1<= 0;  

tempa2<= 0;  

b<= 0;  

end

elsebegin

tempa1<= a + 1;  

tempa2<= tempa1 + 1;  

b<= tempa2 + 1;      

end

end

endmodule

上述代码的RTL级图如下,可以看出代码最终实现是一个3级累加结构,每级累加结构中间有一个触发器打拍。也就是说这是典型的流水线结构。每一级都在一直工作,运行顺序没有先后,但是数据到达时间有先后,处理顺序有先后。

大家再看仿真图,tempa2 并不是等到a+1的结果给到tempa1后才执行的tempa1+1,而是执行a+1的同时也在执行tempa1+1。三句累加都是同时进行,看下图就知道都是对前一个数值基础上加1。所以tempa1和tempa2相等,而不是相差1。

看此文之前请千万很熟悉verilog语法,能区分可综合,不可综合语句。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5336

    浏览量

    120230
  • Verilog
    +关注

    关注

    28

    文章

    1351

    浏览量

    110074
  • 编译器
    +关注

    关注

    1

    文章

    1623

    浏览量

    49108

原文标题:面向硬件的设计思维——程序执行顺序

文章出处:【微信号:HaveFunFPGA,微信公众号:玩儿转FPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    UBI告诉如何走向智能汽车

    UBI告诉如何走向智能汽车,UBI将会引爆整个车联网市场,带来车联网大规模普及。
    发表于 10-21 08:13 1365次阅读

    [公告]谁是真正的朋友?

    ,急忙奔上坡来,从草丛鱼鳞病中闪出,一下咬住了狼的脖子,狼疼得直叫唤,趁狗换气时,怆惶逃走了。  回到家,朋友牛皮癣医院都来了,  牛说:怎么不告诉我?我的硬皮病角可以剜出狼的肠子。  马说:怎么不
    发表于 11-15 08:39

    【LabVIEW我来告诉】 Webbrowser调用的隐患

    【LabVIEW我来告诉】 Webbrowser调用的隐患 LabVIEW为我们提供了丰富的程序接口,ActiveX,.net等等,但在调用它们的时候,是否注意过他们存在的一些问题呢?在
    发表于 10-31 10:48

    【labview我来告诉】labview编程可以很简单

    功能,有各种各样的引用规则,还有文本语言所不会涉及到的各种节点……”“学起来用起来其实很难……”“G语言也有G语言的缺点,真正做程序并不快”,等等我告诉他们,其实LabVIEW的各个功能不要太多的去
    发表于 11-11 14:17

    【labview我来告诉】用好控件的小技巧

    地使用 Picture控件的 Erase First属性,将“1”连于此,这样就可以擦除内容一次,而不需要去改变真正的“Erase First”设定项。 在我的项目中,我在Picture控件中使用了很多拖拽的效果。有
    发表于 12-20 10:15

    【labview我来告诉】如何方便的知道事件运行顺序

    ”选项设为不选……通过这样,每当创建一个新的 Event 条件时,VI 就会破线,仍而提醒大家需要将线连在新的Case上。 好,现在我告诉大家为什么我要这么做,因为这样做可以在我调试亊件结构的亊件顺序
    发表于 01-04 10:05

    labview心得体会之我来告诉汇总(持续更新)

    ://bbs.elecfans.com/jishu_215000_1_1.html【labview我来告诉】如何方便的知道事件运行顺序https://bbs.elecfans.com/jishu_213347_1_1.html
    发表于 02-01 11:19

    告诉什么叫高逼格的LED

    仔细想想自己对运动LED最重要的需求是什么!若对来说,是用来跑步、集训、可穿戴,那么富思科技的LED将成为的首先。富思科技是第一个提供真正时尚型可穿戴的LED,内嵌超高清亮度LED布料,可以通过
    发表于 03-23 16:34

    FPGA的几点总结,同意吗?

    时钟管理芯片。因此,要想学好FPGA,得用硬件的思维方式来编写代码,注重FPGA的系统结构设计,好的系统结构设计会带来质的飞跃,这就告诉我们RTL Coding其实是硬件结构设计,而非基于处理器架构
    发表于 11-22 14:35

    十个练习让学会Verilog语言

    10个 Verilog 练习,进阶级教程 完整的pdf格式文档电子发烧友下载地址(共26页): 十个练习让学会Verilog语言.pdf
    发表于 07-03 02:04

    怎样架构的单片机程序

    对于单片机程序来说,大家都不陌生,但是真正使用架构,考虑架构的恐怕并不多,随着程序开发的不断增多,本人觉得架构是非常必要的。前不就发帖与大家一起讨论了一下怎样架构的单片机程序,发现真正使用架构
    发表于 12-07 09:25

    基于Verilog顺序状态逻辑FSM的设计与仿真

    基于Verilog顺序状态逻辑FSM的设计与仿真  硬件描述语言Verilog为数字系统设计人员提供了一种在广泛抽象层次上描述数字系统的方式,同时,为计算机辅助设计工具
    发表于 02-04 09:32 1883次阅读
    基于<b class='flag-5'>Verilog</b>的<b class='flag-5'>顺序</b>状态逻辑FSM的设计与仿真

    5款手机告诉什么是真正的旗舰

    谁说安卓不如ios?这5部手机告诉什么是真正的旗舰。
    的头像 发表于 08-16 16:27 3186次阅读

    sql where条件的执行顺序

    SQL语句中的WHERE条件是用来筛选数据的,它决定了哪些数据会被返回给用户。WHERE条件的执行顺序是影响SQL语句性能的一个重要因素,正确地理解和优化WHERE条件的执行顺序可以提
    的头像 发表于 11-23 11:31 2194次阅读

    verilog中for循环是串行执行还是并行执行

    Verilog中,for循环是并行执行的。Verilog是一种硬件描述语言,用于描述和设计数字电路和系统。在硬件系统中,各个电路模块是同时运行的,并且可以并行执行多个操作。因此,在
    的头像 发表于 02-22 16:06 2900次阅读