目录

阻塞赋值

非阻塞赋值

实际工程仿真

阻塞赋值仿真

编写Verilog代码

编写测试文件代码

综合看RTL图

进行实际仿真

非阻塞赋值仿真

编写Verilog代码

编写测试文件代码

综合看RTL图

实际仿真图

总结


阻塞赋值

阻塞赋值的赋值号用 “=” 表示,对应的电路结构往往于触发闫妮没有关系,只与输入电平的变化有关系。它的操作可以认为是只有一个步骤的操作,即计算赋值号右边的语句并更新赋值号左边的语句,此时不允许有来自任何其他Verilog语句的干扰,直到现行的赋值完成,才允许下一条的赋值语句的执行。

串行块也就是begin end,各条阻塞赋值语句将以它们在顺序块中的排列次序依次执行。

非阻塞赋值

非阻塞赋值的赋值号用 “<=” 表示,对应的电路结构往往与触发沿有关系,只有在触发沿的时刻才能进行非阻塞赋值。

它的操作可以看作为两个步骤的过程:在赋值结束时刻,更新赋值号左边的语句。

在计算非阻塞语句赋值号右边的语句更新赋值号左边的语句期间,允许其他的Verilog语句同时进行操作。

非阻塞左槽只能用于对寄存器类型变量(reg)进行赋值,因此只能用于 “initial” 和 "always" 块中,不允许用于连续赋值 “assign” 。

实际工程仿真

阻塞赋值仿真

编写Verilog代码

首先是阻塞赋值仿真(blocking),利用 “=” 进行赋值,表示阻塞赋值。

module   blocking
(           input   wire            clk,input   wire            rst_n,input wire    [1:0]   in,output   reg     [1:0]   out);reg        [1:0]   in_reg;always @(posedge clk or negedge rst_n) beginif (rst_n == 1'b0) beginin_reg = 2'b0;out    = 2'b0;endelse beginin_reg = in;out    = in_reg;end
end
endmodule

编写测试文件代码

`timescale 1ns / 1nsmodule tb_blocking();reg                clk;reg             rst_n;reg       [1:0]   in;wire [1:0]   out;initial beginclk = 1'b1;rst_n <= 1'b0;in <= 2'b0;#20rst_n <= 1'b1;endalways #10 clk = ~clk;always #10 in <= {$random} % 4;blocking tb_blocking(.clk(clk),.rst_n(rst_n),.in(in),.out(out));
endmodule

综合看RTL图

可以看到只有一个寄存器,因此在实际的仿真图显示的应该是in_reg和out信号应该同时变化,并且两路信号都延时in信号一拍。

进行实际仿真

与预想的一致

非阻塞赋值仿真

编写Verilog代码

如下:只需要将阻塞赋值的代码将 “=” 改成 “

module   blocking
(           input   wire            clk,input   wire            rst_n,input wire    [1:0]   in,output   reg     [1:0]   out);reg        [1:0]   in_reg;always @(posedge clk or negedge rst_n) beginif (rst_n == 1'b0) beginin_reg <= 2'b0;out     <= 2'b0;endelse beginin_reg <= in;out    <= in_reg;end
end
endmodule

编写测试文件代码

和阻塞赋值的测试文件一样

`timescale 1ns / 1nsmodule tb_blocking();reg                clk;reg             rst_n;reg       [1:0]   in;wire [1:0]   out;initial beginclk = 1'b1;rst_n <= 1'b0;in <= 2'b0;#20rst_n <= 1'b1;endalways #10 clk = ~clk;always #10 in <= {$random} % 4;blocking tb_blocking(.clk(clk),.rst_n(rst_n),.in(in),.out(out));
endmodule

综合看RTL图

可以看到有两个寄存器,从in信号赋值给in_reg信号中有一个寄存器,再从in_reg信号赋值给out信号中也有一个寄存器,因此在实际的仿真图显示的应该是in_reg信号相对于in信号延时一拍,而out信号相对于in_reg延时一拍,也就是相对于in信号延时两拍。

实际仿真图

与观察RTL图后设想的一致。

总结

阻塞赋值和非阻塞赋值在实际使用上不能随意乱用,否则可能会出现难以预估的后果,根据官方给出的建议,在编写组合逻辑电路时,使用阻塞赋值;在编写时序逻辑时,使用非阻塞赋值。

【Verilog 基础】阻塞赋值和非阻塞赋值的区别相关推荐

  1. verilog中阻塞赋值与 非阻塞赋值的区别

    非阻塞(Non_Blocking)赋值方式( 如 b <= a; ), 块结束后才完成赋值操作,值并不是立刻就改变的, 这是一种比较常用的赋值方法.(特别在编写可综合模块时). 阻塞(Block ...

  2. verilog reg赋初值_Verilog语法之六:阻塞赋值与非阻塞赋值

    本文首发于微信公众号"花蚂蚁",想要学习FPGA及Verilog的同学可以关注一下. 一.初步理解阻塞赋值与非阻塞赋值 在Verilog HDL语言中,信号有两种赋值方式: (1) ...

  3. Verilog中阻塞赋值和非阻塞赋值的区别

    Verilog中阻塞赋值(=)和非阻塞赋值(<=)的区别 **阻塞赋值:**前面语句执行完,才可执行下一条语句:即:前面语句的执行(b=a)阻塞了后面语句的执行(c=b).即:always块内, ...

  4. 通过举例谈谈阻塞赋值与非阻塞赋值的区别

    这篇博客,通过举例说明:非阻塞赋值和阻塞赋值的区别? 一般非阻塞赋值用于时序逻辑,而阻塞赋值用于组合逻辑: 非阻塞赋值语句是并行执行的,等到一个时钟完成后才完成赋值,而阻塞赋值是顺序执行的,下一条赋值 ...

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

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

  6. 查询框赋值后不可编辑_【技巧分享】阻塞赋值与非阻塞赋值

    原创 小黑同学 明德扬FPGA科教 关于阻塞赋值和非阻塞赋值的问题,明德扬的学员提得比较多,今天小黑老师专门给大家普及一下阻塞赋值和非阻塞赋值的相关知识. 一.概述 1.阻塞赋值对应的电路往往与触发沿 ...

  7. (13)FPGA面试题阻塞赋值与非阻塞赋值

    1.1 FPGA面试题阻塞赋值与非阻塞赋值 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA面试题阻塞赋值与非阻塞赋值: 5)结束语. 1.1.2 本节引言 &q ...

  8. FPGA阻塞赋值与非阻塞赋值用法

    1.1 FPGA阻塞赋值与非阻塞赋值用法 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA阻塞赋值与非阻塞赋值用法: 5)结束语. 1.1.2 本节引言 &quo ...

  9. 把变量赋值给寄存器_阻塞赋值和非阻塞赋值的区别与记忆

    罗成:Verilog语法之六:阻塞赋值与非阻塞赋值​zhuanlan.zhihu.com 通过上面的文章先了解下,阻塞赋值和非阻塞赋值的区别. b<=a; c<=b; 非阻塞赋值 b=a; ...

