文档库 最新最全的文档下载
当前位置:文档库 › vhdl语言基础

vhdl语言基础

第1章VHDL语言基础

1.1 概述

硬件描述语言(hardware description language,HDL)是电子系统硬件行为描述、结构描述、数据流描述的语言。目前,利用硬件描述语言可以进行数字电子系统的设计。随着研究的深入,利用硬件描述语言进行模拟电子系统设计或混合电子系统设计也正在探索中。

国外硬件描述语言种类很多,有的从Pascal发展而来,也有一些从C语言发展而来。有些HDL成为IEEE标准,但大部分是企业标准。VHDL来源于美国军方,其他的硬件描述语言则多来源于民间公司。可谓百家争鸣,百花齐放。这些不同的语言传播到国内,同样也引起了不同的影响。在我国比较有影响的有两种硬件描述语言:VHDL语言和Verilog HDL语言。这两种语言已成为IEEE标准语言。

电子设计自动化(electronic design automation,EDA)技术的理论基础、设计工具、设计器件应是这样的关系:设计师用硬件描述语言HDL描绘出硬件的结构或硬件的行为,再用设计工具将这些描述综合映射成与半导体工艺有关的硬件配置文件,半导体器件FPGA 则是这些硬件配置文件的载体。当这些FPGA器件加载、配置上不同的文件时,这个器件便具有了相应的功能。在这一系列的设计、综合、仿真、验证、配置的过程中,现代电子设计理论和现代电子设计方法贯穿于其中。

以HDL语言表达设计意图,以FPGA作为硬件实现载体,以计算机为设计开发工具,以EDA软件为开发环境的现代电子设计方法日趋成熟。在这里,笔者认为,要振兴我国电子产业,需要各相关专业的人士共同努力。HDL语言的语法语义学研究与半导体工艺相关联的编译映射关系的研究,深亚微米半导体工艺与EDA设计工具的仿真、验证及方法的研究,这需要半导体专家和操作系统专家共同努力,以便能开发出更加先进的EDA工具软件。软件、硬件协同开发缩短了电子设计周期,加速了电子产品更新换代的步伐。毫不夸张地说,EDA工程是电子产业的心脏起搏器,是电子产业飞速发展的原动力。本书从应用的角度向国内广大读者介绍VHDL编程技术,让大家掌握HDL编程,了解FPGA结构,学会使用EDA工具,为集成电路前端设计打下基础。

1.1.1 硬件描述语言的诞生

VHDL语言的英文全名是Very High Speed Integrated Circuit Hardware Description Language,即超高速集成电路硬件描述语言。HDL发展的技术源头是:在HDL形成发展之前,已有了许多程序设计语言,如汇编、C、Pascal、Fortran、Prolog等。这些语言运行

·4·

VHDL程序设计教程

在不同硬件平台和不同的操作环境中,它们适合于描述过程和算法,不适合作硬件描述。CAD的出现,使人们可以利用计算机进行建筑、服装等行业的辅助设计,电子辅助设计也同步发展起来。在从CAD工具到EDA工具的进化过程中,电子设计工具的人机界面能力越来越高。在利用EDA工具进行电子设计时,逻辑图、分立电子原件作为整个越来越复杂的电子系统的设计已不适应。任何一种EDA工具,都需要一种硬件描述语言来作为EDA 工具的工作语言。这些众多的EDA工具软件开发者,各自推出了自己的HDL语言。

HDL发展的社会根源是:美国国防部电子系统项目有众多的承包公司,由于各公司技术路线不一致,许多产品不兼容,他们使用各自的设计语言,使得甲公司的设计不能被乙公司重复利用,造成了信息交换困难和维护困难。美国政府为了降低开发费用,避免重复设计,国防部为他们的超高速集成电路提供了一种硬件描述语言,以期望VHDL功能强大、严格、可读性好。政府要求各公司的合同都用它来描述,以避免产生歧义。

由政府牵头,VHDL工作小组于1981年6月成立,提出了一个满足电子设计各种要求的能够作为工业标准的HDL。1983年第3季度,由IBM公司、TI公司、Intermetrics公司签约,组成开发小组,工作任务是提出语言版本和开发软件环境。1986年IEEE标准化组织开始工作,讨论VHDL语言标准,历时一年有余,于1987年12月通过标准审查,并宣布实施,即IEEE STD 1076—1987[LRM87]。1993年VHDL重新修订,形成了新的标准,即IEEE STD 1076—1993[LRM93]。

