VHDL语言的基本单元(实体和结构体)

VHDL语言设计的基本单元就是VHDL语言的一个基本设计实体(Entity)。

一个实体,简单的可以是一个与门,复杂点的可以是一个微处理器或一个系统。但是,不管是简单的数字电路,还是复杂的数字电路,其基本构成是一致的,都由实体说明(Entity Declaration)和构造体(Architecture Body)两部分构成。

实体说明部分规定了设计单元的输入输出接口信号或引脚,而构造体部分定义了设计单元的具体构造和行为。

例1示出了二选一电路的VHDL描述。由例1可以看出,实体说明是二选一器件外部引脚的定义;而构造体则描述了二选一器件的逻辑电路和逻辑关系。

【例1】 二选一电路的VHDL描述

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

-- ENTITY DECLARATION

ENTITY mux IS

PORT (d0,d1,sel:IN STD_LOGIC;

q:OUT STD_LOGIC);

END mux;

-- ARCHITECTURE BODY

ARCHITECTURE connect OF mux IS

SIGNAL tmp:STD_LOGIC;

BEGIN

PROCESS(d0,d1,sel)

BEGIN

tmp <= (d0 AND sel) OR (d1 AND (NOT sel));

q <= tmp;

END PROCESS;

END connect;

下面以本段程序为例,说明一下实体和构造体的书写规定。

一、实体

任何一个基本设计单元的实体说明都具有如下的结构:

ENTITY 实体名 IS

【类属参数说明】;

【端口说明】;

END 实体名;

一个基本设计单元的实体说明以“ENTITY 实体名 IS”开始至“END 实体名”结束。

例如在上面例子中从“ENTITY mux IS”开始至“END mux”结束。

  • 这里大写字母表示实体说明的框架,即每个实体说明都应这样书写,是不可缺少和省略的部分。

  • 小写字母是设计部分,随设计单元不同而不同。

实际上,VHDL不区分大小写,这里仅仅是为了阅读方便而加以区分的。

1.类属参数说明

类属参数说明必须放在端口说明之前,用于指定参数,例1中没体现类属说明语句,具体书写范例如下:

GENERIC ( m: TIME: = 1 ns)

该语句指定了m的值为1。

2.端口说明

端口说明是对基本设计实体与外部接口的描述,也可以说是对外部引脚信号的名称、数据类型和输入、输出方向的描述。其书写格式如下:

PORT(端口名{,端口名}:方向 数据类型名;

端口名{,端口名}:方向 数据类型名);

(1)端口名

端口名是赋予每个外部引脚的名称,通常用一个或几个英文字母,或者用英文字母加数字命名之。例如例1中的外部引脚为d0,d1,sel,q。

(2)端口方向

端口方向用来定义外部引脚的信号方向是输入还是输出。例如,例1中的d0,d1,sel为输入引脚,故用方向说明符“IN”说明之,而q则为输出引脚,用方向说明符“OUT”说明之。

  • 凡是用“IN”进行方向说明的端口,其信号自端口输入到构造体,而构造体内部的信号不能从该端口输出。

  • 相反,凡是用“OUT”进行方向说明的端口,其信号将从构造体内经端口输出,而不能通过该端口向构造体内输入信号。

  • 另外,“INOUT”用以说明该端口是双向的,可以输入也可以输出

  • “BUFFER”用以说明该端口可以输出信号,且在构造体内部也可以利用该输出信号。

表示方向的说明符及其含义如表2.1所示。

表2.1 端口方向说明

注:OUT允许对应多个信号,BUFFER只允许对应一个

表2.1中“OUT”和“BUFFER”都可以定义为输出端口,但是它们之间是有差别的,如图1所示。

(a) (b) 图2 .1 OUT和BUFFER的区别

在图2.1(a)中,锁存器的输出端口被说明为“OUT”,而在(b)中,锁存器的输出被说明为“BUFFER”。从图中可以看到,如果构造体内部要使用该信号,那么锁存器的输出端必须说明为“BUFFER”,而不能用“OUT”说明。

图2.1(b)说明了,当一个构造体用“BUFFER”说明输出端口时,与其连接的另一个构造体的端口也要用“BUFFER”说明。对于“OUT”则没有这样的要求。

如下两例说明了端口方向的使用方法。

【例2】并行口通信芯片8255,其端口定义为:

ENTITY i8255 IS

PORT(

reset,cs:IN STD_LOGIC;

rd,wr:IN STD_LOGIC;

a1,a0:IN STD_LOGIC;

pa,pb:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);

