ZzSJm+&'
一、 VHDL是什么? T749@! v`z
1. 缩写 axt6u)4%7:
VHDL:Very High Speed Integrated Circuit Hardware Description Language ?d,acm
0`zm>fh}
2. 作用 #nt<j2}m
传统的数字系统设计分为硬件设计、软件设计,VHDL打破了传统的软、硬件设计界限 \["1N-q b
类似C、C++代替汇编等语言一样,VHDL代替了原理图、逻辑状态图 DRS;lJ2
电子系统设计者和EDA工具之间的桥梁 ZfF`kD\
EDA工具及 HDL的流行,促使电子系统向集成化、大规模和高速度等方向发展 &ij^FAM
3. VHDL与原理图描述的比较 jFK9?cLT
VHDL具有较强的抽象描述能力,可进行系统行为级别的描述。描述更简洁,效率更高; n$A(6]z5O
原理图描述必须给出完整的、具体的电路结构图,不能进行描象描述。描述繁杂,效率低; (*c`<|)
VHDL描述与实现工艺无关; p2M?pV
原理图描述与实现工艺有关 c'm-XL_La
4. VHDL语言特点 +Uc&%Px
VHDL具有强大的语言结构,系统硬件抽象描述能力强、设计效率高; AF07KA#
VHDL语言可读性强,易于修改和发现错误; 9'1;-^U1
VHDL具有丰富的仿真语句和库函数,可进行早期行为仿真,利于大系统的设计与验证; VbY>l' rY
VHDL设计与硬件电路关系不大; qugPs(uQ
VHDL设计不依赖于器件,与工艺无关 ]ys4
移植性好; BBZ)H6TzL
VHDL体系符合TOP-DOWN和CE设计思想; w2RESpi
VHDL设计效率高,产品上市时间快,成本低; =[O<.'aG-
易于ASIC实现 yBD.Cs@
5. 与其他语言比较 QB
oZCLv
常用硬件描述语言有VHDL、Verilog和ABEL语言。VHDL起源于美国国防部的VHSIC,Verilog起源于集成电路的设计,ABEL则来源于可编程逻辑器件的设计。VHDL语言是一种高级描述语言,适用于行为级和RTL级的描述,最适于描述电路的行为;Verilog语言和ABEL语言是一种较低级的描述语言,适用于RTL级和门电路级的描述,最适于描述门级电路。 <'+R%6
pU\xzL D
二、VHDL程序架构 P,+0
VHDL基本结构 V9);kD
实体(Entity) P+D|_3j
结构体(Architecture) \5v=pDd4g
配置(Configuration) ^y;OHo
库(Library)、程序包(Package) )PanJHtU
5Rt0h$_J
1. 实体 Entity Uz m[e%/`
作用:定义系统的输入输出接口 Jh/M}%@|
用法格式: Vtc)/OH
ENTITY <entity_name> IS cC(ubUR
Generic Declarations Q?I"J$]&L
Port Declarations hBs>2u|z9
END <entity_name>; (1076-1987 version) 1&>nL`E[3
END ENTITY <entity_name> ; (1076-1993 version) Iu)(Huv
1 {?kKpMNNn
2 WhVmycdv
3 R*c0NJF
4 M<|~MR
5 lpX p)r+
Generic:确定实体或组件中定义的局部常数。模块化设计时多用于不同层次模块之间信息的传递,可从外部改变内部电路和规模,必须放在端口说明之前 `U?H^,FVA
Generic ( |4 d{X@`&
常数名称:类型 [:= 缺省值] *<h
{常数名称:类型 [:= 缺省值]} V.G9J!?<P
); uk>/Il
1 Aj)<8
2 2+G:04eS,e
3 IQ27FV|3
4 BIB>U W
使用: (J) Rs`_
\]d*h]Hms
entity and2 is R4J>M@-0v
generic(risewidth: time:= 1 ns;fallwidth: time:= 1 ns); PtVNG
port(a1: in std_logic;a0: in std_logic;z0: out std_loigc); w[$Wpae
end entity and2; ztxQv5=:,
1 PezWc18
2 G5e Ls
3 0m|
Gp
4 "x) pp
端口声明:确定输入输出端口的数目和类型 j~0ZE
-e
Port ( m3v*,~
端口名称{,端口名称}:端口模式 数据类型; )9sr,3w
… \gW\Sa ^
端口名称{,端口名称}:端口模式 数据类型 S:GUR6g8D
); &Bdt+OQ ;
1 '[ddE!ta
2 SO jDtZ
3 !`S%l1[Z
4 V{^fH6;[
5 $vicHuX!
eg: mWFZg.#?
i:Ct6[
port(a1: in std_logic; a0: in std_logic; z0: out std_loigc); ~ !+h"%'t
1 |&pz,"(
补充 \?ws0Ax
1.端口模式的分类: mUY:S
|
in 输入型,此端口为只读型。 rM?Dp2
out 输出型,此端口只能在实体内部对其赋值 nQYS{`hk
inout 输入输出型,既可读也可赋值 71m-W#zyA
buffer 缓冲型,与 out 相似,但可读 }oxaB9r
{q>4:lsS
2.buffer、inout对比: OL9C#er
inout,输入输出双向端口,可读可写 t 6IaRD
buffer,为缓冲端口,可读可写,但要读入数据时,只允许内部回读内部产生的输出信号,即反馈 F'_8pD7
buffer,驱动只有一个源,不允许多重驱动,驱动源可以是其它实体的缓冲端口,也可以是设计实体的内部信号源,但不与其它实体的输出端口、双向端口相连 c(=O`%B{
buffer,仅仅是一个数据缓存器,不能用于IO输出 gkn/E}K#
8gKR<X.G
3.数据类型: jW0z|jr
指端口上流动数据的表达格式,为预先定义好的数据类型,如:bit、bit_vector、integer、real、std_logic、std_logic_vector 等 |JQP7z6j]
<"Cwy0V kp
2.结构体 Architecture 3jdB8a]T_
作用: nR'EuI~(}
定义系统(或模块)的行为、元件及内部的连接关系,即描述其逻辑功能。 GSb)|mj
组成部分: 4qXUk:C@m
-. 说明部分:对数据类型、常数、信号、子程序、元件等元素的说明 xla^A}{
-. 逻辑功能描述部分:以各种不同的描述风格描述系统的逻辑功能。常见的有行为描述/数据流描述以及结构化描述 !?M_%fNE
一个设计实体可有多个结构体,代表实体的多种实现方式。各个结构体的地位相同 O]LuL&=s y
k{w^MOHNg
3. 语法: Leick6
HNyDWD)_
architecture 结构体名称 of 实体名称 is A,[m=9V
[说明语句]内部信号、常数、 12DdUPOi
数据类型、子程序(函数、过程)、 !eoec2h#5
元件等的说明; 5GxM?%\
begin dw}3B8]
[并行处理(功能描述)语句]; d<m>H$\Dm
end [architecture] 结构体名称; s(9rBDoY(8
1 @Lv_\^2/}
2 +VCo=oA
3 $i]
M6<Vxn
4 M<m64{m1
5 d7zE8)D U7
6 tf79Gb>
7 C$;s+ALy[
注:同一实体的结构体不能同名。定义语句中的常数、信号不能与实体中的端口同名。 ?vNS!rY2&
Y6DiISl
使用方式: |MrH@v7S
@Iatlz*W
entity test1 is H)fo4N4ii
port(sig,count:in bit; b!P;xLcb
out1,out2:out bit); &t:MWb;
end test1; HON[{Oq
SLB iQd.
architecture Behavioral of test1 is Vta;ibdeqW
signal sig:bit; s'=]a-l~
constant const:bit:='1'; >c>ar>4xF
begin Q>*K/%KD
,$[lOFs
end Behavioral; ne*aC_)bT
1 x G"p.
2 % 7:
3 XArLL5_L
4 yYtki
5 !_#js
6 nu-wQr
7 DcDGrRuh
8 7U0):11X#
9 =S +:qk
10 #!@
]%4
11 ~WLsqP5Y~a
eg: lV="IP^7
hlEvL
architecture art2 of nand is NtL?cWct
begin (o=iX,@'2
c<=‘1’ when (a=‘0’) and (b=‘0’) else 3=I Q
‘1’ when (a=‘0’) and (b=‘1’) else Q+N @j]'
‘1’ when (a=‘1’) and (b=‘0’) else |@|D''u>6
‘0’ when (a=‘1’) and (b=‘1’) else K_.x(Z(;4
‘0’; IrM3Uh
end architecture art2; T^SOq:m&
KWMH|sxO=
1 5%/%i}e~(
2 ~vS.D r
3 (U<