首页 > 其他分享 >Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别

时间:2023-06-05 21:03:35浏览次数:28  
标签:语句 sel 阻塞 b1 Verilog 执行 tb 赋值


顺序块:顺序块中的语句执行都是从上到下顺序执行,和C语言执行过程一样,关键词是begin、end。

initial begin//顺序块关键字
	tb_sel = 1'b0;
	#5 tb_in1 = 1'b1;//时刻5执行
	#10 tb_in2 = 1'b1;//时刻15执行
	#20 tb_sel = 1'b1;//时刻35执行
end

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_fpga

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_fpga_02

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_fpga_03编辑

 上图为顺序块仿真时序图,可以看到,信号tb_in1在5ns时发生跳变,tb_in2的赋值在上一语句tb_in1执行完后延迟10ns后才发生跳变。同样的,信号tb_sel在延迟35ns后跳变。

并行块:并行块中的语句执行是同时进行,执行时间仅取决于当前语句的延迟,关键词是fork、join。

initial fork//并行块关键字
	tb_sel = 1'b0;
	#5 tb_in1 = 1'b1;//时刻5执行
	#10 tb_in2 = 1'b1;//时刻10执行
	#20 tb_sel = 1'b1;//时刻15执行
join

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_fpga_04

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_Verilog_05

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_fpga_06编辑

 可以看到并行块中的语句在仿真开始时同时执行,每条语句的赋值时间仅取决于当前语句的延迟。

阻塞过程赋值:下调语句执行前,当前语句必须执行完成,赋值符号“=”。

initial begin//顺序块关键字
	tb_sel = 1'b0;
	#5 tb_in1 = 1'b1;//时刻5执行
	#10 tb_in2 = 1'b1;//时刻15执行
	#20 tb_sel = 1'b1;//时刻35执行
end

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_Verilog_07

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_fpga_08

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_Verilog_09编辑

非阻塞过程赋值:非阻塞语句在执行时,计算右侧的值,然后在预定时间将右侧的值赋值给左值,它在计算出右值后不会阻塞下一条语句的执行,赋值符号“<=”。

initial begin//顺序块关键字
	tb_sel <= #5 1'b0;
	tb_in1 <= #5 1'b1;
	tb_in2 = #10 1'b1;
	tb_sel <= #20 1'b1;
end

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_fpga_10

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_fpga_11

Verilog 顺序块、并行块,阻塞过程赋值、非阻塞过程赋值的区别_Verilog_12编辑

上图的程序执行过程为:仿真开始时,仿真器读取第一条语句的右值并保存,然后继续往下执行读取第二条语句的右值,保存后继续向下执行第三条语句,与上两条语句不同的是,第三条语句读取后不会向下继续执行,而是要延迟10ns将右值赋值给左值后才继续执行第四条语句,要注意的是,第一和第二条语句的右值会在第5ns时将右值赋值给左值,第四条语句先读取右值,延迟20ns后赋值给左值,此时仿真器运行到第30ns。


标签:语句,sel,阻塞,b1,Verilog,执行,tb,赋值
From: https://blog.51cto.com/u_16151585/6418553

相关文章

  • 解构赋值语法
    概述解构赋值语法(destructuringassignment)是ECMAScript6(ES6)引入的新特性,允许我们从数组或对象中提取值并将其赋值给变量。它可以简化代码,并提供了一种方便的方式来访问和使用复杂数据结构的值。解构赋值的语法有两种形式:数组解构和对象解构。示例数组解构const[a,b,c]......
  • 阻塞IO、非阻塞IO、IO复用
    前言在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、IO复用、信号驱动IO以及异步IO。本篇文章主要介绍IO的基本概念以及阻塞IO、非阻塞IO、IO复用三种模型,供大家参考学习。一、什么是IO计算机视角理解IO:对于计算机而言,任何涉及到计算机核心(CPU和内存)与其......
  • C++ 初始化赋值
    把值写在小括号中,等于号可以省略(C++标准)inta=(15);intb(20);把值写在花括号中,等于号也可以省略(C++11标准),统一初始化列表注意:在Linux平台下,编译需要加-std=c++11参数inta={15};inta{15};......
  • [转]C#阻塞队列BlockingCollection
    BlockingCollection是一个比较冷门的类,我们先看下官方对这个类的定义:简单来说,BlockingCollection就是一个线程安全的阻塞队列,利用阻塞这个特性,我们可以实现进程内的生产者-消费者模式,比如消息转发、日志记录等。下面我们看一个例子,其用来实现消息转发,先定义一个MessageDis......
  • 氚云前端代码对控件赋值
    一、先说表单子表,进行自动排序   varparent=this;//先将对象也就是子表,进行绑定改变事件this.D000685F044da22ee9b54a669386935b72c2b7a0.BindChange("Set",function(data){debugger;//vari=1;debugger......
  • 《asyncio 系列》3. 详解 Socket(阻塞、非阻塞),以及和 asyncio 的搭配
    楔子在前面两篇文章中,我们介绍了协程、任务和事件循环,研究了如何同时运行长耗时的操作,并探索了一些可以优化此操作的asyncioAPI。然而,到目前为止,我们只是用asyncio.sleep函数模拟了长时间的操作。由于我们想要构建的不仅是演示应用程序,因此我们将使用一些真实世界的阻塞操作......
  • 每天都有一点新发现:Questa的Verilog仿真
        在自己的电脑里安装了QuestaIntelStarter和ModelSimStarter版本,因为不熟悉Questa,但是搜索了一下,发现它和ModelSim几乎是完全一样的。准备后续尽可能多的练习Questa的使用。    在Verilog里很多教材都会提供代码和生成的电路,今早用Questa试了一下生成的电路,......
  • KiCAD加Quartus Prime的Verilog编程练习
         在淘宝买了大西瓜的FPGA开发板,准备结合实物理解一下FPGA代码。为什么选择大西瓜呢,因为便宜。虽然闲鱼可能有更便宜的开发板,但我没有闲鱼的账号。     数码管部分的电路是这样的:   这对于强迫症来说,有点不太友好,正好因为不用说都知道的原因,需要练......
  • m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
    1.算法仿真效果matlab2022a/vivado2019.2仿真结果如下:matlab仿真:0.5码率,H是4608×9216的矩阵。FPGA仿真:对比如下:2.算法涉及理论知识概要LDPC译码分为硬判决译码和软判决译码。硬判决译码又称代数译码,主要代表是比特翻转(BF)译码算法,它的实现比较简单,但是译码性能很差......
  • m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
    1.算法仿真效果matlab2022a/vivado2019.2仿真结果如下: matlab仿真: 0.5码率,H是4608×9216的矩阵。   FPGA仿真:    对比如下:   2.算法涉及理论知识概要         LDPC译码分为硬判决译码和软判决译码。         硬判决译码又称......