VHDL硬件描述语言
Very high speed integration circuits HDL
起源:
1985年,美国国防部提出计划;
1987年成为 IEEE1076标准;
1993年进一步修订完善;
是目前标准化程度最高,适应性最广的
HDL语言;
VHDL硬件描述语言
Very high speed integration circuits HDL
特点:
全方位硬件描述 — 从系统到电路多种描述方式 — 适应层次化设计数据类型丰富,语法严格清晰串行和并行通用,物理过程清楚与工艺结构无关,可用于各类 EDA工具
VHDL描述形式硬件电路模型:
电路模块,具有外部接口和内部结构
VHDL:用于描述硬件的结构性程序,采用文本文件编写;用程序模块表达硬件模块:设定外部端口,设计内部结构。
VHDL的程序结构
VHDL程序由模块构成,每个模块对应于一个电路块;
模块由三部分组成:
库和包 library(设计资源)
实体 entity (外部端口)
构造体 architecture(内部结构)
VHDL的程序示例
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;
简单的实体
entity entity-name is
port (signal-name,mode signal-type;
……
signal-name,mode signal-type);
end entity-name;
比较复杂的实体
ENTITY 实体名 IS
GENERIC语句;
PORT语句;
( BEGIN
决断语句、过程调用、进程说明等)
END 实体名;
VHDL的实体,entity
要点:
实体以 entity 实体名 is 开始;
以 end 实体名 ; 结束;
实体的主要内容为端口( port)说明,
其中主要包括:
实体名、信号名、信号模式、信号类型实体名称和信号名称每个实体在设计中对应一个电路模块,
实体中的每个信号在设计中对应模块的一个端口;实体名称和信号名称应具有意义,方便记忆;名称不能重复使用;
对模块进行编译时,文件名和项目名必须与实体名相同;
实体名称和信号名称名称由英文字母和数字构成,英文字母开头;可在名称中使用不连接的下划线符号 _;字母不分大小写;
不能与关键字冲突。
实体名称和信号名称例:合法的名称
name,name2,name_a,name_2_3m;
非法的名称
ill__egle,_illegle,illegle_,2bad,ill
egle,ill/egle
特殊的名称
\74LS04\,\vhdl\,\VHDL\
信号模式每个端口信号都必须规定信号模式;
信号模式规定信号流动的方向;
in 输入端口
out 输出端口
inout 双向端口
buffer 缓冲输出端口内部端口 Y与外部端口 X的连接规则从外向内,X Y
in in
out out
inout 任意
(可通过多源控制)
buffer 任意
(只能通过单源控制)
内部端口 Y与外部端口 X的连接规则从内向外,Y X
in in,inout,buffer
out out,inout
inout inout
(可通过多源控制)
buffer buffer
(只能通过单源控制)
信号数据类型所有信号都必须规定其类型;
数字电路设计中最简单的类型为:
bit bit_vector
最常用的类型为:
std_logic 单个逻辑量
std_logic_vector 逻辑数组、总线逻辑量实体的其它语法要点除了第一行 entity … is 以外,每一句以分号“;”结束 ;
编写程序时,一行可以含若干句(以分号间隔),一句也可以写若干行;
可以用,--”符号后接说明文字,这些文字用于帮助理解程序,不会对编译产生影响;
单词之间必须使用空格;并列信号间使用逗号;
实体编写的示例
4选 1数据选择器 kmux4
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;
实体编写的示例
4选 1数据选择器 kmux4
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 (
cons_name,cons_type,=cons_value ;
……
cons_name,cons_type,=cons_value) ;
类属说明的示例
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;
类属说明的示例通过调用时改动常数,得到 16位的 MUX,
u1,kmux_n
generic map(16,4)
port map (x,y,e,f);
Testbench的实体测试板是一种特殊的电路模块,只用于电路的仿真,因此该实体可以不含任何输入 /输出端口。(该实体不可综合)
例:
entity fa_testbench is
end fa_testbench;
VHDL的构造体,architecture
architecture arch_name of
entity_name is
说明部分
declarations and definitions;
begin
语句部分
concurrent statement;
end arch_name;
构造体语法要点每个构造体必须属于一个实体;
每个构造体必须有一个名称:
通常可以根据描述方式起名:
str rtl beh
构造体分为两部分:
is – bigin,说明语句;
bigin – end,并行语句;
构造体的说明语句
type declarations; 类型说明
signal declarations; 信号说明
constant declarations; 常量说明
component declarations; 元件说明
function definitions; 函数说明
procedure definitions; 过程说明构造体的并行语句信号赋值语句 数据流描述元件例化语句 结构描述进程语句 行为描述每条并行语句形成一个电路逻辑单元。
构造体的其他语法要点除了第一句和 begin句外,其余各句均以分号结束;
在每一部分中,各语句处于并列状态,
执行时不分先后次序;
定义语句需要考虑使用的顺序。
作业题为 Max+Plus Ⅱ 中 mf库的下列 74系列集成电路编写实体:
74138 74151 74163 74194
实体名采用上述数字前面加字母 k表达,
例如,k74138,k74194;
各端口名均采用库中已规定的名称;