《VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨1-6 第3章》由会员分享,可在线阅读,更多相关《VHDL硬件描述语言与数字逻辑电路设计 第三版 侯伯亨1-6 第3章(114页珍藏版)》请在金锄头文库上搜索。
1、,第3章 VHDL语言程序的基本结构,3.1 VHDL语言设计的基本单元及其构成 3.2 VHDL语言构造体的子结构描述 3.3 包集合、库及配置,一个完整的VHDL语言程序通常包含实体(Entity)、构造体(Architecture)、(Configuration)、包集合(Package)和库(Library)五部分。前四部分是可分别编译的源设计单元。实体用于描述所设计系统的外部接口信号;构造体用于描述系统内部的结构和行为; 包集合存放各设计模块都能共享的数据类型、常数和子程序等; 配置用于从库中选取所需单元来组成系统设计的不同版本;库存放已经编译的实体、构造体、包集合和配置。库可由用户
2、生成或由ASIC芯片制造商提供,以便于在设计中为大家所共享。本章将对上述VHDL设计的主要构成作一详细介绍。,图3-1 一个基本设计单元的构成,所谓VHDL语言设计的基本单元(Design Entity),就是VHDL语言的一个基本设计实体。一个基本设计单元,简单的可以是一个与门(AND Gate),复杂一点的可以是一个微处理器或一个系统。但是,不管是简单的数字电路,还是复杂的数字系统,其基本构成是一致的,它们都由实体说明(Entity Declaration)和构造体(Architecture Body)两部分构成。,3.1 VHDL语言设计的基本单元及其构成,如前所述,实体说明部分规定了设
3、计单元的输入、输出接口信号或引脚,而构造体部分定义了设计单元的具体构造和操作(行为)。图3-1示出了作为一个设计单元的二选一电路的VHDL描述。由图3-1可以看出,实体说明是二选一器件外部引脚的定义,构造体则描述了二选一器件的逻辑电路和逻辑关系。 下面以二选一器件描述为例来说明这两部分的具体书写规定。,3.1.1 实体说明 任何一个基本设计单元的实体说明都具有如下结构: ENTITY 实体名IS 类属参数说明; 端口说明; END ENTITY 实体名; 一个基本设计单元的实体说明以“ENTITY 实体名 IS”开始至“END ENTITY 实体名”结束。例如,在图3-1中从“ENTITY m
4、ux IS”开始,至“END ENTITY mux”结束。这里大写字母表示实体说明的框架,即每个实体说明都应这样书写,是不可缺少和省略的部分;,小写字母是设计者添写的部分,随设计单元不同而不同。实际上,对VHDL而言,大写或小写都一视同仁,不加区分。这里仅仅是为了阅读方便才加以区分而已。,1类属参数说明 类属参数说明必须放在端口说明之前,用于指定参数,例如图3-1中的GENERIC(m:TIME:=1 ns)。该语句指定了构造体内m的值为1 ns。这样语句: tmp1:=d0 AND sel AFTER m; 表示d0和sel两个输入信号相与后,经1 ns延迟才送到tmp1。在这个例子中,GE
5、NERIC利用类属参数为tmp1建立一个延迟值。,2端口说明 端口说明是对基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称、数据类型,以及输入、输出方向的描述。其一般书写格式如下: PORT(端口名,端口名:方向 数据类型名; 端口名,端口名:方向 数据类型名);,1) 端口名 端口名是赋予每个外部引脚的名称,通常用一个或几个英文字母,或者英文字母加数字来命名。例如,图3-1中的外部引脚为d0、d1、sel、q。,2) 端口方向 端口方向用来定义外部引脚的信号方向是输入还是输出。例如,图3-1中的d0、d1、sel为输入引脚,故用方向说明符“IN”来说明,而q则为输出引脚,
6、用方向说明符“OUT”来说明。 凡是用“IN”进行方向说明的端口,其信号自端口输入到构造体,而构造体内部的信号不能从该端口输出;相反,凡是用“OUT”进行方向说明的端口,其信号将从构造体内经端口输出,而不能通过该端口向构造体输入信号。,另外,“INOUT”用以说明该端口是双向的,可以输入,也可以输出;“BUFFER”用以说明该端口可以输出信号,且在构造体内部也可以利用该输出信号。表示方向的说明符及其含义如表3-1所示。,表3-1 端口方向说明,注:OUT允许对应多个信号,而BUFFER只允许对应一个信号。,表3-1中的“OUT”和“BUFFER”都可以定义输出端口,但是它们之间是有区别的,如图
7、3-2所示。 在图3-2(a)中,锁存器的输出端口被说明为“OUT”,而在(b)中,锁存器的输出被说明为“BUFFER”。从图中可以看到,如果构造体内部要使用该信号,那么锁存器的输出端必须被说明为“BUFFER”,而不能被说明为“OUT”。 图3-2(b)说明当一个构造体用“BUFFER”说明输出端口时,与其连接的另一个构造体的端口也要用“BUFFER”说明。对于“OUT”,则没有这样的要求。,图3-2 OUT和BUFFER的区别 (a) OUT;(b) BUFFER,3) 数据类型 在VHDL语言中有10种数据类型,但是在逻辑电路设计中只用到两种:BIT和BIT_VECTOR。 当端口被说明
8、为BIT数据类型时,该端口的信号取值只可能是“1”或“0”。注意,这里的“1”和“0”是指逻辑值。所以,BIT数据类型是位逻辑数据类型,其取值只能是两个逻辑值(“1”和“0”)中的一个。当端口被说明为BIT_VECTOR数据类型时,该端口的取值可能是一组二进制位的值。例如,某一数据总线输出端口具有8位的总线宽度,那么这样的总线端口的数据类型可以被说明为BIT_VECTOR。总线端口上的值由8位二进制位的值所确定。,【例3-1】 较完整的端口说明。 PORT(d0,d1,sel: IN BIT; q: OUT BIT; bus: OUT BIT_VECTOR(7 DOWNTO 0); 该例中d0
9、、d1、sel、q都是BIT数据类型,而bus是BIT_VECTOR类型,(7 DOWNTO 0)表示该bus端口是一个8位端口,由B7B0共8位构成。位矢量长度为8位。 在某些VHDL语言的程序中,数据类型的说明符号有所不同。,【例3-2】 VHDL语言程序中数据类型的不同说明符号。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux IS PORT (d0,d1,sel: IN STD_LOGIC; q: OUT STD_LOGIC; bus: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END ENTITY
10、mux;,该例中BIT类型用STD_LOGIC说明,而bus用STD_LOGIC_VECTOR(7 DOWNTO 0)说明。上述两例的描述实际上是完全等效的。在VHDL语言中存在一个库,该库有一个包集合,专门对数据类型作了说明,其作用像C语言中的include文件一样。这样做主要是为了标准和统一。但是在用STD_LOGIC和STD_LOGIC_VECTOR说明时,在实体说明以前必须增加例中所示的两个语句,以便在对VHDL语言程序编译时,从指定库的包集合中寻找数据类型的定义。,在93版的端口映射中还可使用常量表达式,例如: u2:and2 PORT MAP(a=nsel,b=dl,c=ab);
11、其中,a、b是“与门”的输入端;c是输出端;nsel、dl和ab是信号量或输入端口名,映射的对象都是信号量。但是,在93版中这种情况已有了拓展,映射的对象可以是一个常量表达式。例如: M1:mux PORT MAP(sel=TO_MVL(code), d0=TO_MVL(bus(0),d1=TO_MVL(bus(1), TO_BIT(2)=ctrl);,该例说明二选一选择器的输入端为sel、d0、d1。这里映射的是函数表达式sel=TO_MVL (code)、d0=TO_MVL(bus(0)等。实际上,选择器选择输入端sel代入的是函数TO_MVL(code)返回的值,其它各端也类同。,3.1
12、.2 构造体 构造体是一个基本设计单元的功能描述体,它具体指明了该基本设计单元的行为、元件及内部的连接关系。也就是说,它定义了设计单元的具体功能。构造体对其基本设计单元的输入、输出关系可以用3种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)。不同的描述方式只体现在描述语句上,而构造体的结构是完全一样的。,由于构造体是对实体功能的具体描述,因此它一定要跟在实体的后面。通常,先编译实体之后才能对构造体进行编译。如果实体需要重新编译,那么相应的构造体也应重新进行编译。,一个构造体的具体结构描述如下: ARCHITECTURE 构造体
13、名 OF 实体名 IS 定义语句内部信号,常数,数据类型,函数等的定义; BEGIN 并行处理语句; END ARCHITECTURE 构造体名; 一个构造体从“ARCHITECTURE 构造体名 OF 实体名 IS”开始,至“END ARCHITECTURE 构造体名”结束。下面对构造体的有关内容和书写方法作一说明。,1构造体名称的命名 构造体的名称是对本构造体的命名,它是该构造体的唯一名称。OF后面紧跟的实体名表明了该构造体所对应的是哪一个实体。用IS来结束构造体的命名。 构造体的名称可以由设计者自由命名。但是在大多数文献和资料中,通常把构造体的名称命名为behavioral(行为)、da
14、taflow(数据流)或者structural(结构)。如前所述,这3个名称实际上是3种构造体描述方式的名称。当设计者采用某一种描述方式来描述构造体时,该构造体的结构名称就命名为那一个名称。,这样使得阅读VHDL语言程序的人能直接了解设计者所采用的描述方式。例如,使用结构描述方式来描述二选一电路,那么二选一电路的构造体就可以这样命名: ARCHITECTURE structural OF mux IS,2定义语句 定义语句位于ARCHITECTURE和BEGIN之间,用于对构造体内部所使用的信号、常数、数据类型和函数进行定义。例如: ARCHITECTURE behav OF mux IS S
15、IGNAL nes1:BIT; BEGIN END ARCHITECTURE behav;,信号定义和端口说明的语句一样,应有信号名和数据类型的说明。因它是内部连接用的信号,故没有也不需有方向的说明。,3并行处理语句 并行处理语句处于语句BEGIN和END之间,这些语句具体地描述了构造体的行为及其连接关系。,【例3-3】 二选一的数据流方式描述。 ENTITY mux IS PORT (d0, d1:IN BIT; sel:IN BIT; q:OUT BIT); END ENTITY mux; ARCHITECTURE dataflow OF mux IS BEGIN q=(d0 AND se
16、l)OR(NOT sel AND d1); END ARCHITECTURE dataflow;,在该程序的构造体中所使用的语句,实际上是二选一的逻辑表达式的描述语句。它正确地反映了二选一器件的行为。这种语句和其它高级语言是相当类似的,读者只要有一点基本的高级语言知识就可以读懂。在上述语句中,符号“=”表示传送(或代入)的意思,即将逻辑运算结果送q输出。 在构造体中的语句都是可以并行执行的。也就是说,语句的执行不以书写的语句顺序为执行顺序。,在规模较大的电路设计中,全部电路都用唯一的模块来描述是非常不方便的。为此,电路设计者总希望将整个电路分成若干个相对比较独立的模块来进行电路的描述。这样,一个构造体可以用几个子结构,即相对比