1.15k likes | 1.35k Vues
ç¬¬ä¸‰ç« ç¡¬ä»¶æè¿°è¯è¨€ VHDL. 3.1.1 什么是 VHDL ? VHDL : V HSIC (Very High Speed Integrated Circuit) H ardware D escription L anguage. 3.1 概述. 3.1.2 VHDL çš„åŽ†å² 80 年代åˆç”±ç¾Žå›½å›½é˜²éƒ¨åœ¨å®žæ–½è¶…高速集æˆç”µ 路( VHSIC )项目时开å‘的。 1987 å¹´ç”± IEEE å会批准为 IEEE å·¥ä¸šæ ‡å‡†ï¼Œ 称为 IEEE1076-1987 。 å„ EDA å…¬å¸ç›¸ç»§æŽ¨å‡ºæ”¯æŒ VHDL 的设计环境。
E N D
第三章 硬件描述语言 VHDL
3.1.1 什么是VHDL? VHDL: VHSIC (Very High Speed Integrated Circuit) Hardware Description Language 3.1 概述
3.1.2 VHDL的历史 80 年代初由美国国防部在实施超高速集成电 路(VHSIC)项目时开发的。 1987年由 IEEE 协会批准为 IEEE 工业标准, 称为 IEEE1076-1987。 各EDA公司相继推出支持VHDL的设计环境。 1993年被更新为 93 标准,即IEEE1076-1993。 进一步提高抽象描述层次,扩展系统描述能力。
3.1.3 VHDL的作用 1)VHDL打破软、硬件的界限 传统的数字系统设计分为: 硬件设计(硬件设计人员) 软件设计(软件设计人员) 是电子系统设计者和 EDA工具之间的界面
EDA工具及 HDL的流行,使电子系统向集 成化、大规模和高速度等方向发展。 美国硅谷约有80%的ASIC和FPGA/CPLD 已采用 HDL进行设计。 2)VHDL与C、C++的比较: C、C++ 代替汇编等语言 VHDL 代替原理图、逻辑状态图等
3)VHDL与电原理图描述的比较: VHDL具有较强的抽象描述能力,可进行系统 行为级别的描述。描述更简洁,效率更高。 VHDL描述与实现工艺无关。 电原理图描述必须给出完整的、具体的电路 结构图,不能进行描象描述。描述繁杂,效率低。 电原理图描述与实现工艺有关。
3.1.4 VHDL语言特点 ①VHDL具有强大的语言结构,系统硬件描述 能力强、设计效率高;具有较高的抽象描述能力。 如:一个可置数的16位计数器的电原理图:
②VHDL语言可读性强,易于修改和发现错误。 ③VHDL具有丰富的仿真语句和库函数,可对 VHDL源代码进行早期功能仿真,有利于大 系统的设计与验证。 ④VHDL设计与硬件电路关系不大。 ⑤VHDL设计不依赖于器件,与工艺无关 。 ⑥移植性好。 ⑦VHDL体系符合TOP-DOWN和CE(并行工 程)设计思想。 ⑧VHDL设计效率高,产品上市时间快,成本低。 ⑨易于ASIC实现。
3.1.5 VHDL与其它硬件描述语言的比较 VHDL: 具有较强的系统级抽象描述能力,适合行为 级和 RTL级的描述。设计者可不必了解电路细节, 所作工作较少,效率高。但对综合器的要求高, 不易控制底层电路的生成。IEEE标准,支持广泛。 行为级 RTL级 门电路级 RTL: Register Translate Level
Verilog HDL : 系统级抽象描述能力比VHDL稍差;门级开 关电路描述方面比 VHDL 强。适合 RTL级和门 电路级的描述。设计者需要了解电路细节,所作 工作较多。IEEE标准,支持广泛。 ABEL、PALASM、AHDL(Altera HDL): 系统级抽象描述能力差,一般作门级电路描 述。要求设计者对电路细节有详细的了解。对综 合器的性能要求低,易于控制电路资源。支持少。
3.1.6 VHDL设计简述 VHDL主要用于描述数字系统的结构、行为、 功能和接口。 VHDL将一个设计(元件、电路、系统)分 为: 外部(可视部分、端口) 内部(不可视部分、内部功能、算法)
外部与内部: 器件或 子系统 ENTITY ARCHITECTURE Process Process Sequential Process Combinational Process ports ports component
VHDL语言的一些基本特点: • VHDL语言由保留关键字组成; • 一般,VHDL语言对字母大小写不敏感; 例外:‘ ’、“ ”所括的字符、字符串; • 每条VHDL语句由一个分号(;)结束; • VHDL语言对空格不敏感,增加可读性; • 在“--”之后的是VHDL的注释语句; • VHDL有以下描述风格: 行为描述; 数据流(寄存器传输RTL)描述; 结构化描述;
基本结构包括: 实体(Entity) 结构体(Architecture) 配置(Configuration) 库(Library)、程序包(Package) 3.2 VHDL程序基本结构
库、程序包 实体(Entity) 结构体 (Architecture) 进程 或其它并行结构 配置(Configuration)
3.2.1 实体(说明) 实体(说明): 定义系统的输入输出端口 语法: ENTITY <entity_name> IS Generic Declarations Port Declarations END <entity_name>; (1076-1987 version) END ENTITY <entity_name> ; ( 1076-1993 version)
1、类属说明 类属说明: 确定实体或组件中定义的局部常数。模块化 设计时多用于不同层次模块之间信息的传递。可 从外部改变内部电路结构和规模。 必须放在端口说明之前。 Generic ( 常数名称:类型 [:= 缺省值] {常数名称:类型 [:= 缺省值]} );
类属常用于定义: 实体端口的大小、 设计实体的物理特性、 总线宽度、 元件例化的数量等。 例: entity mck is generic(width: integer:=16); port(add_bus:out std_logic_vector (width-1 downto 0)); …
例:2输入与门的实体描述 entity and2 is generic(risewidth: time:= 1 ns; fallwidth: time:= 1 ns); port(a1: in std_logic; a0: in std_logic; z0: out std_loigc); end entity and2; 注:数据类型 time 用于仿真模块的设计。 综合器仅支持数据类型为整数的类属值。
2、端口声明 端口声明:确定输入输出端口的数目和类型。 其中,端口模式: in 输入型,此端口为只读型。 out 输出型,此端口只能在实体内部对其赋值。 inout 输入输出型,既可读也可赋值。 buffer 缓冲型,与 out 相似,但可读。 Port ( 端口名称{,端口名称}:端口模式 数据类型; … 端口名称{,端口名称}:端口模式 数据类型 );
数据类型: 指端口上流动的数据的表达格式。为预先定 义好的数据类型。 如:bit、bit_vector、 integer、std_logic、std_logic_vector等。 例: entity nand2 is port ( a, b : in bit; z : out bit ) ; end nand2;
3.2.2 结构体 • 作用:定义系统(或模块)的行为、元件及内部 • 的连接关系,即描述其逻辑功能。 • 两个组成部分: • 对数据类型、常数、信号、子程序、元件等元 • 素的说明部分。 • 以各种不同的描述风格描述的系统的逻辑功能 • 部分。常用的描述风格有:行为描述、数据流 • 描述、 结构化描述。
常数说明 结构体说明 数据类型说明 信号说明 结构体 例化元件说明 子程序说明 块语句 结构体功能描述 进程语句 信号赋值语句 子程序调用语句 元件例化语句
实体与结构体的关系: 一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。 结构体1 结构体2 结构体3 设计实体 。 。 。 结构体n
结构体的语法: 注:同一实体的结构体不能同名。定义语句中的常 数、信号不能与实体中的端口同名。 architecture 结构体名称 of 实体名称 is [说明语句]内部信号、常数、 数据类型、子程序(函数、过程)、 元件等的说明; begin [并行处理(功能描述)语句]; end [architecture] 结构体名称;
3.2.3 配置 结构体1 结构体2 结构体3 设计实体 。 。 。 一个设计实体的多种实现方式 结构体n 配置:从某个实体的多种结构体描述方式中选择 特定的一个。
简单配置的语法: 例:一个与非门不同实现方式的配置如下: configuration 配置名 of 实体名 is for 选配结构体名 end for ; end 配置名;
library ieee; use ieee.std_logic_1164.all; entity nand is port(a: in std_logic; b: in std_logic; c: out std_logic); end entity nand; architecture art1 of nand is begin c<=not (a and b); end architecture art1;
architecture art2 of nand is begin c<=‘1’ when (a=‘0’) and (b=‘0’) else ‘1’ when (a=‘0’) and (b=‘1’) else ‘1’ when (a=‘1’) and (b=‘0’) else ‘0’ when (a=‘1’) and (b=‘1’) else ‘0’; end architecture art2;
configuration first of nand is for art1; end for; end first; configuration second of nand is for art2 end for; end second;
3.2.4 程序包、库 程序包: 已定义的常数、数据类型、元件调用说明、子程序的一个集合。 目的:方便公共信息、资源的访问和共享。 库: 多个程序包构成库。
程序包说明的内容: 常量说明; VHDL数据类型说明; 元件说明; 子程序说明; 程序包的结构包括: 程序包说明(包首) 程序包主体(包体)
1、程序包说明(包首) 语法: 包声明项可由以下语句组成: use 语句(用来包括其它程序包); 类型说明;子类型说明;常量说明;信号说 明;子程序说明;元件说明。 package 程序包名 is {包说明项} end 程序包名;
2、程序包包体 程序包的内容:子程序的实现算法。 包体语法: 包体说明项可含: use 语句;子程序说明;子程序主体;类型说明;子类型说明;常量说明。 package body 程序包名 is {包体说明项} end 程序包名;
程序包首与程序包体的关系: 程序包体并非必须,只有在程序包中要说明 子程序时,程序包体才是必须的。 程序包首可以独立定义和使用。如下: package seven is subtype segments is bit_vector(0 to 6); type bcd is range 0 to 9; end seven;
library work; use work.seven.all; entity decoder is port(input: in bcd; drive: out segments); end decoder; architecture art of decoder is begin
with input select drive<=B“1111110” when 0, B“0110000” when 1, B“1101101” when 2, B“1111001” when 3, B“0110011” when 4, B“1011011” when 5, B“1011111” when 6, B“1110000” when 7, B“1111111” when 8, B“1111011” when 9, B“0000000” when others; end architecture art; a f b g e c d
3、库的种类 VHDL库可分为 5种: (1)IEEE 库 定义了四个常用的程序包: • std_logic_1164 (std_logic types & related functions) • std_logic_arith (arithmetic functions) • std_logic_signed (signed arithmetic functions) • std_logic_unsigned (unsigned arithmetic functions)
Type STD_LOGIC: 9 logic value system (‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-’) • ‘W’, ‘L’, ‘H” weak values (Not supported by Synthesis) • ‘X’ - (not ‘x’)used for unknown • ‘Z’ - (not ‘z’) used for tri-state • ‘-’ Don’t Care
(2)STD 库(默认库) 库中程序包为:standard, 定义最基本的数据类型: Bit,bit_vector ,Boolean, Integer,Real,and Time 注:Type BIT 2 logic value system (‘0’, ‘1’) (3)面向ASIC的库 (4)WORK库(默认库) (5)用户定义库