从此以后,美国国防部实施新的技术标准,要求电子系统开发商的合同文件一律采用VHDL文档。即第一个官方VHDL标准得到推广、实施和普及。

1.1.2 HDL语言的种类

HDL语言在国外有上百种。高等学校、科研单位、EDA公司都有自己的HDL语言。现选择较有影响的作简要介绍。

Candence公司是一家著名的EDA公司,财力雄厚。该公司的Verilog HDL于1983年由Gate Way Design Automatic公司的Phil Moorby首创。他在1984—1985年间成功设计了Verilog-XL仿真器,于1986年提出了快速门级仿真的XL算法,使Verilog HDL语言变得更加丰富和完善,从而受到了EDA工具设计公司的青睐。1989年Candence公司购买了GDA公司,Verilog HDL语言从此变为Candence公司的“私有财产”,成为Candence公司的EDA设计环境上的硬件描述语言。经过Candence公司的努力,V erilog HDL于1995年成为IEEE标准,也是民间公司第一个硬件描述语言标准,即V erilog HDL 1364—1995。由于Verilog HDL语言从C语言发展来,所以有C语言基础的设计人员能够较快入门。

ALTERA公司是一家半导体器件公司,其CPLD器件在世界市场上占主导地位。这家公司不仅是硬件生产厂商,也是EDA工具开发商,它的EDA工具MAX+plus II、Quartus 由于人机界面友好、易于使用、性能优良,而受到FPGA、CPLD器件设计人员的欢迎。运行在MAX+plus II环境下的VHDL语言具有C语言设计风格,好学好用,因此被众多用户使用。

HDL语言来自不同地方,由不同语言演变而来,为了各平台之间相互转换,又推出了

第1章VHDL语言基础·5·

EDIF(Electronic Design Interchange Format)。它不是一种语言,而是用于不同数据格式的EDA工具之间的交换设计数据。

1.1.3 VHDL语言上机操作条件

VHDL语言描述能力强,覆盖面广,抽象能力强,所以用VHDL语言作为硬件模型建模很合适。设计者的原始描述是非常简练的硬件描述,经过EDA工具综合处理,最终生成付诸生产的电路描述或版图参数描述的工艺文件。整个过程通过EDA工具自动完成,大大减轻了设计人员的工作强度,提高了设计质量,减少了出错机会。

VHDL语言可读性好。VHDL既能被人容易读懂,又能被计算机识别,作为技术人员编写的源文件,它既是计算机程序、技术文档和技术人员硬件信息交流的文件,又是签约双方的合同文件。VHDL语言中的设计实体(design entity)、程序包(package)、设计库(library),为设计人员重复利用他人的设计提供了技术手段。重复利用他人的IP模块和软核(soft core)是VHDL的特色,许多设计不必个个都从头再来,而是只要在更高层次上把IP模块利用起来,就能达到事半功倍的效果。

VHDL语言可以在多种EDA工具设计环境中运行。硬件平台是工作站或高档微机。高档微机的配置应该具有:

高分彩显17英寸以上,分辨率1024×768或更高

硬盘20GB以上

内存512MB以上

CPU Intel兼容CPU

光驱8倍速以上

操作系统Windows XX

开发工具MAX+plus II 或Quartus II

Candence、Menter、ALTERA等公司的EDA工具均支持VHDL语言环境。关于VHDL 语言的上机实验,在第7章中将作详细介绍。

1.2 VHDL程序的实体

VHDL程序包含实体(entity)、结构体(architecture)、配置(configuration)、包集合(package)、库(library)5个部分。

简单的实体是由实体和结构体两部分组成的。实体用于描述设计系统的外部接口信号,结构体用于描述系统的行为、系统数据的流程或者系统组织结构形式。设计实体是VHDL 程序的基本单元,是电子系统的抽象。简单的实体可以是一个与门电路(AND Gate),复杂的实体可以是一个微处理器或一个数字电子系统。实体由实体说明和结构体说明两部分组成。

