EDA
技术
――VHDL 语言基础
――
概述
1.
常见英文缩写解释(按字母顺序排列)
:
ASIC: Application Specific Integrated Circuit.
专用
IC
CPLD: Complex Programmable Logic Device.
复杂可编程逻辑器件
EDA:
Electronic Design Automation.
电子设计自动化
FPGA: Field Programmable Gate Array.
现场可编程门阵列
GAL:
Generic Array Logic.
通用阵列逻辑
HDL:
Hardware Description Language.
硬件描述语言
IP:
Intelligent Property.
智½模块
PAL:
Programmable Array Logic.
可编程阵列逻辑
寄存器传输级(描述)
RTL:
Register Transfer Level.
SOC:
System On a Chip.
片上系统
SLIC:
System Level IC.
系统级
IC
VHDL: Very high speed integrated circuit Hardware Description Language.
超高速集成电路硬件描述语言
第一章
VHDL
基本结构
内容:1.1
实½
1.2
结构½
1.3
块、子程序和进程
1.4
库和程序包
1.5
配½
一个完整的
VHDL
程序,通常要求最½½为
VHDL
综合器所支持,并½½
为一个独立的设计单元,
即以元件的½式存在的
VHDL
程序。
VHDL
程序中,
在
通 常 包 含 实 ½ (
ENTITY
)、 结 构 ½ (
ARCHITECTURE
)、 配 ½
(CONFIGURATION)
、包集合(PACKAGE)和库(LIBRARY)5 个部分。其
中实½和结构½这两个基本结构是必需的,他们可以构成最简单的
VHDL
程序。
1.1
实½
实½是
VHDL
语言源代码的基本单元,
实½说明是对所设计电路与外部电路
进行接口的描述,
它规定了设计单元的输入输出接口信号或引脚,
是设计实½对
外的一个通信界面。
实½语句结构如下:
ENTITY
实½名
IS
[GENERIC(类属表)
;]
[PORT(端口表)
;]
END ENTITY
实½名;
例:
ENTITY or2
IS
PORT(a,b:IN STD_LOGIC;
½:OUT
STD_LOGIC);
END ENTITY or2;
1.1.1
类属参量(GENERIC)
类属参量是实½说明中的可选项,½½在端口说明之前,其一般格式为:
GENERIC [CONSTANT]
名字表:[IN] 子类型标识
[:=
静态表达式],…]
类属参量是一种端口界面常数,常用来规定端口的大小、
实½中子元件的数
目及实½的定时特性等。
设计者可以从外面通过类属参量的重新设定而容易的改
变一个设计实½或一个元件的内部电路结构和规模。
例:
GENERIC
(trise,tfall:TIME:=1ns;
Addrwidth:INTEGER:=16);
PORT(a0, a1 : IN STD_LOGIC;
Add_bus:OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0);
这里类属参量中参数
trise
为上升沿½度,
tfall
为下降沿½度,
用于仿真模块的设
计;定义地址总线的½度为
Addrwidth
½,类属值
Addrwidth
的改变将½结构½
中所有相关的总线定义同时改变,由此½整个设计实½的硬件结构发生变化。
1.1.2
端口说明(PORT)
端口为所设计电路与外部电路连接通道的说明,
是对设计单元与外部接口的
描述,其功½相½电路图符号的外部引脚。端口可以被赋值,也可以½做逻辑变
量用在逻辑表达式中。
其一般书写格式为:
PORT
(端口名 :端口模式 数据类型;
……
端口名 :端口模式 数据类型)
;
其中端口名是设计者为实½的每一个对外通道所取的名字,
通常为英文字母加数
字。端口模式是指这些通道上的数据流动的方式,如输入或输出等。
端口模式有以下几种类型:
输入(IN) 输出(OUT) 双向模式(INOUT)
;
;
;缓冲(BUFFER)
。端口
模式可用图下说明,图中方框代表一个设计实½或模块。
IN
OUT
INOUT
BUFFER
从端口的名称、模式就½一目了然地指导信号的用途、性质、来源和去向。
1.2
结构½
结构½也叫构造½,结构½描述了所设计电路的结构、行为、元件及内部连
接关系,
也就是说它定义了电路的逻辑功½。结构½对其逻辑功½的描述可用以
下三种方式,即行为描述(设计单元的数学模型描述)
、寄存器传输描述(数据
流描述)和结构描述(逻辑元件连接描述)
。
结构½一般由两大部分组成:
1.对数据类型、常数、信号、子程序和元件等因素进行说明、定义的部分;
2.描述实½的逻辑行为、以各种不同的描述风格表达的功½描述语句,包括各
种顺序语句和并行语句。
结构½的语句格式为:
ARCHITECTURE
结构½名
OF
实½名
IS
[定义语句]
BEGIN
[功½描述语句]
END
结构½名;
1.2.1
结构½名
结构½名由设计者自行定义,通常用
dataflow(数据流)
、behave(行为)
、
structural(结构)½名。这 3
个名称½现了
3
种不同结构½的描述方式,½得阅
读
VHDL
语言程序时,½直接了解设计者采用的描述方式。
1.2.2
结构½信号定义语句
结构½信号定义语句必须放在关键词
ARCHITECTURE
和
BEGIN
之间,用
常数、
数据类型、
元件、
½数和过程加以说明。
于对结构½内部将要½用的信号、
需要注意的是结构½定义的信号为该结构½的内部信号,
它只½用于这个结
构½中。
例:结构½的信号定义实例。
ARCHITECTURE rtl OF muj IS
SIGNAL s1:BIT;
SIGNAL s2,s3:STD_LOGIC_VECTOR (0 TO 3);
……
BEGIN
……
END rtl;
1.2.3
结构½功½描述语句
结构½功½描述语句½于
BEGIN
和
END
之间,具½地描述了电路的行为、
功½或连接关系。
结构½的功½描述语句可以含有
5
种不同类型的并行语句,
如
下图所示。
图中
5
种功½描述语句的基本组成和功½分
别是:
ARCHITECTURE
块语句是由一系列并行语句构成的组合
½,它的功½是将结构½中的并行语句组成
一个或多个子模块,增加程序的可读性。
进程语句定义顺序语句模块,用以将从
外部获得的信号值或内部运算数据向其他信
号进行赋值。
信号赋值语句将设计实½内的处理结果
向定义的信号或界面端口进行赋值。
子程序调用语句可以调用进程或参数,
并将获得的结果赋值于信号。
元件例化语句对其他的设计成果做元件
调用说明,并将此元件的端口与其他元件、
信号或高层实½的界面端口进行连接。
各语句后面将介绍
例:
2
选
1
数据选择器
ENTTITY mux2 IS
)
句语化例件元
句语用调序程子
句语值赋号信
)SSECORP(句语程进
)KCOLB(句语块
句语述描½功
句语明说
(
½构结
(d0,d1:IN
BIT;
sel:IN BIT;
s:OUT BIT)
;
END mux2;
ARCHITECTURE dataflow OF mux2 IS
SIGNAL sig:BIT;
BEGIN
Sig <= (d0 AND sel) OR (NOT sel AND d1);
S<=sig;
END dataflow;
1.3
块、子程序和进程
1.3.1
块语句(BLOCK)
在较大规模的电子系统设计中,
传统的硬件电路设计通常包括一张系统总电
路原理图和若干张子原理图。在
VHDL
程序设计中,结构½是由多个
BLOCK
块构成的,如果将结构½比做总电路原理图,那么,每个
BLOCK
块则相½于一
张子原理图。
BLOCK
块语句的结构:
块标号:BLOCK
接口说明
类属说明
BEGIN
并行块语句
END BLOCK(块标号)
;
例:
B1: BLOCK
SIGNAL s1:BIT;
BEGIN
s1 <= a AND b;
B2: BLOCK
SIGNAL s2:BIT;
BEGIN
s2<= c AND d;
B3: BLOCK
BEGIN
Z <= s2;
END BLOCK B3;
END BLOCK
B2;
y<= s1;
END BLOCK
B1;
1.3.2
进程(PROCESS)
PROCESS
结构是最½½现
VHDL
语言特色的语句。与
BLOCK
语句一样,
利用
PROCESS
语句结构可以描述一个功½独立的电路。与
BLOCK
语句不同之
处是,在系统仿真时,PROCESS
结构中的语句是按顺序逐条向下执行的,而不
像
BLOCK
语句那样并发执行。一个结构½中可以有多个并行运行的进程结构,
每一个进程内部是由一系列顺序语句来构成的。
PORT
PROCESS
语句的结构
[进程标号] PROCESS [(敏感信号表)] [IS]
[进程说明语句]
BEGIN
顺序描述语句
END PROCESS [进程标号];
注意:在多个进程的结构½描述中,进程标号是区分各个进程的标志。½是进程
标号并不是必需的。单进程以
PROCESS
开始,以
END PROCESS
结束。
例:两输入或非门
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY nor2_v2 IS
PORT(a,b: IN STD_LOGIC;
y: OUT STD_LOGIC);
END nor2_v2;
ARCHITECTURE behave OF nor2_v2 IS
BEGIN
PROCESS (a,b)
VARIABLE comb : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
comb := a & b;
CASE comb IS
WHEN "00"=> y <='1';
WHEN "01"=> y <='0';
WHEN "10"=> y <='0';
WHEN "11"=> y <='0';
WHEN OTHERS => y <='X';
END CASE;
END PROCESS;
END behave;
1.3.3
子程序(SUBPROGRAM)
VHDL
程序与其他½件语言程序中应用子程序的目的是相似的,
即½够更有
效地完成重复性的工½。子程序模块是利用顺序语句定义和完成算法的,
½子程
序不½像进程那样可以从本结构½的其他块或进程结构中读取信号值或向信号
赋值,只½通过子程序调用与子程序的界面端口进行通信。
子程序被调用时,首先要初始化,执行处理功½后,将处理结果传递给主程
序。子程序内部的值不½保持,子程序返回后才½被再次调用并初始化。
子程序有两种类型:过程(PROCEDURE)和½数(FUNCTION)
。
1.过程(PROCEDURE)
过程语句的书写格式为:
PROCEDURE
过程名(参数表)IS
[说明部分]
BEGIN
过程语句部分
评论