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语法,能区分可综合,不可综合语句。

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

    关注

    30

    文章

    5028

    浏览量

    117712
  • Verilog
    +关注

    关注

    28

    文章

    1326

    浏览量

    109298
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48610

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    WEBENCH告诉怎么设计电源

    这是设计工程师在数个场合问到的问题。其中一个场合就是在设计电源时。很多时候,电源设计都有些事后诸葛亮的味道。也许已经首先设计了电路板的其它部分,认为电源开发不需要花费很多的时间。毕竟,有数款在线
    发表于 09-04 14:39

    工程师告诉如何去做PCB设计?

    工程师告诉如何去做PCB设计?有一份指南请查收。
    发表于 04-26 07:03

    谈谈怎样架构的单片机程序

    参考:《谈谈怎样架构的单片机程序》。本人经过摸索实验,并总结,大致应用程序的架构有三种:1. 简单的前后台顺序执行程序,这类写法是大多数人使用的方法,不需用思考程序的具体架构,直接通...
    发表于 07-21 07:01

    怎样架构的单片机程序

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

    sql where条件的执行顺序

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

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

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