例1-1是计数器程序结构模板。由这个抽象的程序可以归纳出VHDL程序的基本结构。

VHDL 程序设计教程

·6·

【例1-1】 计数器程序结构模板

LIBRARY IEEE;

USE ieee.std_logic_1164.all;

_data_input_name : IN INTEGER RANGE 0 TO _count_value; SIGNAL_clk_input_name : IN STD_LOGIC;

SIGNAL_clm_input_name : IN STD_LOGIC;

SIGNAL_ena_input_name : IN STD_LOGIC; SIGNAL_ld_input_name : IN STD_LOGIC;

SIGNAL_count_output_name : OUT INTEGER RANGE 0 TO _

Count_value;

END entity_name;

: INTEGER RANGE 0 TO _count_value;

敏感变量表

_count_signal_name <= 0;

ELSE

ELSE _count_signal_name <= _count_signal_name; END IF; END IF; END IF;

END counter;

由例1-1可以看出,VHDL 程序由两部分组成:第1部分为实体说明,第2部分为结构体。VHDL 程序结构更抽象、更基本、更简练的表示如图1.1所示。

设计实体用关键字ENTITY 来标识,结构体由ARCHITECTURE 来标识。系统设计中的实体提供该设计系统的公共信息,结构体定义了各个模块内的操作特性。一个设计实体

第1章VHDL语言基础·7·必须包含一个结构体或含有多个结构体。一个电子系统的设计模型如图1.2所示。

结构体间通信

图1.1 VHDL程序基础图1.2 VHDL程序设计系统模型

1.2.1 实体的组成

实体由实体名、类型表、端口表、实体说明部分和实体语句部分组成。根据IEEE标准,实体组织的一般格式为:

ENTITY 实体名 IS

[GENERIC(类型表);] --可选项

[PORT(端口表);] --必需项

实体说明部分; --可选项

[BEGIN

实体语句部分;]

END [ENTITY] [实体名];

根据上述实体说明的一般书写格式,编写一个VHDL程序设计的实体说明,如例1-2所示。

【例1-2】add8实体说明部分

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY add8IS

PORT( b: in std_logic_vector(7 downto0);

a: in std_logic_vector(7 downto0);

Ci: in std_logic;

Sum: out std_logic_vector(7 downto0);

Co: out std_logic;)

END add8;

由实体说明部分画出add8实体的外部接口图,如图1.3所示。

实体说明以“ENTITY 实体名IS”开始,以“END 实体名”结束。大写字母或黑体字都是VHDL关键字。EDA工具对VHDL语言的大小写字母不加区分。

·8·

VHDL程序设计教程

实体说明主要描述一些参数的类型。参数的类型说明必须放在端口说明之前,这是VHDL标准所规定的。

图1.3 实体add8/8位加法器外部接口

在层次化系统设计中,实体说明是整个系统的输入/输出(I/O)。在一个器件级的设计中,实体说明是一个芯片的输入/输出(I/O)。

实体说明在VHDL程序设计中描述一个元件或一个模块与设计系统的其余部分(其余元件、模块)之间的连接关系,可以看作一个电路图的符号。因为在一张电路图中,某个元件在图中与其他元件的连接关系是明显直观的,如图1.3所示。

1.2.2 类型说明(可选)

类型说明是实体说明中的可选项,放在端口说明之前,其一般书写格式为:

GENERIC[CONSTANT]名字表:[IN]子类型标识[:=静态表达式],…]

举例:

GENERIC(m:TIME:=3ns)

这个参数说明是指在VHDL程序中,构造体内的参数m的值为3ns。

类型说明和端口说明是实体说明的组成部分,用于说明设计实体和外部通信的通道。利用外部通信通道,参数的类型说明为设计实体提供信息。参数的类型用来规定端口的大小、I/O引脚的指派、实体中子元件的数目和实体的定时特性等信息。

1.2.3 端口说明

端口说明是对设计实体与外部接口的描述,是设计实体和外部环境动态通信的通道,其功能对应于电路图符号的一个引脚。实体说明中的每一个I/O信号被称为一个端口,一个端口就是一个数据对象。端口可以被赋值,也可以当作变量用在逻辑表达式中。定义实体的一组端口称作端口说明(port declaration)。

