话说大禹治水,因为他老爹治水失败被咔咔了,他不得已去顶缸。
他也琢磨啊,其父也不是等闲之辈,没搞定,说明必须得换个法子,否则自己也得被大哥给嗝屁了。
大禹父子治水,分别用的是阻塞和非阻塞的方法,下面我们就扯一下逻辑电路中的阻塞和非阻塞。

通常所说的阻塞和非阻塞,指的是always块中的语句。
always语句中有时序逻辑,也有组合逻辑。前者用非阻塞,后者用阻塞。
其实“阻塞”这个术语,也是专门给软件出身的电工看的,硬电工才懒得管你阻不阻的呢。

reg[7:0] in1;
    reg[7:0] out;

always @ (posedge clk)
    begin
        in1 <= in1+8'h01;
        out <= in1;
    end
endmodule

先从容易的下刀,我们先看看这个非阻塞的语句,它很简单,就是in1的自身完成一个自加一
注意这个“<=”,是不是又想起了C语言里用来搞指针的“->”,不过真的没有一毛钱的关系。

in1拿到的是clk上升沿之前的“in1”值再加1,跟clk上升沿之后的in1没有关系了。

正如,已毕业的小明的时候对还在读大四GF小芳承诺说,哥等你大学毕业就讨你做LP了。
时光如箭,日月如梭,时间如白驹过隙,学校7月份小芳走出了象牙塔的大学校门。
小明履行承诺,娶小芳为妻。话说,无巧不成书。
小芳大学毕业了,但大三的同学也该升级读大四了,正好里面也有个女娃的名字也叫小芳。
抢答开始,问:小明,娶的是哪个小芳?

答案是,去年读大四今年毕业的那个小芳,而不是去年大三今年大四的那个小芳。
您感觉拗口吗,反正我有点绕口令的感觉了。

非阻塞操作也是这个效果,你娶的是毕业(clk上升沿)之前的那个大四的小芳。

我们知道硬件是并行执行的,所以,上面的代码,这么写,效果一样。
        out <= in1;         //小明娶老婆
        in1 <= in1+8'h01;   //老小芳毕业,新小芳升级大四

但,如果把非阻塞改为阻塞的,那小明娶的老婆,到底是谁?且看分析。
        in1 <= in1+8'h01;   //老小芳毕业,新小芳升级大四
        out <= in1;         //小明娶老婆
所谓阻塞,就是一步一步来,就是写软件的那个思路,小明顺利娶他昔日的恋人为妻。

我们要调整语句顺序了,再看看小明的执行结果咋样
        in1 = in1+8'h01;    //老小芳毕业,新小芳升级大四
        out = in1;          //小明娶老婆

要顺序执行的哦,先完成“老小芳毕业,新小芳升级大四”,然后“小明娶老婆”。
小明娶到了刚刚大三升大四的小芳,你完全可以认定,小明是一个喜新厌旧的文艺青年。

而如果,做下语句的调整,就像下面这样
        out = in1;          //小明娶老婆
        in1 = in1+8'h01;    //老小芳毕业,新小芳升级大四
小明喜新厌旧的企图,被强大的阻塞语句,给堵回去了。

一般用阻塞语句来实现assign语句描述困难的组合逻辑,一般情况下代码块会比较小。
非阻塞的一般是用于时序逻辑,时序逻辑往往比较复杂,有时候复杂得有些变态。
如果月老执行Verilog语句的时候,一不小心,小明就娶错了老婆。

阻塞,有个地方用起来很方便,也许你也猜到了,testbench

tb代码本身,就不被用来综合到电路,所以,可以大胆使用阻塞语句
        #10 rst = 1;
        #10 clk = 0;
        #10 clk = 1;
        #10 clk = 0;
        #10 clk = 1;
        #10 rst = 0;
        repeat(100)
        begin
            #10 clk = 0;
            #10 clk = 1;
        end

这是一段,模拟单片机复位释放以及振荡器启动的激励。
反正是顺序执行的,就拿这写软件的脑袋来理解就够了,估计软电工都喜欢。

客户下单了,我得看看还有多少物料,还得准备安排焊接。

今天就先扯到这里吧。
请一定记住今天的学习任务,我们要帮小明娶到正确的老婆。