pcl,pch:INOUT STD_LOGIC_VECTOR(3 DOWNTO 0);

d:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END i8255;

根据电路定义,所有的控制信号和地址信号都是输入模式IN,而其3个端口以及与总线相连的数据端口都是双向的,因此定义为双向模式INOUT。

【例3】定时/计数器芯片8253,其端口定义为:

ENTITY i8253 IS

PORT(

rd,wr,cs,a1,a0:IN STD_LOGIC;

clk0,clk1,clk2:IN STD_LOGIC;

gate0,gate1,gate2:IN STD_LOGIC;

out0,out1,out2:BUFFER STD_LOGIC;

d:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END i8253;

与8255一样,8253的控制与地址信号是输入模式,而连接总线的数据端口是双向模式。由于计数器的输出out要被用来决定下一个状态,而这个输出又不能连接别的输出或双向瑞口,因此将其定义成缓冲端口。

(3)数据类型

在VHDL语言中有10种数据类型,但是在逻辑电路设计中只用到两种:STD_LOGIC和STD_LOGIC_VECTOR。

  • 当端口被说明为STD_LOGIC数据类型时,该端口的信号取值只可能是“1”或“0”。这里的“1”和“0”是指逻辑值,也就是说STD_LOGIC数据类型是位逻辑数据类型,其取值只能是两个逻辑值(“1”和“0”)中的一个。

  • 当端口被说明为STD_LOGIC_VECTOR数据类型时,该端口的取值可能是一组二进制位的值。例如,某一数据总线输出端口,具有8位的总线宽度。那么这样的总线端口的数据类型可以被说明成STD_LOGIC_VECTOR。总线端口上的值由8位二进制位的值所确定。较完整的端口说明下例所示。

【例4】

PORT(d0,d1,sel:IN STD_LOGIC

q:OUT STD_LOGIC

bus:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);

该例中d0,d1,sel,q都是STD_LOGIC数据类型,而bus是STD_LOGIC_VECTOR类型,

(7 DOWNTO 0)表示该bus端口是一个8位端口,由B7-B0 8位构成。位矢量长度为8位。

二、 构造体

构造体是一个基本设计单元,它具体地指明了该基本设计单元的行为、元件及内部的连接关系,也就是说它定义了设计单元具体的功能。

构造体对其基本设计单元的逻辑关系可以用3种方式进行描述,即行为描述(基本设计单元的数学模型描述)、寄存器传输描述(数据流描述)和结构描述(逻辑元件连接描述)。不同的描述方式,只体现在描述语句上,而构造体的结构是完全一样的。由于构造体是对实体功能的具体描述,因此它一定要跟在实体的后面。通常,先编译实体之后才能对构造体进行编译。如果实体需要重新编译,那么相应构造体也应重新进行编译

一个构造体的具体结构描述如下:

ARCHITECTURE 构造体名 OF 实体名 IS

[定义语句] 内部信号,常数,数据类型,函数等的定义;

BEGIN

[并行处理语句];

END 构造体名

一个构造体从“ARCHITECTURE 构造体名 OF 实体名 IS”开始,至“END 构造体名”结束。下面对构造体的有关内容和书写方法作一说明。

1.构造体名称的命名

构造体的名称是对本构造体的命名,它是该构造体的唯一名称。OF后面紧跟的实体名表明了该构造体所对应的是哪一个实体,用IS来结束构造体的命名。

2.定义语句

定义语句位于ARCHITECTURE和BEGIN之间,用于对构造体内部所使用的信号、常数、数据类型和函数进行定义。例如:

ARCHITECTURE behav OF mux IS

SIGNAL nesl:STD_LOGIC;

BEGIN

END behav;

信号定义和端口说明的语句一样,应有信号名和数据类型的说明。因它是内部连接用的信号,故没有也不需有方向的说明。

3.并行处理语句

并行处理语句处于语句BEGIN和END之间,这些语句具体地描述了构造体的行为及其连接关系。在构造体中的语句都是可以并行执行的,也就是说,语句的执行不以书写的语句顺序为执行顺序

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目 次 21 6.5 参数化元件实例......................................................... 20 6.4 程序包书写实例......................................................... 19 6.3 函数书写实例 .......................................................... 17 6.2 VHDL 编写范例......................................................... 17 6.1 VHDL保留字........................................................... 16 6 附录 .................................................................... 15 5.2.5 多赋值语句案例三态总线............................................ 15 5.2.4 避免使用Latch ...................................................... 15 5.2.3 考虑综合的执行时间................................................. 14 5.2.2组合逻辑描述的多种方式.............................................. 14 5.2.1 资源共享问题...................................................... 14 5.2 代码编写中容易出现的问题................................................ 13 5.1 代码模块划分 .......................................................... 13 5.1.13 TAB键间隔....................................................... 13 5.1.12.1 Comments 使用建议 ............................................ 13 5.1.12 Comments ........................................................ 13 5.1.11.1 FSM 使用规定 ................................................ 13 5.1.11 FSM 有限状态机 ................................................ 13 5.1.10.2package 使用注意内容........................................... 12 5.1.10.1 package 使用建议.............................................. 12 5.1.10 package .......................................................... 12 5.1.9.1 generic 使用注意内容............................................ 12 5.1.9 类属( generics) ...................................................... 12 5.1.8.2 procedure 使用注意内容 .......................................... 12 5.1.8.1 procedure 使用规定.............................................. 12 5.1.8 procedure .......................................................... 11 5.1.7.3 function 使用注意内容 ........................................... 11 5.1.7.2 function 使用建议............................................... 11 5.1.7.1 function 使用规定............................................... 11 5.1.7 function .......................................................... 11 5.1.6.2比较运算符规定 ................................................ 11 5.1.6.1 表达式书写规定................................................ 11 5.1.6 运算符(operator) .................................................... 11 5.1.5.3 VHDL 语句使用注意内容......................................... 10 5.1.5.2 VHDL 语句使用建议............................................ 7 5.1.5.1VHDL各语句使用规定 ............................................. 7 5.1.5 语句.............................................................. 6 5.1.4.3 实体使用注意内容 ............................................... 6 5.1.4.2 实体使用建议................................................... 4 5.1.4.1 实体结构体使用规定 ........................................... 4 5.1.4 实体.............................................................. 4 5.1.3.3 信号变量使用注意内容.......................................... 4 5.1.3.2 变量使用建议................................................... 4 5.1.3.1 信号不许赋初值 ............................................... 4 5.1.3 信号和变量......................................................... 4 5.1.2.3 数据使用注意内容 ............................................... 3 5.1.2.2 数据及数据类型使用建议 ......................................... 3 5.1.2.1类型使用规定................................................... 3 5.1.2数据对象和类型...................................................... 3 5.1.1.6 信号命名有关建议 ............................................... 2 5.1.1.5 信号名一致性规定............................................... 2 5.1.1.4 信号名缩写的大小写规定.......................................... 2 5.1.1.3 信号名连贯缩写的规定............................................ 2 5.1.1.2标识符大小写规定................................................ 2 5.1.1.1标识符定义命名规定 .............................................. 2 5.1.1 标识符Identifiers)命名习惯............................................ 1 5.1 VHDL编码风格.......................................................... 1 5 规范内容.................................................................. 1 4 引用标准和参考资料......................................................... 1 3 定义 ..................................................................... 1 2 范围 ..................................................................... 1 1 目的 .....................................................................
引用中提到,掌握VHDL可以帮助我们获取更多资料和书籍,尤其是一些国外的数字***使用方法。所以,学习VHDL可以通过结合教材和语法书籍的学习来提高效果。 在VHDL中,我们可以使用实体entity)和结构(architecture)来描述一个器件的功能和工作逻辑。实体描述器件的外部接口信号,而结构描述器件的内部工作逻辑。引用中给出了一个mux21(2选1选择器)的VHDL代码示例。在这个示例中,使用了IEEE标准库说明,并定义了输入信号a、b、s和输出信号y。根据s的值,输出信号y的值会选择输入信号a或b。 引用指出,根据不同版本的VHDL语法要求,实体和结构的结尾语句可以略有不同。在VHDL 1993版本中,结尾语句应写为"END ENTITY MUX21"和"END ARCHITECTURE ONE",而在VHDL 87版本中则可以简写为"END MUX21"和"END ONE"。 在VHDL中,赋值操作要求赋值目标和赋值源的数据类型必须严格一致。变量的赋值使用":=",而信号的赋值使用"<="。这样可以确保在设计中没有类型不匹配的错误。 综上所述,VHDL是一种用于描述数字电路的硬件描述语言,通过实体和结构的组合来描述器件的功能和工作逻辑。学习VHDL可以帮助我们获取更多的资料和书籍,并且使用正确的赋值操作可以确保设计中没有类型不匹配的错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值