端口说明的组织结构必须有一个名称、一个通信模式和一个数据类型。端口说明的一般格式为:

Port(端口名,端口名:模式数据类型名

第1章VHDL语言基础·9·

端口名,端口名: 模式数据类型名);

1.端口名

端口名是赋于每个外部引脚的名称,名称的含义要明确,如D开头的端口名表示数据,A开头的端口名表示地址等。端口名通常用几个英文字母或一个英文字母加数字表示。下面是合法的端口名:

CLK,RESET,A0,D3

2.模式

模式用来说明数据、信号通过该端口的传输方向。端口模式有in、out、buffer、inout。

(1)输入(in)

输入仅允许数据流入端口。输入信号的驱动源由外部向该设计实体内进行。输入模式主要用于时钟输入、控制输入(如Load、Reset、Enable、CLK)和单向的数据输入,如地址信号(address)。不用的输入一般接地,以免浮动引入干扰噪声。

(2)输出(out)

输出仅允许数据流从实体内部输出。端口的驱动源是由被设计的实体内部进行的。输出模式不能用于被设计实体的内部反馈,因为输出端口在实体内不能看作可读的。输出模式常用于计数输出、单向数据输出、设计实体产生的控制其他实体的信号等。一般而言,不用的输出端口不能接地,避免造成输出高电平时烧毁被设计实体。

(3)缓冲(buffer)

缓冲模式的端口与输出模式的端口类似,只是缓冲模式允许内部引用该端口的信号。缓冲端口既能用于输出,也能用于反馈。

缓冲端口的驱动源可以是:

设计实体的内部信号源;

其他实体的缓冲端口。

缓冲不允许多重驱动,不与其他实体的双向端口和输出端口相连。

内部反馈的实现方法有:

建立缓冲模式端口;

建立设计实体的内部节点。

缓冲模式用于在实体内部建立一个可读的输出端口,例如计数器输出,计数器的现态被用来决定计数器的次态。实体既需要输出,又需要反馈,这时设计端口模式应为缓冲模式。

(4)双向模式(inout)

双向模式可以代替输入模式、输出模式和缓冲模式。

在设计实体的数据流中,有些数据是双向的,数据可以流入该设计实体,也有数据从设计实体流出,这时需要将端口模式设计为双向端口。

双向模式的端口允许引入内部反馈,所以双向模式端口还可以作为缓冲模式用。由上述分析可见,双向端口是一个完备的端口模式。

·10·

VHDL程序设计教程

一般而言,输入信号把端口指派成输入模式,输出信号把端口指派成输出模式,而双向数据信号,如计算机的PCI总线的地址/数据复用总线、DMA控制器数据总线,都选用端口双向模式。这一良好的设计习惯,使得从端口名称、端口模式就可一目了然地知道信号的用途、性质、来源和去向,十分方便。对一个大型设计任务,大家应协同工作,从而不至于引起歧义。

3.数据类型(types)

数据类型端口说明除了定义端口标识名称、端口定义外,还要标明出入端口的数据类型。VHDL语言的IEEE 1706/93标准规定,EDA综合工具支持的数据类型为布尔型(boolean)、位型(bit)、位矢量型(bit-vector)和整数型(integer)。

由IEEE std_logic_1164所约定的、由EDA工具支持和提供的数据类型为标准逻辑(standard logic)类型。标准逻辑类型也分为布尔型、位型、位矢量型和整数型。为了使EDA工具的仿真、综合软件能够处理这些逻辑类型,这些标准库必须在实体中声明或在USE语句中调用。

1.2.4 实体说明部分

在实体结构的一般格式中含有实体说明语句,它是每一设计实体接口的共同部分。由实体说明的一般书写格式知道,含有实体说明部分的组织应放在端口说明下面,说明部分定义的项目是实体接口中的公共信息。实体说明语句是并行语句,如并行断言语句、并行过程调用语句和被动进程语句。这些语句必须是被动语句,其中不包含信号赋值。含有实体说明部分的程序如例1-3所示。

【例1-3】含有实体说明部分的实体

LIBRARY ieee;

USE ieee.std_logic_1164.all;

USE work my-pkg.all --设my-pkg包含work类型说明 Entity Latch IS

Port (dx IN: word--设my-pkg对该设计实体可见

端口说明部分 dy OUT: word

Load,clk:IN bit);

