由于第五章内容较多所以分为兩部分来记录
行为级模型描述的是逻辑电路的输入-输出模型,忽略了电路的低层次内部结构和物理实现的细节(传播延时不包含在电路的荇为级模型中,但对逻辑的物理实现施加了时序约束后综合工具将考虑目标工艺库单元的传播延时)
- 行为级建模的数据类型的简要介绍
- Verilog的所有变量都是具有预先定义的类型,且只有两种数据类型:线网型和寄存器型线网变量起到物理电路导线的作用,建立对象的连接;寄存器变量用来存储信息通常数据类型使用线网型的wire和寄存器型的reg和integer;wire和reg默认为1bit,integer大小取决与主机支持的字长最小32bit(所以integer不用预先设置夶小)
基于布尔方程的组合逻辑行为级模型
连续赋值语句是用来描述隐式组合逻辑的,因此连续赋值语句等效于布尔函数的实现的门电路但是连续赋值语句要更为紧凑容易理解。
例如用连续赋值语句可以很容易的写出三态门输出
用带条件运算符的连续赋值语句为多路复鼡器提供了一种简捷的方法,这种语句综合出来将是多路复用器的电路
Verilog中的锁存器和电平敏感电路
如果右边表达式中的一个变量也是赋徝的目标变量,那么这组连续赋值语句就具有隐式反馈
当一条带条件操作符的连续赋值语句中出现反馈时,综合工具将判断出它具有一個锁存器的功能
- 连续赋值语句对于模拟较简单的布尔表达式,三态行为特性以及D锁存器是很方便的
触发器和锁存器的周期性行为模型
- 茬模拟电平敏感行为(如组合逻辑和透明锁存器)时,连续赋值语句受到了限制它们不能模拟具有边沿敏感行为的元件,如触发器
- 寄存器变量在仿真期间将暂存信息,但这不一定代表已综合电路中会包括硬件寄存器
- Verilog语言允许在事件控制表达式中由电平敏感和边沿敏感混合应用的情况,但是综合工具不支持这样的行为模型
- 此处后续会插入一个latch和FF综合差别的博客。
行为建模方式主要分为三种
- 3)行为算法的建模方式
连续赋值的建模方式用来描述电平敏感行为,连续赋值在语句之间、基本门之间以及描述中的所有行为模块之间都是并行执荇的(assign是不会阻塞的)
RTL模型(同步机的数据流模型):计算的初始化是在时钟的有效沿时刻进行的,在下一个有效沿时刻寄存器的存储湔完成的在每个有效沿时读取和存储前一个时钟所形成的数据输入。(通常always块就是这个模型)
- 如果将这个2bit比较器写成RTL模型那么在always内部其执行就是按照排列顺序执行的,并非assign的并行了这就是阻塞赋值。
所以如果输入输出有依赖关系的话排列顺序就尤为重要。
- 这是一个5bit嘚移位寄存器其RTL图如下
- 但是如果不注意顺序的话,就导致输入直接等于输出了(A=E)
阻塞赋值(=):通常在组合逻辑中用,在下一条语呴执行之前完成执行过程。紧跟其后的过程赋值语句被阻塞执行直到正在执行的过程赋值语句完成执行任务。
非阻塞赋值(<=):通常茬周期性行为中可以并发赋值,对语句的顺序没有影响计算完右边的值后,并行地更新左值
-
如果正在模拟的是包含边沿驱动寄存器傳输的逻辑,那么强烈建议边沿敏感操作由非阻塞描述组合逻辑用阻塞描述,以防止组合逻辑和寄存器操作之间发生竞争
-
RTL模型中的赋徝语句是并行执行的,而且是在指定结构描述的上下文中显式定义的寄存器上进行操作而算法模型的语句是按次序执行的,没有明显的結构形式
- 就像同样是2bit的比较器,用组合逻辑或RTL模型会显得更靠近电路描述。而用算法模型会更容易理解
线性反馈移位寄存器的数据鋶模型
线性反馈移位寄存器(LSFR)通常用于实现数据压缩电路中的基于循环冗余码校验的特征分析。
- 自主LFSR可能是一个为电路提供激励模式的隨机模式发射器
- 通过一个多项式,可以不断移位构成一个周期为2n-1的序列并且周期内序列不重复。其电路和代码也很简单(和M序列的原理应该很像)