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堵塞赋值与非堵塞赋值的更多相关文章

  1. 阻塞赋值与非阻塞赋值(verilog篇)

    阻塞赋值与非阻塞赋值(verilog篇) 2017-09-30 竹海 相约电子ee 相信刚刚接触verilog的读者,多少对阻塞赋值和非阻塞赋值仍有一些困惑.笔者在这篇文章,带领大家深入的理解这两者的 ...

  2. 07-阻塞赋值与非阻塞赋值原理分析——小梅哥FPGA设计思想与验证方法视频教程配套文档

    芯航线--普利斯队长精心奉献   实验目的:掌握阻塞赋值与非阻塞赋值的区别 实验平台:无 实验原理:     阻塞赋值,操作符为"=","阻塞"是指在进程语句( ...

  3. FPGA之阻塞赋值与非阻塞赋值

    Verilog语言中讲的阻塞赋值与非阻塞赋值,但从字面意思来看,阻塞就是执行的时候在某个地方卡住了,等这个操作执行完在继续执行下面的语句,而非阻塞就是不管执行完没有,我不管执行的结果是什么,反正我继续 ...

  4. 【Verilog HDL】赋值语句之阻塞赋值方式与非阻塞赋值方式

    刚开始接触Verilog HDL语言时,这种硬件描述语言有一点与软件的程序设计语言直观上的最大区别大概就是这个赋值语句了(这里只是强调直观上的最大区别,事实上的最大区别并非如此). Verilog H ...

  5. Verilog之阻塞赋值非阻塞赋值

    verilog设计进阶 时间:2014年5月6日星期二 主要收获: 1. 阻塞赋值与非阻塞赋值: 2. 代码测试: 3. 组合逻辑电路和时序逻辑电路. 阻塞赋值与非阻塞赋值: 1. 阻塞赋值" ...

  6. 《Java并发编程实战》第十五章 原子变量与非堵塞同步机制 读书笔记

    一.锁的劣势 锁定后假设未释放.再次请求锁时会造成堵塞.多线程调度通常遇到堵塞会进行上下文切换,造成很多其它的开销. 在挂起与恢复线程等过程中存在着非常大的开销,而且通常存在着较长时间的中断. 锁可能 ...

  7. Java IO:同步、非堵塞式IO(NIO)

    转载请注明出处:jiq•钦's technical Blog 引言 JDK1.4中引入了NIO,即New IO,目的在于提高IO速度.特别注意JavaNIO不全然是非堵塞式IO(No-Blocking ...

  8. 《网络编程》非堵塞 I/O

    概述 在前面文章中,我们介绍了 I/O 的五种模型<I/O 模型>.从那里能够知道,非堵塞式的 I/O 是进程调用 I/O 操作时.若数据未准备就绪.则马上返回一个 EWOULDBLOCK ...

  9. Linux下文件的堵塞与非堵塞对部分系统调用的影响

    1.基本概念 所谓的堵塞,即内核在对文件操作I/O系统调用时.假设条件不满足(可能须要产生I/O),则内核会将该进程挂起.非堵塞则是发现条件不满足就会马上返回. 此外须要注意的是非堵塞并非轮询.不然就 ...

随机推荐

  1. IOS开发之Swift学习笔记

    1.因为存储属性要求初始化,我们可以使用lazy修饰符来延迟初始化.

  2. Android java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230

    近期遇到了如标题这种错误,再次记录解决方法.本文參考帖子: http://bbs.csdn.net/topics/390196217 出现此bug的原因是在内存回收上.里面用Bitamp的代码为: t ...

  3. LAMP配置课程基础知识详解

    听了一天的课程,我本人对这个还是很感兴趣的. [root@localhost~]#     root 用户名 localhost 本地 ~  家目录 不同用户不同 #当前用户是管理员 $当前用户是普通 ...

  4. xml操作-Nested exception: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId. 异常处理

    异常如下: org.dom4j.DocumentException: Error on line 2 of document file:///D:/workspaces/struts2/lesson0 ...

  5. [Windows Server 2012] WordPress安全设置方法

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:WordP ...

  6. [Windows Server 2008] 查看PHP详细错误信息

    ★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:查看IIS ...

  7. python tips:描述符descriptor

    描述符(descriptor)是实现了__get__.__set__.__del__方法的类,进一步可以细分为两类: 数据描述符:实现了__get__和__set__ 非数据描述符:没有实现__set ...

  8. IDEA 创建一个普通的java项目

    IntelliJ IDEA 如何创建一个普通的java项目,及创建java文件并运行 首先,确保idea软件正确安装完成,java开发工具包jdk安装完成. IntelliJ IDEA下载地址:htt ...

  9. How To: Multipath Linux x86-64 Release 6.4

    [root@node01 ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0 ...

  10. Capture the Flag ZOJ - 3879(模拟题)

    In computer security, Capture the Flag (CTF) is a computer security competition. CTF contests are us ...