FPGA必备基础7:verilog的6种延迟操作

目录

(1)定义

(2)延迟种类

2.1 连续赋值

2.1.1 正规延迟

2.1.2 内定延迟

2.2 阻塞赋值

2.2.1 正规延迟

2.2.2 内定延迟

2.3 非阻塞赋值

2.3.1 正规延迟

2.3.2 内定延迟


(1)定义

顾名思义,就是FPGA语句的延迟问题。在这里,有三种赋值方式:连续赋值、阻塞赋值、非阻塞赋值;有两种延迟方式:正规延迟、内定延迟。两者相乘则共有6种方式延迟。

(2)延迟种类

2.1 连续赋值

2.1.1 正规延迟

1)代码

assign #5 C = A +B。

2)波形图

在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值赋给 C,5个时刻后C的值是T+5 时刻 A、B 的值。

注意,若在等待过程中 A、 B 的值发生变化再次触发 assign 块,根据 assign块的门级时序模型特点,仿真器会撤销先前的等待事件,然后重新执行语句。但当变化脉冲小于 5 个时间单位时,等待事件会被撤销,该脉冲将不起作用。(这里的图使用的是别的博主的图,侵权删)

2.1.2 内定延迟

1)代码

assign C = #5 A +B。

2)波形图

在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C。使用的 A 、B 的值是 T 时刻的值。

若在等待过程中 A 、B 的值发生变化再次触发 assign块,根据 assign块的门级时序模型特点,仿真器会撤销先前的等待事件,然后重新执行语句。

但当变化脉冲小于 5 个时间单位时,等待事件会被撤销,该脉冲将不起作用。该种方式有记忆属性,与连续赋值原则不符,为非法语句,编译不能通过。

2.2 阻塞赋值

2.2.1 正规延迟

1)代码

always @(*) #5 C = A +B;

2)波形图

在 T 时刻执行到该语句时,等待5个时间单位,然后计算等号右边的值阻塞赋给 C。使用的 A B 的值是 T+5 时刻的值。

注意,若在等待过程中 A 、B 的值发生变化再次触发 always 块,根据 always块的过程时序模型特点,此时还在等待过程,always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。仿真器会忽略延迟时间段的数据变化。(这里的图使用的是别的博主的图,侵权删)

2.2.2 内定延迟

1)代码

always @(*) C = #5 A +B;

2)波形图

在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C。使用的 A、 B 的值是 T 时刻的值。

若在等待过程中 A、B 的值发生变化再次触发 always块,根据 always块的过程时序模型特点,由于赋值方式为阻塞赋值,此时 always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。仿真器忽略延迟时间段的数据变化。(这里的图使用的是别的博主的图,侵权删)

2.3 非阻塞赋值

2.3.1 正规延迟

1)代码

always @(*) #5 C <= A +B;

2)波形图

在 T 时刻执行到该语句时,等待 5 个时间单位,然后计算等号右边的值阻塞赋给 C。使用的 A、B 的值是 T+5 时刻的值。

若在等待过程中 A B 的值发生变化再次触发 always块,根据 always块的过程时序模型特点,此时还在等待过程,always 语句还未执行结束,不会开始新一轮的事件,仿真器不会对敏感列表反应。仿真器忽略延迟时间段的数据变化。(这里的图使用的是别的博主的图,侵权删)

2.3.2 内定延迟

1)代码

always @(*) C <= #5 A +B;

2)波形图

在 T 时刻执行到该语句时,计算等号右边的值,等待 5 个时间单位后赋给 C。使用的 A、B 的值是 T 时刻的值。

若在等待过程中 A B 的值发生变化再次触发 always块,根据 always块的过程时序模型特点,由于赋值方式为非阻塞赋值,将赋值事件放进事件队列后,always 语句执行结束,等待下一次的触发,触发来到时开始新一轮的事件。同时,仿真器接受延迟时间段的数据变化,输入的变化延迟会全部反应在输出上。(这里的图使用的是别的博主的图,侵权删)

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: FPGA是一可编程逻辑器件,可以通过编程实现各功能。而Verilog是一硬件描述语言,用于描述FPGA的电路。Verilog基础语法包括模块定义、端口定义、信号定义、赋值语句、条件语句、循环语句等。模块定义是Verilog最基本的语法,用于定义一个电路模块。端口定义用于定义模块的输入输出端口。信号定义用于定义模块内部的信号。赋值语句用于给信号赋值。条件语句用于根据条件执行不同的代码。循环语句用于重复执行一段代码。掌握Verilog基础语法是学习FPGA编程的基础。 ### 回答2: FPGA是一可编程逻辑器件,它可以通过硬件描述语言来编写自定义的逻辑电路来实现各功能。其Verilog是一常用的硬件描述语言,有助于实现FPGA的功能。 Verilog语言主要由模块、端口、信号、语句和运算符五个基本部分组成。模块是Verilog的最基本的语法单元,类似于传统程序语言的函数,模块之间可以通过实例化进行连接。端口则是与外部世界进行通信的接口,可以分为输入端口(input)和输出端口(output)两类型。信号是Verilog表示数字信号的基本单元,可以是位向量、整数或实数。语句则是Verilog描述操作和行为的语言,常用的语句包括赋值语句、分支语句和循环语句。运算符则是Verilog用于进行操作的符号,包括算数运算符、逻辑运算符和位运算符。 在Verilog语言,还有一些常用的结构体和命令可以帮助我们更方便地实现FPGA的功能。其,常用的结构体包括always语句、case语句和module归档,常用的命令包括initial语句、wire语句和reg语句。always语句可以在指定的触发条件下执行某一段代码,case语句可以根据不同的条件执行不同的代码段,module归档则可以将多个模块合并为一个模块。initial语句可用于在仿真开始前初始化某些信号,wire语句则用于声明并连接信号,reg语句则用于声明并存储信号。 总体而言,了解FPGAVerilog基础语法可以帮助我们更好地理解FPGA技术的应用和实现。然而,理论知识只有结合实际操作和实验才能更好地掌握。所以,我们还需要结合实际项目来进行练习和实践,从而更好地掌握FPGAVerilog基础语法。 ### 回答3: FPGA(可编程门阵列)是一可编程逻辑器件,可以用来创建定制的数字电路。Verilog是一硬件描述语言,用于描述数字电路的结构和行为。 Verilog基础语法有以下几个部分: 1.模块定义:Verilog代码以模块的形式进行组织,每个模块都有一个名称和端口列表。模块定义以module关键字开始,以endmodule关键字结束。 2.端口声明:模块的端口是输入和输出连接到其他模块或FPGA芯片的引脚。端口可以是输入(input)、输出(output)或双向(inout)。端口声明在模块定义。 3.信号声明:信号是描述数字电路状态的变量。可以是单个位(wire)或多位(reg),在模块声明。 4.赋值语句:用来为信号赋值,包括非阻塞赋值(<=)、阻塞赋值(=)和连续赋值(assign)。 5.条件分支语句:if, else if和else语句是用来控制程序流程,实现条件判断。 6.循环语句:Verilog支持for、while、do while和forever等类型的循环语句,可以在程序实现迭代操作。 7.模块实例化:用来将其他模块作为子模块嵌入到当前模块,从而实现复杂的数字电路。 除上述基本语法外,Verilog还有其他常用语法,如always块、initial块和function定义等。需要深入了解和使用Verilog,可以参考相关资料和教程。掌握了Verilog语法,可以使用FPGA搭建各个性化的数字电路,用于嵌入式系统、数字信号处理、计算机网络等各应用领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值