Verilog HDL常用建模方式——《Verilog与数字ASIC设计基础》读书笔记(四)
Verilog HDL的基本功能之一是描述可综合的硬件逻辑电路。所谓综合(Synthesis)是指将Verilog HDL程序、原理图等设计输入翻译成由与门(and)、或门(or)、非门(not)等基本逻辑单元组成的门级连接,并根据设计目标和要求对门级逻辑连接进行优化,得到优化的门级网表文件。
Verilog HDL主要有三种建模方式:
4.1结构级建模
结构级建模包括门级建模和分层建模两种情况。门级建模就是将逻辑电路图用Verilog HDL规定的文本语言表示出来,即调用Verilog HDL中内置的基本门级元件(Gate Level Primitives,门级源语)描述逻辑图中的元件以及元件之间的连接关系。分层次就是将一个数字系统划分为多个组成模块,再分别对每个模块建模,然后将这些模块组合成一个总模块,完成所需的功能。
Verilog HDL中内置了12个基本门级元件模型,门级元件的输出、输入必须为网类型的变量。当使用这些元件逻辑仿真时,仿真软件会根据程序描述给每个元件中变量分配逻辑0,逻辑1,不确定态x和高阻态z这4个值之一。
这些门可分为:多输入门,多输出门,三态门。
4.2数据流建模
对于基本单元逻辑电路,使用Verilog HDL提供的门级元件模型描述电路非常方便,但随着电路复杂性的增加,当使用的逻辑门较多时,使用Verilog HDL门级描述的工作效率就很低。数据流建模的抽象级别介于门级和行为级之间,它是行为级建模的一种形式,组合电路的逻辑行为最好使用数据流建模方式。
数据建模使用的基本语句是连续赋值语句,连续赋值语句用于对wire型变量进行赋值,它由关键词assign开始,后面跟着操作数和运算符组成的逻辑表达式。
例如:
wire a,b,sel,out; //declare four wires variables
assign out = (a& (~b)) | (b & sel); //a continuous assignment
连续赋值语句的执行过程是:只要逻辑表达式右边变量的逻辑值发生变化,则等式右边表达式的值会立即被计算出来并赋给左边的变量。注意:在assign语句中,左边变量的数据类型必须是wire型。
4.3行为级建模
行为级建模就是以抽象的形式描述数字逻辑电路的功能和算法,在Verilog HDL 中,行为级建模主要使用由关键词initial或always定义的两种结构类型的描述语句。一个模块内部可以包含多个initial或always语句,仿真时这些语句同时执行,即与它们在模块内部排列的顺序无关,仿真都从0时刻开始执行。initial语句主要是一条面向仿真的过程语句,不能用来描述硬件电路的功能。
在always结构型语句内部有一系列过程赋值语句,用来描述电路的行为(功能)。过程性赋值语句包括在结构型的语句内部使用的逻辑表达式、条件语句(if-else)、多路分支语句(case-endcase)和循环语句等。
顺序语句块就是由块标识符begin...end保卫界定的一组行为描述语句,其作用是:相当于给块中的这组行为描述语句进行打包处理,使之在形式上与一条语句一致。在这个模块内部的各条语句按照书写的先后顺序依次执行。在Verilog HDL中,可以给每个语句块取一个名字,方法是:在关键词begin后面加上一个冒号,之后给出名字即可。取了名字的块被称为有名块。