Verilog 行为级建模

行为级建模

对于数据流建模的进一步抽象,引入了一些C当中类似的结构控制语句。从而可以在一定算法上实现硬件的构建。

结构化语句

initial和always,它们是行为级建模的两种基本语句。其他所有行为语句只能出现在它们之间。并且和C不一样的是verilog本质是并发而非顺序,即每个执行过程都是从仿真时间0开始,并且这两者不能嵌套(这是针对这两个结构而言是并发!!!,语句之间是不一定的)。

initial

所有在 initial 语旬内的语句构成了一个initial 块-。initial 块从仿真0 时刻开始执行.在整个仿其过程中只执行一次, 如果一个模块中包括若干个 initial 块, 则这些 initial 块从仿真0 时刻开始并发执行,且每个块的执行是各自独立的 如果在块内包含了多条行为语句,那么需要将这此语句组成一组.一般是使用关键字 begin 和 end 。将它们组合为一个块语句; 如果块内只有一条语句, 则不必使用 begin 和 end , 这一点类似千 Pascal 语言中的 begin-end 块或 C 语言中的{ }语句块。
在这里插入图片描述这里涉及到的延时与前面一致。

由于 initial块语句在整个仿真期间只能执行一次。因此它一般被用于**初始化、信号监视 、生成仿真波形(比如可以产生仿真的时钟,但变化是在always语句当中执行)**等目的。
声明时赋初值:在这里插入图片描述端口/数据组合声明初始化:
在这里插入图片描述
或者:在这里插入图片描述

always

always 语句包括的所有行为语句构成了一个always语句块。该always 语句块从仿真0 时刻
顺序执行(但用来非阻塞的话就不一定了吧)其中的行为语句;在最后一条执行完成后,再次开始执行其中的第一条语句,如此 环往复, 直至整个仿真结束。因此always 语句通常用于对数字电路中一组反复执行的活动进建模。例如时钟信号发生器.每半个时钟周期时钟信号翻转一次;,
在这里插入图片描述通过这个例子也需要理解并发的含义。1000(单位与’timescale的设置有关)的延时后结束仿真

过程赋值

过程赋值语句(非连续赋值了)的左侧值 可以是以下类型 :

• reg, 整型数、实戏数,时间寄存器变量或存储器单元。
• 上述各种类型的位选(例如, addr [ 0 ])o
• 上述各种类型的域选(例如, addr[ 31 ; 16 ] )。
• 上面三种类型的拼接。

分为阻塞赋值(=)和非阻塞赋值(<=)。区别就是在串行块中,前者运行完成才会执行后面的赋值,并行块中不会。(begin -end)(并行:fork-join),而非阻塞赋值在串行块中也是并行执行。
在这里插入图片描述不要在alwals中混合使用这两种赋值语句(组合结构一般用阻塞赋值、时序结构(状态跳转)一般用非阻塞赋值(下一个状态的判断))。

应用

描述了非阻塞赋值的行为之后,理解究竟为什么要在硬件设计中使用非阻塞赋值是很重要的。非阻塞赋值可以被用来为常见的硬件电路行为建立模过.例如当某一事件发生后,多个数据 井发传输的行为。在下面这个例子中.当时钟信号的上升沿到来之后,执行三个数据的井发传输:
在这里插入图片描述注意理解这个“旧值”的意思。
可以看到reg l , reg2 和 reg3 的最终值与赋值完成的顺序无关。

在数字电路设计中,如果某事件发生后将产生多个数据的并发传输,我们强烈建议读者使用非阻塞赋值来描述这种情形。如果我们使用阻塞赋值来描述这种情形,由于最终结果依赖于语句 的具体执行顺序,有可能引起竞争风险;而非阻塞赋值语句的执行结果是与执行顺序无关的,因此它能够准确地描述这种情况。非阻塞赋值的典型应用包括流水线建模和多个互斥 ( mutually exclusive ) 数据传输的建模。使用非阻塞赋值所带来的问题是, 它会引起仿真速度的下降以及内存使用量的增加。

时序控制

Verilog 为使用者提供了多种类烈的时序控制方法它 在 Verilog 中, 时序控制起着非常重要作用,它使得设计者可以指定过程赋值发生的时,刻进而控制仿真时间如何向前推进。Verilog
提供了三种时序控制方法: 基于延迟的时序控制、基于事件的时序控制和电平敏感的时序控制。

基于延迟的时序控制

又分为常规延迟控制、赋值内嵌延迟控制、零延迟控制。
在这里插入图片描述
(上升、下降)
在这里插入图片描述
注意区分前面这两者的区别:
在这里插入图片描述零延迟保证该条语句最后开始执行,有效避免了竞争。

