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),则内核会将该进程挂起.非堵塞则是发现条件不满足就会马上返回. 此外须要注意的是非堵塞并非轮询.不然就 ...
随机推荐
- JavaScript入门二
******函数****** **函数定义** //普通函数定义 function f1() { console.log("Hello word!") } //带参数的函数 fun ...
- Java内存泄漏及对象引用的4种类型
转自: http://www.cnblogs.com/qq78292959/archive/2011/07/25/2116123.html 总结: 引用分类: 强引用,弱引用,软引用,虚引用.虚引用必 ...
- SVN系列学习(二)-小乌龟的安装与配置
1.TortoiseSVN的介绍 TortoiseSVN是Subversion版本控制系统的一个免费开源客户端,可以超越时间的管理文件和目录. 2.TortoiseSVN的安装 下载地址:http:/ ...
- oracle数据库忘记用户名和密码莫着急
刚安装完Oracle 11g后,登录的时候没有记住用户名和密码,解决方法:新建一个用户 第一步:以系统身份登录 cmd--->sqlplus 提示输入用户名,然后输入sqlplus/as sys ...
- Java—解压zip文件
import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import ja ...
- Android生命周期回顾
先回顾生命周期 Activity一共有3中状态 运行中 Activity位于前台,并具有用户焦点 暂停 另一个Activity位于屏幕前台并具有用户焦点,但此Activity仍可见.也就是说,另一个A ...
- JS——轮播图简单版
1.小图标版本 <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...
- C# GridView使用方法
public void Point_databind(PointList pl) { chart1.Series.Clear(); //清空图表 Series s1 = new Series(); / ...
- VC使用CryptoAPI计算MD5
// md5.h #include <tchar.h> #include <wincrypt.h> // 计算Hash,成功返回0,失败返回GetLastError() // ...
- 【转载】HTTP 请求头与请求体
原文地址: https://segmentfault.com/a/1190000006689767 HTTP Request HTTP 的请求报文分为三个部分 请求行.请求头和请求体,格式如图:一个典 ...