硬件描述语言(VHDL)之(二) VHDL程序基本结构
16
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
库、程序包
实体(Entity)
结构体
(Architecture)
进程 或其它并行结构
配置(Configuration)
17
一、实体(说明)
实体(说明):
定义系统的输入输出端口
语法:
ENTITY <entity_name> IS
Generic Declarations
Port Declarations
END <entity_name>; (1076-1987 version)
END ENTITY <entity_name> ; ( 1076-1993
version)
18
1、类属说明
类属说明:
确定实体或组件中定义的局部常数。模
块化设计时多用于不同层次模块之间信息的
传递。可从外部改变内部电路结构和规模。
类属说明必须放在端口说明之前。
Generic (
常数名称:类型 [:= 缺省值]
{常数名称:类型 [:= 缺省值]}
);
19
类属常用于定义:
实体端口的大小、
设计实体的物理特性、
总线宽度、
元件例化的数量等。
例:
entity mck is
generic(width: integer:=16);
port(add_bus:out std_logic_vector
(width-1 downto 0));
…
20
例: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 用于仿真模块的设计。
综合器仅支持数据类型为整数的类属值。
21
其中,端口模式:
in: 输入型,此端口为只读型。
out: 输出型,只能在实体内部对其赋值。
inout:输入输出型,既可读也可赋值。
buffer: 缓冲型,与 out 相似,但可读。
Port (
端口名称{,端口名称}:端口模式 数据类型;
…
端口名称{,端口名称}:端口模式 数据类型
);
2、端口声明
端口声明:确定输入、输出端口的数目和类型。
22
out 和 buffer 的区别:
inout 和 buffer 的区别:
23
指端口上流动的数据的表达格式。为预先定
义好的数据类型。
如:bit、bit_vector、integer、
std_logic、std_logic_vector 等。
例:
entity nand2 is entity m81 is
port ( port(
a,b:in bit; a:in bit_vector(7 downto 0);
z: out bit sel:in bit_vector(2 downto 0);
) ; b:out bit);
end entity nand2; end entity m81;
3、数据类型:
24
作用:定义系统(或模块)的行为、元件及内部
的连接关系,即描述其逻辑功能。
两个组成部分:
对数据类型、常数、信号、子程序、元件等
元素的说明部分。
以各种不同的描述风格描述的系统的逻辑功
能实现的部分。常用的描述风格有:行为描
述、数据流描述、 结构化描述。
二、结构体
25
结构体
结构体说明
结构体功能描述
常数说明
数据类型说明
信号说明
例化元件说明
子程序说明
块语句
进程语句
信号赋值语句
子程序调用语句
元件例化语句
26
实体与结构体的关系:
设计实体
结构体1
结构体2
结构体3
结构体n
。
。
。
一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同。
27
注:同一实体的结构体不能同名。定义语句中的
常数、信号不能与实体中的端口同名。
architecture 结构体名称 of 实体名称 is
[说明语句]内部信号、常数、
数据类型、子程序(函数、过程)、
元件等的说明;
begin
[并行处理(功能描述)语句];
end [architecture] 结构体名称;
结构体的语法:
28
例:结构体中错误的信号声明
29
例:一个完整描述(3 bit 计数器)
30
3bit计数器的等效描述(out与buffer的区别):
31
三、配置
设计实体
结构体1
结构体2
结构体3
结构体n
。
。
。
一个设计实体的多种实现方式
配置:从某个实体的多种结构体描述方式中选择
特定的一个。
32
configuration 配置名 of 实体名 is
for 选配结构体名
end for ;
end 配置名;
简单配置的语法:
33
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;
例:一个与非门不同实现方式的配置如下:
34
architecture art2 of nand is
begin
c<=‘<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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;
35
configuration first of nand is
for art1;
end for;
end first;
configuration second of nand is
for art2
end for;
end second;
36
例:一个对计数器实现多种形式的配置如下:
37
38
程序包:
已定义的常数、数据类型、元件调用说明、子程序的一个集合。
目的:方便公共信息、资源的访问和共享。
库:
多个程序包构成库。
四、 程序包、库
39
程序包说明的内容:
常量说明;
VHDL数据类型说明;
元件说明;
子程序说明;
程序包的结构包括:
程序包说明(包首)
程序包主体(包体)
40
包声明项可由以下语句组成:
use 语句(用来包括其它程序包);
类型说明;子类型说明;常量说明;
信号说明;子程序说明;元件说明。
package 程序包名 is
{ 包说明项 }
end 程序包名;
1、程序包说明(包首)
语法:
41
例:程序包说明
42
包体说明项可含:
use 语句;子程序说明;子程序主体;类型说明;子类型说明;常量说明。
package body 程序包名 is
{ 包体说明项 }
end 程序包名;
2、程序包包体
程序包的内容:子程序的实现算法。
包体语法:
43
程序包首与程序包体的关系:
程序包体并非必须,只有在程序包中要说明
子程序时,程序包体才是必须的。
程序包首可以独立定义和使用。如下:
44
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
45
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
b
c
d
e
f
g
46
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)
47
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
48
2)STD 库(默认库)
库中程序包为:standard,
定义最基本的数据类型:
Bit,bit_vector ,Boolean,
Integer,Real,and Time
注:Type Bit
2 logic value system (‘0’, ‘1’)
3)面向ASIC的库
4)WORK库(默认库)
5)用户定义库
49
4、库及程序包的使用
库及程序包的说明总是放在实体单元前面,
默认库及程序包可不作说明。用关健字library
说明要使用的库,用关健字 use 说明要使用的库中的程序包。
库及程序包的作用范围:仅限于所说明的设计实体。
每一个设计实体都必须有自已完整的库及程序包说明语句。
50
库、程序包
实体(Entity)
结构体
(Architecture)
进程 或其它并行结构
配置(Configuration)
51
库的使用语法:
程序包的使用有两种常用格式:
例:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.conv_integer;
library 库名;
use 库名.程序包名.项目名
use 库名.程序包名.All;
52
2 选 1 选择器:
53
2选1的另一种描述
54
四类语言要素:
数据对象(Data Object)
数据类型(Data Type)
操作数(Operands)
操作符(Operator)
*******************************************************************************
文章评论(0条评论)
登录后参与讨论