CONSTANT setup:time:=12ns;

参数类型部分 Use work.timing_pkg.all;

--设my-pkg包括chick timing过程 BEGIN

实体语句部分 Check timing(setup,dxin,load,clk);

END Latch;

第1章VHDL语言基础·11·

1.3 VHDL程序的结构体

结构体具体指明了该设计实体的行为,定义了该设计实体的功能,规定了该设计实体的数据流程,指派了实体中内部元件的连接关系。用VHDL语言描述结构体有4种方法:(1)行为描述法:采用进程语句,顺序描述被称设计实体的行为。

(2)数据流描述法:采用进程语句,顺序描述数据流在控制流作用下被加工、处理、存储的全过程。

(3)结构描述法:采用并行处理语句描述设计实体内的结构组织和元件互连关系。

(4)采用多个进程(process)、多个模块(blocks)、多个子程序(subprograms)的子结构方式。

结构体的一般书写格式为:

ARCHITECTURE结构体名OF实体名IS

定义语句, 内部信号, 常数,数据类型, 函数定义

BEGIN

[并行处理语句];

[进程语句];

END结构体名;

一个结构体的组织结构从“ARCHITECTURE 结构体名OF 实体名IS”开始,到“END 结构体名”结束。

1.3.1 结构体命名

结构体名称由设计者自由命名,是结构体的惟一名称。OF后面的实体名称表明该结构体属于哪个设计实体,有些设计实体中可能含有多个结构体。这些结构体的命名可以从不同侧面反映结构体的特色,让人一目了然。例如:

ARCHITECTURE behacvioral OF mux IS用结构体行为命名

ARCHITECTURE dataflow OF mux IS用结构体的数据流命名

ARCHITECTURE structural OF mux IS用结构体的组织结构命名

ARCHITECTURE bool OF mux IS 用结构体的数学表达方式命名

ARCHITECTURE latch OF mux IS 用结构体的功能来定义

上述几个结构体都属于设计实体mux,每个结构体有着不同的名称,使得阅读VHDL 程序的人能直接从结构体的描述方式了解功能,定义电路行为。因为用VHDL写的文档不仅是EDA工具编译的源程序,而且最初主要是项目开发文档,供开发商、项目承包人阅读的。这就是硬件描述语言与一般软件语言不同的地方之一。

·12·

VHDL程序设计教程

1.3.2 信号定义

由结构体的一般书写格式知道,结构体名称后面是信号定义,位于关键字ARCHITECTURE和BEGIN之间,用于对结构内部使用的信号、常数、数据类型、函数进行定义。特别需要注意的是,这是结构体内部,而不是实体内部,因为实体中可能有几个结构体。另外,实体说明中定义I/O信号为外部信号,而结构体定义的信号为内部信号。这两点区别一定要弄清楚。

结构体的信号定义和实体的端口说明一样,应有信号名称和数据类型定义,但不需要定义信号模式,不用说明信号方向,因为是结构体内部连接用信号,如例1-5所示。

【例1-4】结构体的信号定义方法

ARCHITECTURE structural OF mux IS

SIGNAL ab:bit; --信号不必注明模式IN、OUT

SIGNAL x:std_logic_vector(0 to 7);

BEGIN

END structural;

并行处理语句是结构体描述的主要语句。并行处理语句表明,若一个结构体的描述用的是结构描述方式,则并行语句表达了结构体的内部元件之间的互连关系。这些语句是并行的,各个语句之间没有顺序关系。

若一个结构体是用进程语句来描述的,并且这个结构体含有多个进程,则各进程之间是并行的。但必须声明,每个进程内部的语句是有顺序的,不是并行的。

若一个结构体用模块化结构描述,则各模块间是并行的,而模块内部视描述方式而定。并行处理语句如例1-5所示。

【例1-5】用并行语句描述的结构体

LIBRARY ieee;

USE ieee.std_logic_1164.all;

ENTITY mux IS

PORT(do,d1:IN Bit;

Sel:IN Bit;

G:OUT Bit);

END MUX;

ARCHITECTURE dataflow OF mux IS

BEGIN

g=(D0AND sel)OR(NOT sel AND D1);

END dataflow;