最新文章

  1. linux下远程传输文件命令scp使用注解
  2. MySQL基本语句——增、删、查、改
  3. python 少儿趣味编程下载_趣味儿童编程软件(scratch)
  4. python做方差分析和卡方检验
  5. 二十万字C/C++、嵌入式软开面试题全集宝典十一
  6. java和python哪个编程好找工作_学编程选Python还是Java?就业发展哪个好??
  7. Server 2008 配置共享文件服务器--权限配置
  8. Asp.Net MVC 教程
  9. java怎么把文件写入到usb里_如何创建PowerShell脚本以将文件复制到USB闪存驱动器?...
  10. 正式踏入24岁了……
  11. hudson linux节点,在Linux下设置Hudson进行连续集成
  12. java.sql.SQLException: Parameter index out of range (5 > number of parameters, which is 4).
  13. GTRD:最全面的人和小鼠转录因子chip_seq数据库
  14. Paper Reading:BigGAN
  15. 智芯传感推出高性能低功耗ZXP2绝压压力传感器
  16. Java代理模式及其应用
  17. 什么才是【Python】中的鸭子类型和猴子补丁
  18. 机器人学——1.2-三维空间位姿描述
  19. 边缘计算在自动驾驶中的应用场景丨边缘计算阅读周
  20. Eclipse出现An error has occurred问题解决方案

热门文章

  1. JAVA WEB 实现第三方登录 -- qq篇
  2. Postman --- 环境切换
  3. 使命召唤》CJ首秀:3A品质超真实射击感锁定今年最值得期待的手游?
  4. 都说乙方卷来卷去,甲方就没有责任了吗?
  5. 刘翔赛前曾接近12秒80 退赛意义大于10个栏架
  6. 基于quartz的定时任务动态启停实现分析(人人平台为例)
  7. 自举电路介绍--IR2101
  8. 大数据学习之路-Zookeeper
  9. 充分发挥测绘基础支撑作用 助力自然资源管理迈上新台阶
  10. 大智慧c语言编程,【图】大智慧外接DLL之C语言编程源码交流帖_数据、教程交流论坛_理想论坛 - 股票论坛...