赞
踩
HDL类似于高级程序设计语言,是一-种以文本形式来描述数字系统硬件电路的结构和行为的语言,用它可以表示逻辑电路、逻辑表达式,还可以表示更复杂的数字逻辑系统所完成的逻辑功能。
目前,广泛流行的有两种硬件描述语言: VHDL和Verilog HDL(简称Verilog)。VHDL是在20世纪80年代中期由美国国防部支持开发出来的;约在同- -时期, Gateway DesignAutomation[3]公司开发出了Verilog HDL。两种HDL均为IEEE标准。
HDL主要用于对数字逻辑电路建模及其对模型进行模拟(仿真)分析,设计者可以使用HDL描述自己的设计,然后利用EDA工具进行逻辑综合和仿真,最后变为某种目标文件,用ASIC或FPGA具体实现。基于HDL开发PLD的流程如图所示:
逻辑仿真是指用计算机仿真软件对数字逻辑电路的结构和行为进行预测。在电路被实现之前,根据仿真结果可以初步判断电路的逻辑功能是否正确。在仿真期间,如果发现设计中存在的错误,可以对HDL描述进行修改,直至满足设计要求为止。
所谓“逻辑综合”是指从HDL描述的数字逻辑电路模型中导出电路基本元器件列表以及元器件之间的连接关系(常称为门级网表)的过程。
在Verilog HDL中使用了大约100 个预定义的关键词定义该语言的结构。Verilog HDL使用一个或多个模块对数字电路建模,一个模块可以包括整个设计模型或者设计模型的- -部分。模块的定义总是以关键词module开始,以关键词endmodule来结尾。模块定义的一般语法结构如下:
接着,要对该模块完成的逻辑功能进行描述,通常可以使用三种不同方法来描述电路的功能:
一是使用实例化低层次模块的方法,即调用其他已定义好的低层次模块对整个电路的功能进行描述,或者直接调用Verilog HDL内部基本门级元器件描述电路的结构(也称为门级描述),通常将这种方法称为结构描述方式;
二是使用连续赋值语句(assign)对电路的逻辑功能进行描述,通常称为数据流描述方式,对组合逻辑电路建模使用该方式特别方便;
三是使用过程块语句结构(包括initial语句结构和always语句结构两种)和比较抽象的高级程序语句对电路的逻辑功能进行描述,通常称为行为描述方式。行为描述侧重于描述模块的逻辑行为(功能),不涉及实现该模块逻辑功能的详细硬件电路结构。行为描述方式是学习的重点,设计人员可以选用这三种方式中的任意一种或混合使用几种方式描述电路的逻辑功能,并且在程序中排列的先后顺序是任意的。
除此之外,还有一种开关级描述方式,专门mos管构成的逻辑电路进行建模。
表示了数字逻辑电路的逻辑状态:0、1、x、z。
逻辑状态 | 含义 |
---|---|
0 | 逻辑0,假逻辑 |
1 | 逻辑1,真逻辑 |
x | 不确定的值(未知状态) |
z | 高阻态 |
程序运行中数值不变的部分叫做常量,verilog中的常量有两种:实数型与整数型常量。
整数型常量有两种表示方法:
size:表示数字的长度;
base format: 表示数字的后面数字的进制,如下所示:
项目 | Value |
---|---|
b | 二进制 |
o | 八进制 |
d | 十进制 |
h | 十六进制 |
number:表示具体的数值。
几点注意:
实数型常数的表示方式:
0.1、2.0、5.67
程序运行过程中可以改变的值成为变量,一般有两类:线网类型与寄存器类型。
线网类型(net type)是硬件电路中元件之间世纪连线的抽象,当线网类型被定义以后,如果驱动型好没有实际的电路信号的输入,线网的输出为高组态,定义格式如下:
wire[m-1:0] 变量1,变量2,变量3,…;
寄存器类型(register type)表示一个抽象的数据存储单元,他具有保持状态的作用。寄存器类型的变量只能在initial与always内部被赋值。寄存器变量在没有被赋值以前,他的默认值时x。
寄存器类型 | 功能说明 |
---|---|
reg | 用于行为描述中对寄存器变量的说明 |
integer | 32位带符号的整型变量 |
real | 64位带符号的实属ll.ll,型变量 |
time | 64位无符号的时间型变量 |
定义格式:
reg [m-1:0] 变量名1,变量名2,变量名3, …;
其余三种类型都不具备实际的硬件电路。
这里的描述仅仅用于仿真实现,如果要综合实现存储器,还需要调用厂家提供的存储器宏单元实现存储器。
数字电路仿真中,常常需要对rom、ram建模,verilog常常会将存储器看作一组寄存器阵列构成的单元,阵列中的每一个元素称为一个字,每个字可以是以为或者多位,定义结构如下:
reg[msb:lsb] memory1[upper1,lower1],memory2[upper2,lower2],…;
思考:wire与reg定义的wire变量类型有什么不同?
常用符号如下:
位拼接如下所示:
门级描述如下:
moudle _2tomux(a, b, sel, out);
input a, b, sel;
output out;
tir out;
bufif1(out, b, sel);
bufif0(out, a, sel);
endmoudle
practice:
module circuit(A, B, L);
input A, B;
output L;
and(a1, A,B);
and(a2, Anot, Bnot);
not(Anot,A);
not(Bnot,B);
and(L,a1,a2);
endmodule
该程序的的门及电路结构如下所示:
对于简单的电路:使用门级电路描述十分方便,但是对于复杂电路可以采用较高级别的电路逻辑功能的建模方式——数据流模式与行为级模式。
实际上,数据流是介于门级与行为级的一种建模方式。
主要使用连续赋值语句对wire型变量赋值。
用法如下:
注意在assign语句中等式右边使用的变量必须是wire类型的。
always结构说明语句
顺序语句块
条件语句
多路分支语句
循环语句
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。