该程序的等效逻辑电路图如图1.4所示。mux实体的真值表如表1.1所示。

第1章VHDL语言基础·13·

图1.4 mux实体的等效逻辑电路图

表1.1 mux实体的真值表

1.3.3 结构体的行为描述法

所谓结构体的行为描述(behavioral descriptions),即对设计实体按算法的路径来描述。行为描述在EDA工程中称为高层次描述或高级描述,原因有以下两点:

(1)实体的行为描述是一种抽象描述,而不是某一个器件,对电子设计而言,是高层次的概括,是整体设计功能的定义,所以称为高层次描述。

(2)从计算机领域而言,行为描述和高级编程语言类似,所以计算机业内人士通常称之为高级描述。

当用顺序执行结构体的行为描述时,设计工程师可为实体定义一组状态时序机制,不需要互连表,无须关注实体的电路组织和门级实现,这些完全由EDA工具综合生成,设计工程师只需注意正确的实体行为、准确的函数模型和精确的输出结果。例1-6为比较器的行为描述。

【例1-6】结构体的行为描述

LIBRARY IEEE;

USE IEEE std_logic_1164.ALL;

ENTITY comparator IS

PORT (a,b:IN std_logic_vector(7downto0);

g:out std_logic);

END comparator;

ARCHITECTURE behavioral OF comparator

BEGIN

Comp:PROCESS(a,b)

BEGIN

IF a = b THEN

G <='1';

ELSE

G <='0';

END IF;

END process comp;

·14·

VHDL程序设计教程

END behavioral;

实体的结构体采用一个简单的算法描述了实体行为,定义了实体的功能。

输入8位数a和b,若a=b,则实体输出G=1;若a≠b,则实体输出G=0。输出取决于输入条件。

进程标志comp是进程顺序执行的开始,END process comp是进程的结束。

保留字process(a,b)中,a、b为敏感表,即a、b每变化一次就有一个比较结果输出。实体输出是动态的G值,时刻代表着a、b的比较结果。

1.3.4 结构体的数据流描述法

数据流描述(dataflow description)是结构体描述方法之一,它描述了数据流程的运动路径、运动方向和运动结果。例如,同样是一个8位比较器采用数据流法编程,则如例1-7所示。

【例1-7】用数据流描述法设计8位比较器

LIBRARY IEEE;

USE IEEE std_logic_1164.ALL;

ENTITY comparator IS

PORT(a,b:IN std_logic_vector(7downto0);

g:out std_logic);

END comparator;

ARCHITECTURE dataflow OF comp IS

BEGIN

G <="1" when (a = b) else"0";

END dataflow;

上述程序设计的数据流程为:当a=b时,G=1;其余时间G=0。注意,数据流描述的句法与行为描述的句法是不一样的。

cale—when:条件信号赋值语句。

with—select—when:选择信号赋值语句。

这两种语句是数据流描述法常用的语法,同样采用布尔方程,也可用数据流描述法,如例1-8所示。

【例1-8】用布尔方程的数据流描述法设计的8位比较器

LIBRARY IEEE;

USE IEEE std_logic_1164.ALL;

ENTITY comparator IS

PORT(a,b:IN std_logic_vector(7downto0);

g:out std_logic);

END comparator;

ARCHITECTURE bool OF comparator IS

第1章VHDL语言基础·15·

BEGIN

g<=not(a(0)xorb(0))

and not(a(1)xorb(1))

and not(a(2)xorb(2))

and not(a(3)xorb(3))

and not(a(4)xorb(4))

and not(a(5)xorb(5))

and not(a(6)xorb(6))

and not(a(7)xorb(7));

END bool;

布尔方程的数据流描述法描述了信号的数据流的路径。这种描述法比例1-6的结构体复杂,因为例1-6的结构体描述与端口结构无关。只要a=b,G就输出1,与a、b的大小无关。而例1-7是一个8位比较器,布尔方程定义的端口尺寸为8位。

数据流描述法采用并发信号赋值语句,而不是进程顺序语句。一个结构体可以有多重信号赋值语句,且语句可以并发执行。

1.3.5 结构体的结构化描述法

图1.5是一个8位比较器的逻辑电路图,其对应的结构化描述(structural description)程序如例1-9所示。

B7

