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等。这些语言运行在不同硬件平台和不同的操作环境中,它们适合于描述过程和算法,不适合作硬件描述。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公司的努力,Verilog HDL于1995年成为IEEE标准,也是民间公司第一个硬件描述语言标准,即Verilog HDL 1364—1995。由于Verilog HDL语言从C语言发展来,所以有C语言基础的设计人员能够较快入门。

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

HDL语言来自不同地方,由不同语言演变而来,为了各平台之间相互转换,又推出了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程序的基本结构。

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

LIBRARY IEEE;

USE ieee.std_logic_1164.all;

ENTITY entity_name IS

PORT (

SIGNAL _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;

ARCHITECTURE counter OF _entity_name IS

SIGNAL_count_signal_name: INTEGER RANGE 0 TO _count_value;

BEGIN

PROCESS (_clk_input_name,_clrn_input_name)--敏感变量表

BEGIN

IF _clrn_input_name = '0' THEN

   _count_signal_name ................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download