基于事件的时序控制

包括:常规事件控制、命名事件控制、OR事件控制、电平敏感时序控制。
1.常规事件控制(知道敏感列表怎么写
事件控制使用符号@来说明。语句继续执行的条件是信号的值发生变化.发生正向跳变和负向跳变。关键字posedge用于指明正向跳变, negedge用于指明负向跳变, 用括号把事件括起来。
在这里插入图片描述2.命名事件控制
event声明
触发该变量 , 并目识别该事件是否已经发生 命名事件由关键字event 声明.它不能保存任何值 串件的触发用符号->表示:判断事件是否发生使用符号@来识别。
在这里插入图片描述事件也需要用括号括起来。
3.OR事件
有时,多个信号或者事件中发生的任意一个变化都能够触发语句或语句块的执行 在 Verilog语言中可以使用”或“表达式来表示这种情况 由关键词 'or" 连接的多个事件名或者信号名组成的列表称为敏感列表在这里插入图片描述or可以由逗号代替。同时Verilog 提供了另外两个特殊的符号: @*和@(*).它们都表示对其后语句块中的所有输入变量的变化是敏感的。
在这里插入图片描述

4.电平敏感时序控制:
在这里插入图片描述
前面我们所讨论的事件控制都需要等待信号值的变化或者事件的住发,使用符号@和后面的 敏感列表来表示。Verilog 同时 也允许使用另外一种形式表示的电平敏感时序控制(即后面的语旬和语句块需要等待某个条件为真才能执行 )。Verilog 语言用关链字 wait 来表示等待电平敏感的条件为真。

条件语句

在这里插入图片描述0或者不确定值都是假。
在这里插入图片描述

多路分支语句

语法:
在这里插入图片描述
记得要加default,否则会产生锁存器。
举例:
在这里插入图片描述
case 语句逐位比较表达式的值和候选项的值, 每一位的值可能是 0 , 1, X 或 z., 如果两者的位宽不相等 , 则使用 0 填补空缺位来使两者的位宽相等 。可以嵌套使用。

casex和casez

除了上面讲述的 case 语句之外, case语句还有两个变形,分 别使用关键字casex 和 casez(这个好像不会完成布局布线和综合)来表示,

• casez 语句将条件表达式或候选项表达式中的 z 作为无关值,所有值为z的位也可以用"?"来代表;
• casex 语句将条件表达式或候选项表达式中的x作为无关值。
casex和casez的使用可以让我们在 case 表达式中只对非x或非z位置进行比较。
在这里插入图片描述这个输入不是针对输入,而是针对给出的case语句。

循环语句

(需要记住是有while循环)Verilog 语言中有四种类型的循环语句: while, for, repeat 和forever。循环只能在always和initial结构中使用(因为属于行为语句)。可以包含延迟表达式。
for 循环使用关键字for 来表示, 它由三个部分组成:
1.初始条件;
2.检查终止条件是否为真;
3. 改变控制变蜇的过程赋值语句。中间用分号隔开
在这里插入图片描述此外,for循环还经常用来对数组或存储器进行初始化。
关键字repeat用来表示这种循环。repeat循环的功能是执行固定次数的循环令它不能像while循环那样根据一个逻辑表达式来确定循环是否继续进u行repeat循环的次数必须是一个常量、一 个变量或者一个信号。如果循环重复次数是变量或者信号,循环次数是循环开始执行时变量或者信号的值,而不是循环执行期间的值。
在这里插入图片描述关键字forever 用来表示永久循环。在永久 循环中不包含任何条件表达式 。只执行无限的循环,直到遇到系统任务$finish 为止, forever 循环等价于条件表达式永远为真的while循环。
如果需要从forever循环中退出,可以使用 disable语句。

在这里插入图片描述通常情况下 forever 循环是和时序控制结构结合使用的。否则仿真时间不会向前推进。

顺序块和并行块

并行块:
在这里插入图片描述

块的特点

在这里插入图片描述

命名块,在begin或者fork后面双引号加名字即可。
在这里插入图片描述
Verilog 通过关键字 disable 提供了一种终止命名块执行的方法 disable可以用来从循环中退出、处理错误条件以及根据控制信号来控制某些代砃段是否被执行 对块语旬的禁用导致紧接扞块后面的那条语句被执行 对于C 程序员来说 , 这一点非常类似于使用 break退出循环。两者的区别在于 b re a k 只能退出 芍前所在的循环,而使用 disable则可以禁用设计中的任意一个命名块。
在这里插入图片描述

生成块(没搞懂)

参考链接

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值