图1.5 8位比较器的逻辑电路图

【例1-9】8位比较器的结构化描述法

LIBRARY IEEE;

·16·

VHDL程序设计教程

USE IEEE std_logic_1164.ALL;

ENTITY comparator IS

PORT(a,b:in std_logic_vector(7downto0);

g:out std_logic);

END comparator;

USE work.gatespkg.ALL

ARCHITECTURE structural OF comparator IS

signal x:std_logic(0TO7);

BEGIN

u0:xnor2PORT MAP(a(0),b(0),x(0));

u1:xnor2PORT MAP(a(1),b(1),x(1));

u2:xnor2PORT MAP(a(2),b(2),x(2));

u3:xnor2PORT MAP(a(3),b(3),x(3));

u4:xnor2PORT MAP(a(4),b(4),x(4));

u5:xnor2PORT MAP(a(5),b(5),x(5));

u6:xnor2PORT MAP(a(6),b(6),x(6));

u7:xnor2PORT MAP(a(7),b(7),x(7));

u8:xnor2 PORT MAP (x(0),x(1),x(2),x(3),x(4),x(5),x(6),x(7), x(8),g);

END structural;

在结构体中,设计任务的程序包内定义了一个8输入与门(and8)和一个二异或非门(xnor2)。把该程序包编译到库中,可通过USE从句来调用这些元件,并从work库中的gatespkg程序包里获取标准化元件。

结构化描述通常用于层次式设计。在8位比较器的实体设计中,实体说明仅说明了该实体的I/O关系,而设计中采用的标准元件8输入与门and 8和二输入异或非门xnor2是标准元件。它的输入关系也就是and8与xnor2的实体说明,是用USE从句的方式从库中调用的。

对于一个复杂的电子系统,可以分解成许多子系统,子系统再分解成模块。多层次设计可以使设计多人协作,并行同时进行。多层次设计的每个层次都可以作为一个元件,再构成一个模块或构成一个系统,每个元件可以分别仿真,然后再整体调试。

结构化描述不仅是一个设计方法,而且是一种设计思想,是大型电子系统设计高层主管人员必须掌握的。

除了一个常规的门电路,其标准化后作为一个元件放在库中调用,用户自己定义的特殊功能的元件也可以放在库中,以方便调用。这个过程称为标准化,有的资料中称为例化。尤其需要声明的是,元件标准化不仅仅是常规门电路,这和标准化元件的含义不一样。即任何一个用户设计的实体,无论功能多么复杂,复杂到一个数字系统,如一个CPU,还是多么简单,简单到一个门电路,如一个倒相器,都可以标准化成一个元件。现在在EDA工程中,工程师们把复杂的模块程序称为软核(softcore或IP core),调试仿真通过的集成电路版图称为硬核,而把简单的通用模块称为元件。

第1章VHDL语言基础·17·

1.4 小结

本章介绍了VHDL语言产生的背景、VHDL语言的种类、VHDL语言的开发环境、VHDL 语言标准的制订过程以及VHDL语言在EDA工程中的地位和作用。

VHDL程序由实体和结构体组成。实体说明含有类型说明和端口说明,它在VHDL 程序设计中,描述一个元件或一个模块与设计系统的其余部分(其余元件、模块)之间的连接关系。结构体描述有3种方法:行为描述法、数据流描述法和结构化描述法。结构体的行为描述,即指对设计实体的描述按算法的路径来描述。行为描述在EDA工程中称为高层次描述或高级描述。数据流描述是结构体描述方法之一,它描述了数据流的运动路径、运动方向及运动结果。结构化描述法适用于层次化设计,对于一个复杂的电子系统,可以分解成许多子系统,子系统再分解成模块。多层次设计可以使设计多人协作,并行同时进行。多层次设计的每个层次都可以作为一个元件,再构成一个模块,或构成一个系统。每个元件可以分别仿真,然后再整体调试。结构化描述不仅是一个设计方法,而且是一种设计思想。

1.5 习题

1.什么是VHDL?简述VHDL的发展史。

2.简述VHDL设计实体的结构。

3.用结构体的3种描述法设计一个4位计数器。

VHDL硬件描述语言实验报告

硬件描述语言实验附录 姓名: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大总结

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(现状,输入)

相关文档