跟着我从零开始入门FPGA(一周入门XXOO系列)-阻塞和非阻塞相关推荐

  1. 创业笔记-Node.js入门之阻塞与非阻塞

    阻塞与非阻塞 正如此前所提到的,当在请求处理程序中包括非阻塞操作时就会出问题.但是,在说这之前,我们先来看看什么是阻塞操作. 我不想去解释"阻塞"和"非阻塞"的 ...

  2. C++网络编程快速入门(三):阻塞与非阻塞式调用网络通信函数

    目录 阻塞与非阻塞定义 send与recv connect 一些问题 为什么要将监听socket设置为非阻塞 阻塞与非阻塞定义 阻塞模式指的是当前某个函数执行效果未达预期,该函数会阻塞当前的执行线程, ...

  3. 跟着我从零开始入门FPGA(一周入门系列 第一天)

    整理来自  www.amobbs.com 作者---McuPlayer  (版权归作者所有,未经作者同意,禁止转载) 1.假设读者对硬件数字电路熟悉,比如自己可以用74芯片做跑马灯 2.C语言都比较熟 ...

  4. 自学前端设计——【开源骚客】FPGA超详细入门视频教程

    前言 本文基于[开源骚客]FPGA超详细入门视频教程,简单做个笔记 00. FPGA开发软件的安装 Quartus II 13.1 Modelsim Notepad++ Vim 01. 我的第一个FP ...

  5. 真正从零开始,TensorFlow详细安装入门图文教程!(linux)

    读懂智能&未来 首页 专栏 专题 公开课 AI慕课学院 爱搞机 极客购 申请专栏作者 业界人工智能智能驾驶AI+Fintech未来医疗网络安全AR/VR机器人开发者智能硬件物联网GAIR 业界 ...

  6. TensorFlow 真正从零开始,TensorFlow详细安装入门图文教程

    https://www.leiphone.com/news/201606/ORlQ7uK3TIW8xVGF.html 读懂智能&未来 首页 专栏 专题 公开课 AI慕课学院 爱搞机 极客购 申 ...

  7. python爬虫入门实战---------一周天气预报爬取_Python爬虫入门实战--------一周天气预报爬取【转载】【没有分析...

    Python爬虫入门实战--------一周天气预报爬取[转载][没有分析 Python爬虫入门实战--------一周天气预报爬取[转载][没有分析] 来源:https://blog.csdn.ne ...

  8. (224)FPGA数字信号处理入门指导

    (224)FPGA数字信号处理入门指导 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA数字信号处理入门指导 5)技术交流 6)参考资料 2 FPGA入门与提 ...

  9. 柿饼UI入门课程第一周作业

    入门课程第一周 基础 如何看帮助文档 API帮助 控件帮助 设计器使用帮助及反馈 举个例子 附加 目标 架构 范进中举 相册 其他 基础 只需要按照视频里面就可以做到90%.但是,dotIndicat ...

最新文章

  1. (原) ODP.NET 演示通过结果集的锁顶来更新 LOB 数据
  2. nohup使得Python web项目在服务器上后台运行
  3. boost::graph_as_tree用法的测试程序
  4. 这样就算会了PHP么?-11
  5. 在VC++中使用Tab Control控件
  6. workerman--测试
  7. 《Web漏洞防护》读书笔记——第6章,XXE防护
  8. python提取pdf表格数据 无边框_Python使用Tabula提取PDF表格数据
  9. Linux-nali解析IP归属信息
  10. 2020年测试面试经历以及面试题大全
  11. GOLANG工厂模式、简单工厂模式、抽象工厂模式、创建者模式
  12. MyEclipse打不开项目下的jsp文件,或是打开jsp文件报错!
  13. Linux中部署Spring Cloud项目
  14. ICPC-TOOLs resolver滚榜单工具使用指南
  15. java数据库验证用户名,java新手:注册时验证用户名是否在数据库里已存在
  16. 游戏加盟和游戏代理有什么区别?哪个更好?
  17. 行车记录仪全国产化电子元件推荐方案
  18. 如何查看、复制caj、PDF文件文本内容
  19. 使用 Tailscale 快速实现远程访问局域网
  20. 快速入门丨篇一 如何进行运动控制器固件升级

热门文章

  1. Stripes tips(1)-Stripes简介
  2. 绿色版tomcat配置
  3. String 字符串之值替换方法
  4. 一个空格引发的销售订单中“物料未对*销售组织语言定义”问题
  5. STM32L0 系列 EEPROM 读写,程序卡死?
  6. 腾讯云 cos 字体在CDN上跨域处理
  7. Zookeeper C 异步 API 介绍
  8. 英语学习资源下载大全 一网打尽
  9. rpm package.http://rpmfind.net/
  10. (转载)Linux 学习记录 一(安装、基本文件操作)