文章目录
- 在电路设计过程中,Verilog HDL有三种程序设计方式:数据流建模,行为级建模,结构化建模
- 结构化建模就是搭电路,连线这个过程,在硬件描述语言成为模块的调用过程
- 数据流建模是硬件描述语言非常重要的一种建模方式
- 行为级建模只会在很局部的时候用到
1. 数据流建模
1.1 连续赋值语句
- 连续赋值语句只能用来对连线型变量进行驱动,而不能对寄存器型变量进行赋值
- 它可以采取显式连续赋值语句和隐式连续赋值语句两种赋值方式
- 在组合电路的描述方式中,一种方式是写出真值表,化出最简逻辑表达式然后用结构进行描述。这个的唯一区别是最后用的是运算符来表达最小项表达式
- 显式连续赋值语句
(就是信号定义和assign分成两条语句)
- 隐式连续赋值语句
- 显示连续赋值举例:
- 隐式连续赋值举例:
- !!!连续赋值语句是数字电路中要求掌握非常强的一个东西,对数字电路的基本构成和概念要非常清楚,这样就可以用最小的电路取得这样的效果
- !!!需要注意
(1)赋值目标只能是线网类型(wire)
(2)在连续赋值中,只要赋值语句右边表达式任何一个变量有变化,表达式立即被计算,计算的结果立即给左边信号(若没有定义延迟量)(连续赋值语句是对组合电路的一个基本的描述,在组合电路中输入发生变化,输出也会随之变化)
(3)连续赋值语句不能出现在过程块中(initial,always)
(4)多个连续赋值语句之间是并行语句,因此与位置顺序无关
(5)连续赋值语句中的延时具有硬件电路中惯性延时的特性,任何小于其延时的信号变化脉冲都将被滤除掉,不会体现在输出端口上(器件延迟做的非常小的时候,这时候传统电路的毛刺就有可能会带到输出端。整个电路代表的是电容特性,如果延迟很大,电容就很大,毛刺就被滤掉了,不会对输出电流有影响。但是延迟非常小的话,这个毛刺就会穿过到达输出端。对于连续赋值语句,它可以由#定义延迟。惯性延迟就是干扰信号能允许的一个工作频率范围,惯性延迟小于干扰,干扰就会起作用)
2. 行为级建模
-
硬件描述语言对于电路设计的语句主要就在行为级建模
-
行为级建模归结起来只有三条语句:赋值,条件,循环(循环语句不作为行为级建模的主要描述语句)
-
对于可综合来讲就是什么样的语句能够形成电路,什么样的语句不能形成电路
-
连续赋值赋值语句能够形成电路,这是没有问题的,牵扯的都是最基本的元器件和语法单元,不会有问题。这样来讲的话,出问题出的最多的就在行为级建模上面
2.1 过程语句
- Verilog HDL中过程块是由过程语句所组成的。过程语句有两种,分别是initial过程语句和always过程语句。
-
initial过程语句
(1)initial语句主要用在仿真和测试
(2)initial在可综合语句中起到什么作用:初始化。!!电路的初始化是靠复位信号完成的,所以initial语句没有太大用。在语法严格的VHDL里面,它是没有initial语句的,它的全局复位就是用复位信号。在代码中,有人信号把刚上电的置位信号全放在initial里面,这样是非常危险的,如果程序跑掉必须断电重来,如果用的复位信号做的初始化只需要复位重来就行了 -
always过程语句
- 敏感时间列表可以没有
- always 过程语句的触发状态是一直存在的,只要满足 always 后面的敏感事件列表,就执行语句块
- 两个问题: