VHDL 硬件描述语言 Very high speed integration circuits HDL 起源: 1985 年,美国国防部提出计划; 1987 年成为 IEEE1076 标准; 1993 年进一步修订完善; 是目前标准化程度最高,适应性最广的 HDL 语言; 特点: 全方位硬件描述—从系统到电路 多种描述方式—适应层次化设计 数据类型丰富,语法严格清晰 串行和并行通用,物理过程清楚 与工艺结构无关,可用于各类 EDA 工具 VHDL 的设计要点 用于描述硬件连接的结构性程序,采用文本文件编写 硬件电路模型:电路模块,具有外部接口和内部结构 VHDL用程序模块表达硬件模块 : 设定外部端口 设计内部结构 VHDL 的程序结构 VHDL程序由模块构成,每个模块对应于一个电路块; 模块由三部分组成: 库和包 library(设计资源) 实体 entity (外部端口) 构造体 architecture (内部结构) P.269 图4-52 例 1 inhibit gate ( p.269 表 4-26) library ieee; use ieee.std_logic_1164.all; entity inhibit is port ( x,y: in std_logic ; z: out std_logic); end inhibit; architecture rtl of inhibit is begin z<='1' when x='1' and y='0' else '0'; end rtl; 实体 实体基本格式 p.270 表 4-27 entity entity-name is port (signal-name : mode signal-type; …… signal-name : mode signal-type); end entity-name; 实体以 entity 实体名 is 开始,以 end 实体名; 结束。 实体的主要内容为端口(port)说明; 要点:实体名、信号名、信号模式、信号类型 实体名、信号名 英文字母和数字构成,字母开头; 可在名称中使用单个下划线符号_ ; 字母不分大小写; 名称应具有意义,方便记忆; 名称不能重复使用; 进行编译时,文件名和项目名必须与实体名相同; 信号模式 每个端口信号都必须规定信号模式; 信号模式规定信号流动的方向; 常用信号模式: in 信号由该端口输入 out 信号由该端口输出 inout 双向端口,通常由三态门控制 buffer 输出端口,但模块内可以使用该信号 buffer 信号只能定义在两个端口之间; buffer 信号连接的端口模式都应为 buffer; 信号类型: 所有信号都必须规定其类型; 数字电路设计中最常用的类型为: std_logic 单个逻辑量 std_logic_vector 逻辑数组、总线逻辑量 其他语法要点 除了第一行 entity … is 以外,每一句以分号“; ”结 束 ; 编写程序时,一行可以含若干句(以分号间隔),一句 也可以写若干行; 在一句结束后,可以用“--”符号后接说明文字,这些文 字用于帮助理解程序,不会对编译产生影响; 单词之间必须使用空格;并列信号间使用逗号; 实体编写示例 4 选 1 数据选择器 kmux4 方式 1 entity kmux4 is port ( d0,d1,d2,d3: in std_logic; a0,a1 : in std_logic; s : in std_logic; y : out std_logic); end kmux4; 方式 2 entity kmux4 is port ( d: in std_logic_vector (0 to 3); a : in std_logic_vector (1 downto 0); s : in std_logic; y : out std_logic); end kmux4; 类属说明 generic 实体中可以设置类属说明语句,通常位于 port 语句之前; 类属是对端口界面常数的说明,类属值可以由实体外部重新 设定; 基本格式 generic(constant-name : constant-type: =constant-value ; …… constant-name : constant-type: =constant-value) ; 例 : n 选 1 数据选择器 entity kmux_n is generic(n:integer:=4; m:integer:=2); port ( d: in std_logic_vector (n-1 downto 0); a : in std_logic_vector (m-1 downto 0); s : in std_logic; y : out std_logic); end kmux_n; MAX+PLUS Ⅱ的文本输入方式 1 建立文件 打开文本编辑器 (Text Eidor) , 选择 file/save as 建立.vhd 文件;文件名一定要与所设计电路的模块名称(entity 名) 完全一致; 2 输入 VHDL 程序; (或由其他文本编辑器复制过来) 3 程序的检查编译 选择 file/project/set project to current file,为当 前文件建立项目; 选择 asigne/devi ce: MAX7000/AUTO,为编译目标指定 PLD 器件; 选择 对程序进行保存、检查; 根据检查提示错误对程序进行修改,直到完成检查; 使用编译器对程序进行编译; 选择 file/create de fault symbol 将所设计电路保存为符 号文件(模块),在以后的设计中,可以像调用其他元件一样 调用此模块; 作业: 为 mf 库中的下列 74 系列集成电路编写实体: 74138 74148 74161 74194 实体名和各端口名均采用库中已规定的名称;