第八章VHDL硬件语言
第一节VHDL语言—绪论
VHDL是非常高速集成电路硬件描述语言(Very High speed Integrated Circuit Hardware Description Language)的英文缩写。
语法和风格:
(1)类似与现代高级编程语言,如C语言。
(2)VHDL描述的是硬件,它包含许多硬件特有的结构。
VHDL
以ADA语言为基础,由美国国防高级研究计划局(DARPA)开发。1985年完成第一版,1987年成为IEEE标准(IEEE1076),1993年增修为IEEE1164标准并使用至今。1996年又加入电路合成标准程序和规格,成为IEEE1076.3标准。美国国防部规定其为官方ASIC设计语言。
Verilog HDL
以C语言为基础,由GDA(Gateway Design Automation)公司的Phil Moorby创建于1983年。1989年CADENCE公司收购了GDA公司,拥有了Verilog HDL的独家专利。于1990年正式发表了Verilog HDL,并成立OVI(Open Verilog International)组织推进其发展。1995年CADENCE公司放弃了Verilog HDL专利,使之成为IEEE标准(IEEE1364)。
VHDL与电路图设计电路的方式不同,和电路图设计方式相比:
(1)易于修改;
(2)设计能力更强;
(3)VHDL语言便于共享:独立于器件设计;相同的程序代码可以用于不同厂家生产的器件。
自顶向下的设计方法
数字电路的EDA设计是基于PLD进行设计的,支持自顶向下的设计方法:
(1)首先从系统设计入手,在顶层进行功能划分和结构设计;
(2)然后再逐级设计底层的结构;
(3)并在系统级采用仿真手段验证设计的正确性;
(4)最后完成整个系统的设计,实现从设计、仿真、测试一体化。
自顶向下设计方法的优越性
顶层的功能描述可以完全独立于目标器件的结构
在选择实现系统的目标器件的类型、规模、硬件结构等方面具有更大的自由度。
很方便实现多人多任务的并行工作方式,使系统的设计规模和效率大幅度提高。
自顶向下的设计方法使系统被分解为各个模块的集合之后,可以对设计的每个独立模块指派不同的工作小组,这些小组可以工作在不同的地点,甚至可以分属不同的单位,最后将不同的模块集成为最终的系统模型,并对其进行综合测试和评价
第二节VHDL语言的基本结构
一个完整的VHDL程序,或者说设计实体,通常要求最低能为VHDL综合器所支持,并能作为一个独立的设计单元,即元件的形式而存在的VHDL程序。在VHDL程序中,通常包含有五个部份:
1、实体(ENTITY);
2、结构体(ARCHITECTURE);
3、配置(CONFIGURATION);
4、包集合(PACKAGE);
5、库(LIBRARY)。
其中实体和结构体这两个基本结构是必需的,他们可以构成最简单的VHDL程序。
8.2.1 VHDL语言的实体语句
设计实体是VHDL语言设计的基本单元,简单的可以是一个与门,复杂的可以是一个微处理器或一个数字系统,其结构基本是一致的,都是由实体说明和结构体两部分组成。实体说明是对这个设计实体与外部电路进行接口的描述,它规定了设计单元的输入输出接口信号或引脚,是设计实体对外的一个信号接口界面;结构体用于描述此设计实体的逻辑结构和逻辑功能。
例:ENTITY and2IS PORT (a ,b :IN STD_LOGIC;C: OUT STD_LOGIC );END and2;
实体语句结构如下:
ENTITY 实体名IS
[GENERIC (类属表);]
[PORT (端口表);]
END 实体名;注意:实体应以语句“ENTITY 实体名
IS ”开始,语句
“END 实体名;”结束。在层次化系统设计中,实体说明是整个模块或整个系统的输入输出(I/O )接口;在一个器件级的设计中,实体说明是一个芯片的输入输出(I/O )。
Entity实体名is
Port( a:in bit;
;
例如:Entity AND_2 is
Port( a:in bit;
b:in bit;
c:out bit);
End AND_2;
一、类属参量(GENERIC)
类属参量是实体说明组织中的可选项,放在端口说明之前,其一般格式为:
GENERIC [CONSTANT] 名字表:[IN] 子类型标识[:= 静态表达式],…]
类属参量是一种端口界面常数,常用来规定端口的大小、实体中子元件的数目及实体的定时特性等。它和常数不同,常数只能从设计实体的内部得到赋值且不能改变,而类属参量的值可由设计实体的外部提供。因此设计者可以从外面通过类属参量的重新设定而容易的改变一个设计实体或一个元件的内部电路结构和规模。
例:
GENERIC (trise: TIME:=1ns; tfall: TIME:=1ns;
Addrwidth: INTEGER:=16);
PORT(a0, a1 : IN STD_LOGIC;
Add_bus: OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0);
这里类属参量中参数trise为上升沿宽度,tfall为下降沿宽度,这里都设置为1ns,用于仿真模块的设计;定义地址
总线的宽度为Addrwidth位,类属值Addrwidth的改变将使
结构体中所有相关的总线定义同时改变,由此使整个设计实体的硬件结构发生变化。
二、端口说明(PORT)
端口为设计实体和其外部环境提供动态通信的通道,是对基本设计单元与外部接口的描述,其功能相当电路图符号的外部引脚。端口可以被赋值,也可以当做逻辑变量用在逻辑表达式中。
其一般书写格式为:
PORT(端口名:端口模式数据类型;
端口名:端口模式数据类型;
……);
其中端口名是设计者为实体的每一个对外通道所取的名字,可以根据设计者的需要确定端口名,通常以便于记忆端口功能定名,如clk 表示时钟,D开头的端口名表示数据,A开头的端口名表示地址。端口模式是指这些通道上的数据流动的方式,如输入或输出等。
端口模式有以下几种类型:
1.输入(IN)
允许信号进入实体,主要用于时钟输入、控制输入(如load、reset、enable、clk)和单向的数据输入(如地址数据信号address)等。
2.输出(OUT)
输出模式只允许信号离开实体,常用于计数输出、单向数据输出、被设计实体产生的控制其他实体的信号等。注意:输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看做是可读的。
3.双向模式(INOUT)
双向模式允许信号双向传输(既可以进入实体,也可以离开实体),双向模式端口允许引入内部反馈。
4.缓冲(BUFFER)
缓冲模式允许信号输出到实体外部,但同时也可以在实体内部引用该端口的信号。缓冲端口既能用于输出也能用于反馈。缓冲模式用于在实体内部建立一个可读的输出端口,例如计数器输出、计数器的现态用来决定计数器的次态。
端口模式可用图下说明,园框代表一个设计实体或模块。
IN
OUT
INOUT
BUFFER
OUT 、INOUT 与BUFFER 的区别
:
在VHDL设计中,通常将输入信号端口指定为输入模式,输出信号端口指定为输出模式,而双向数据通信信号,如计算机PCI总线的地址/数据复用总线,DMA控制器数据总线等纯双向的信号采用双向端口模式。从端口的名称、模式就能一目了然地指导信号的用途、性质、来源和去向。
8.2.2 VHDL语言的结构体语句
结构体也叫构造体,结构体描述了基本设计单元(实体)的结构、行为、元件及内部连接关系,也就是说它定义了设计实体的功能,规定了设计实体的数据流程,制定了实体内部元件的连接关系。结构体对其基本设计单元的输入和输出关系可用以下三种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输(RTL)描述(数据流描述)和结构描述(逻辑元件连接描述)。
结构体是对实体功能的具体描述,因此它一定要跟在实体的后面。
硬件描述语言实验附录 姓名:xxx 学号:xxx 指导教师:xxx 目录 硬件描述语言实验附录 (1) 实验1.三输入与门电路实验 (2) 实验2. 三—八译码器实验 (3) 实验3. D触发器实验 (4) 实验4. 分频器实验 (5) 实验5. 状态机实验 (8)
实验1.三输入与门电路实验 --三输入与门电路threeinput --姓名:王定 --学号:1306034248 --中北大学 LIBRARY IEEE; --调用库 USE IEEE.STD_LOGIC_1164.ALL;--库文件 -------------------------------------------------------------- ENTITY threeinput IS --定义实体名,其名称必须与VHDL文本文件名称相同PORT( A: IN STD_LOGIC; --输入端口,时钟输入 B: IN STD_LOGIC; --输入端口,个位写入使能 C: IN STD_LOGIC; --输入端口,十位写入使能 CO: OUT STD_LOGIC); --输出端口,溢出标志 END ENTITY threeinput; --结束端口定义 -------------------------------------------------------------- ARCHITECTURE RTL OF threeinput IS--定义结构体 BEGIN PROCESS(A,B,C) IS --开始,必须带上 BEGIN CO<=A AND B AND C ; END PROCESS; END ARCHITECTURE RTL; --结束结构体 表1. 三输入与门电路VHDL实验代码 图1. 三输入与门电路仿真波形图,A,B,C输入,CO输出
VHDL大总结 一、填空题 1.两种标识符 短、扩展 2.4种基本数据类型 常量、变量、信号、文件 3.常量说明格式 constant 常数名: 数据类型:=表达式; 4.三种数据变换方法? 函数转换、常数转换、类型标记 5.四种运算操作符? 逻辑、关系、算术、并置 6.如何启动进程? (1).必须包含一个显示的敏感信号变量 (2).或者包含一个wait语句 7.五种基本结构? 库(library)、包集合(package)、实体(entity)、结构体(architecture)、配置(configuration) 8.信号与变量代入? (1).<= (2).:= 9.列举可编程逻辑器件? PROM→PLA→PAL→CPLD→FPGA→EPROM→EEPROM→GAL 10.数据类型 整数、位、位矢量、符号、布尔量、时间、错误等级、标准逻辑 11.四种端口模式? IN—OUT—INOUT—BUFFER 12.三种子结构描述语句?BLOCK—PROCESS—SUBPROGRAMS
13.结构体三种描述方式 寄存器传输(RTL)--数据流、结构描述、行为描述14.标识符规则? (1).不以数字靠头 (2).下划线不连续 (3).不与保留字重复 (4).下划线前后必须有英文字母或者数字 (5).最后一个不能使用下划线(连字符) 15.扩展标识符 \12@+\ 16.赋值? (1).信号、变量可以多次赋值 (2).常量只能定义时赋值(进程内部,子函数内部)17.高阻、不定态? 'Z'------------'X' 18.进程位置? 结构体内部 19.变量位置? 进程内部---包内部----子程序内部 20.进程执行机制? 敏感信号发生跳变 21.优先级? if语句之间具有不同优先级 22.时序电路的去驱动信号? 时钟 23.时序电路在何时发生变化? 时钟信号的边沿 24.两种状态机? (1).moore-----f(现状) (2).mealy-----f(现状,输入)