跟着我从零开始入门FPGA(一周入门XXOO系列)-阻塞和非阻塞
话说大禹治水,因为他老爹治水失败被咔咔了,他不得已去顶缸。
他也琢磨啊,其父也不是等闲之辈,没搞定,说明必须得换个法子,否则自己也得被大哥给嗝屁了。
大禹父子治水,分别用的是阻塞和非阻塞的方法,下面我们就扯一下逻辑电路中的阻塞和非阻塞。
通常所说的阻塞和非阻塞,指的是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系列)-阻塞和非阻塞相关推荐
- 创业笔记-Node.js入门之阻塞与非阻塞
阻塞与非阻塞 正如此前所提到的,当在请求处理程序中包括非阻塞操作时就会出问题.但是,在说这之前,我们先来看看什么是阻塞操作. 我不想去解释"阻塞"和"非阻塞"的 ...
- C++网络编程快速入门(三):阻塞与非阻塞式调用网络通信函数
目录 阻塞与非阻塞定义 send与recv connect 一些问题 为什么要将监听socket设置为非阻塞 阻塞与非阻塞定义 阻塞模式指的是当前某个函数执行效果未达预期,该函数会阻塞当前的执行线程, ...
- 跟着我从零开始入门FPGA(一周入门系列 第一天)
整理来自 www.amobbs.com 作者---McuPlayer (版权归作者所有,未经作者同意,禁止转载) 1.假设读者对硬件数字电路熟悉,比如自己可以用74芯片做跑马灯 2.C语言都比较熟 ...
- 自学前端设计——【开源骚客】FPGA超详细入门视频教程
前言 本文基于[开源骚客]FPGA超详细入门视频教程,简单做个笔记 00. FPGA开发软件的安装 Quartus II 13.1 Modelsim Notepad++ Vim 01. 我的第一个FP ...
- 真正从零开始,TensorFlow详细安装入门图文教程!(linux)
读懂智能&未来 首页 专栏 专题 公开课 AI慕课学院 爱搞机 极客购 申请专栏作者 业界人工智能智能驾驶AI+Fintech未来医疗网络安全AR/VR机器人开发者智能硬件物联网GAIR 业界 ...
- TensorFlow 真正从零开始,TensorFlow详细安装入门图文教程
https://www.leiphone.com/news/201606/ORlQ7uK3TIW8xVGF.html 读懂智能&未来 首页 专栏 专题 公开课 AI慕课学院 爱搞机 极客购 申 ...
- python爬虫入门实战---------一周天气预报爬取_Python爬虫入门实战--------一周天气预报爬取【转载】【没有分析...
Python爬虫入门实战--------一周天气预报爬取[转载][没有分析 Python爬虫入门实战--------一周天气预报爬取[转载][没有分析] 来源:https://blog.csdn.ne ...
- (224)FPGA数字信号处理入门指导
(224)FPGA数字信号处理入门指导 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)FPGA数字信号处理入门指导 5)技术交流 6)参考资料 2 FPGA入门与提 ...
- 柿饼UI入门课程第一周作业
入门课程第一周 基础 如何看帮助文档 API帮助 控件帮助 设计器使用帮助及反馈 举个例子 附加 目标 架构 范进中举 相册 其他 基础 只需要按照视频里面就可以做到90%.但是,dotIndicat ...
最新文章
- (原) ODP.NET 演示通过结果集的锁顶来更新 LOB 数据
- nohup使得Python web项目在服务器上后台运行
- boost::graph_as_tree用法的测试程序
- 这样就算会了PHP么?-11
- 在VC++中使用Tab Control控件
- workerman--测试
- 《Web漏洞防护》读书笔记——第6章,XXE防护
- python提取pdf表格数据 无边框_Python使用Tabula提取PDF表格数据
- Linux-nali解析IP归属信息
- 2020年测试面试经历以及面试题大全
- GOLANG工厂模式、简单工厂模式、抽象工厂模式、创建者模式
- MyEclipse打不开项目下的jsp文件,或是打开jsp文件报错!
- Linux中部署Spring Cloud项目
- ICPC-TOOLs resolver滚榜单工具使用指南
- java数据库验证用户名,java新手:注册时验证用户名是否在数据库里已存在
- 游戏加盟和游戏代理有什么区别?哪个更好?
- 行车记录仪全国产化电子元件推荐方案
- 如何查看、复制caj、PDF文件文本内容
- 使用 Tailscale 快速实现远程访问局域网
- 快速入门丨篇一 如何进行运动控制器固件升级