Verilog堵塞赋值与非堵塞赋值
verilog设计进阶
时间:2014年5月6日星期二
主要收获:
1.堵塞赋值与非堵塞赋值;
2.代码測试;
3.组合逻辑电路和时序逻辑电路。
堵塞赋值与非堵塞赋值:
1.堵塞赋值“=”(组合逻辑电路)。非堵塞赋值“<=”(时序逻辑电路);
2.Verilog模块编程的8个原则:
(1) 时序电路建模时,用非堵塞赋值。
(2) 锁存器电路建模时,用非堵塞赋值。
(3) 用always块建立组合逻辑模型时。用堵塞赋值。
(4) 在同一个always块中建立时序和组合逻辑电路时,用非堵塞赋值。
(5) 在同一个always块中不要既用非堵塞赋值又用堵塞赋值。
(6) 不要在一个以上的always块中为同一个变量赋值。
(7) 用$strobe系统任务来显示用非堵塞赋值的变量值。
(8) 在赋值时不要使用#0延时。
在编写时牢记这八个要点能够为绝大多数的Verilog用户解决在综合后仿真中出现的90-100% 的冒险竞争问题。
3.所谓堵塞的概念是指在同一个always块中。其后面的赋值语句从概念上是在前一条赋值语句结束后開始赋值的。
4.非堵塞语句的运行过程是:首先计算语句块内部全部右边表达式(RHS)的值,然后完毕对左边寄存器变量的赋值操作。
5.在代码上的差别:
begin
B=A;
C=B+1;
end
上述代码先将A的值赋值给B。C的值是A+1。
begin
B<=A;
C<=B+1;
end
上述代码的终于结果是:将A赋值给了B,可是C的值是B原来的值+1。由于最先计是的是右边的表达式。
组合逻辑电路与时序逻辑电路:
1.数字电路依据逻辑功能的不同特点,能够分成两大类。一类叫组合逻辑电路(简称组合电路),还有一类叫做时序逻辑电路(简称时序电路)。
2.组合逻辑电路在逻辑功能上的特点是随意时刻的输出只取决于该时刻的输入。与电路原来的状态无关。
3.时序逻辑电路在逻辑功能上的特点是随意时刻的输出不仅取决于当时的输入信号,并且还取决于电路原来的状态,或者说,还与曾经的输入有关。
Verilog代码:
moduleblocking(clk, a, b, c);
output [3:0] b,c;
input [3:0] a;
input clk;
reg [3:0] b,c;
always@(posedge clk) begin
b = a;
c = b;
$display("Blocking: a = %d, b= %d, c = %d.", a, b, c);
end
endmodule
相应原理图:
modulenon_blocking(clk, a, b, c);
output [3:0] b,c;
input [3:0] a;
input clk;
reg [3:0] b,c;
always@(posedge clk) begin
b <= a;
c <= b;
$display("Non_Blocking: a =%d, b = %d, c = %d.", a, b, c);
end
endmodule
相应原理图:
測试代码:
`timescale1ns/1ns
moduleblocking_test;
wire [3:0] b1, c1, b2, c2;
reg [3:0] a;
reg clk;
initial begin
clk = 0;
forever #50 clk = ~clk;
end
initial begin
a = 4'h3;
$display("______________________");
#100 a = 4'h7;
$display("______________________");
#100 a = 4'hf;
$display("______________________");
#100 a = 4'ha;
$display("______________________");
#100 a = 4'h2;
$display("______________________");
#100$display("______________________");
$stop;
end
non_blocking u1(clk, a, b2, c2);
blocking u2(clk,a, b1, c1);
endmodule
仿真波形图:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjM3MzAyMA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
Verilog堵塞赋值与非堵塞赋值的更多相关文章
- 阻塞赋值与非阻塞赋值(verilog篇)
阻塞赋值与非阻塞赋值(verilog篇) 2017-09-30 竹海 相约电子ee 相信刚刚接触verilog的读者,多少对阻塞赋值和非阻塞赋值仍有一些困惑.笔者在这篇文章,带领大家深入的理解这两者的 ...
- 07-阻塞赋值与非阻塞赋值原理分析——小梅哥FPGA设计思想与验证方法视频教程配套文档
芯航线--普利斯队长精心奉献 实验目的:掌握阻塞赋值与非阻塞赋值的区别 实验平台:无 实验原理: 阻塞赋值,操作符为"=","阻塞"是指在进程语句( ...
- FPGA之阻塞赋值与非阻塞赋值
Verilog语言中讲的阻塞赋值与非阻塞赋值,但从字面意思来看,阻塞就是执行的时候在某个地方卡住了,等这个操作执行完在继续执行下面的语句,而非阻塞就是不管执行完没有,我不管执行的结果是什么,反正我继续 ...
- 【Verilog HDL】赋值语句之阻塞赋值方式与非阻塞赋值方式
刚开始接触Verilog HDL语言时,这种硬件描述语言有一点与软件的程序设计语言直观上的最大区别大概就是这个赋值语句了(这里只是强调直观上的最大区别,事实上的最大区别并非如此). Verilog H ...
- Verilog之阻塞赋值非阻塞赋值
verilog设计进阶 时间:2014年5月6日星期二 主要收获: 1. 阻塞赋值与非阻塞赋值: 2. 代码测试: 3. 组合逻辑电路和时序逻辑电路. 阻塞赋值与非阻塞赋值: 1. 阻塞赋值" ...
- 《Java并发编程实战》第十五章 原子变量与非堵塞同步机制 读书笔记
一.锁的劣势 锁定后假设未释放.再次请求锁时会造成堵塞.多线程调度通常遇到堵塞会进行上下文切换,造成很多其它的开销. 在挂起与恢复线程等过程中存在着非常大的开销,而且通常存在着较长时间的中断. 锁可能 ...
- Java IO:同步、非堵塞式IO(NIO)
转载请注明出处:jiq•钦's technical Blog 引言 JDK1.4中引入了NIO,即New IO,目的在于提高IO速度.特别注意JavaNIO不全然是非堵塞式IO(No-Blocking ...
- 《网络编程》非堵塞 I/O
概述 在前面文章中,我们介绍了 I/O 的五种模型<I/O 模型>.从那里能够知道,非堵塞式的 I/O 是进程调用 I/O 操作时.若数据未准备就绪.则马上返回一个 EWOULDBLOCK ...
- Linux下文件的堵塞与非堵塞对部分系统调用的影响
1.基本概念 所谓的堵塞,即内核在对文件操作I/O系统调用时.假设条件不满足(可能须要产生I/O),则内核会将该进程挂起.非堵塞则是发现条件不满足就会马上返回. 此外须要注意的是非堵塞并非轮询.不然就 ...
随机推荐
- IOS上微信在输入框弹出键盘后,页面不恢复,下方有留白,有弹窗弹出时页面内容感应区域错位
问题说明: ios中,键盘的弹起,页面会往上挪动,使输入框展示在页面中间,键盘隐藏页面会下挪恢复原状. 在微信移动端,ios页面不恢复,下方有留白. 收起键盘的瞬间,如果有弹窗弹出,此时时页面内容应区 ...
- Linux命令(004) -- watch
对Linux系统的操作过程中,经常会遇到重复执行同一命令,以观察其结果变化的情况.惯用的方法是:上下键加回车,或是Ctr+p然后回车.今天我们来了解一下watch命令,它可以帮助我们周期性的执行一个命 ...
- [转]Android杂谈--ListView之BaseAdapter的使用
本文转自:http://blog.csdn.net/tianshuguang/article/details/7344315 话说开发用了各种Adapter之后感觉用的最舒服的还是BaseAdapte ...
- 关于处理移动端Vue单页面及其内嵌兼容问题
关于处理移动端Vue单页面及其内嵌兼容问题 question:由于最近转移了以前的H5项目,重构使用Vue单页面,导致部分手机内嵌或在微信浏览器中无法浏览,或者无法使用ajax请求:手机机型千变万化, ...
- 从源码看ASP.NET框架(一)-打造页面控件树
测试实例如下: 前台代码MyFirstWeb.aspx(没有服务器控件,即没有runat) CodeBehind="MyFirstWeb.aspx.cs":表示代码后置类文件 In ...
- Less文件的建立
1.打开DreamWeaver 2.选择 新建 Less 文件名为.less,保存于Less文件夹中 3.声明文档头:@charset "utf-8"; 4.将Less ...
- 整合springboot,angular2,可以前后台交互数据
改造了一下angular2官方文档中的hero项目,让其可以进行后台的交互, https://github.com/DACHUYIN 源码在上面...博客就不写了....
- gtest ASSERT_TRUE和EXPECT_TRUE
调用ASSERT_TRUE的函数,返回值类型定义必须是void,如果想返回别的类型,就用EXPECT_TRUE: void abc::fun() { ASSERT_TRUE(fun1()); } bo ...
- (转)Hibernate的优化方案
http://blog.csdn.net/yerenyuan_pku/article/details/70768603 HQL优化 使用参数绑定 使用绑定参数的原因是让数据库一次解析SQL,对后续的 ...
- codeforces_734C_二分
C. Anton and Making Potions time limit per test 4 seconds memory limit per test 256 megabytes input ...