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

news/2024/11/29 7:56:34/

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之间,这些语句具体地描述了构造体的行为及其连接关系。在构造体中的语句都是可以并行执行的,也就是说,语句的执行不以书写的语句顺序为执行顺序


http://www.ppmy.cn/news/866364.html

相关文章

VHDL 计数器实验看VHDL语言

之前的eda课都在划水…利用这个程序来总结一下eda的语法 二十进制计数器 其实二十进制计数器原理很简单。跟随时钟信号相加&#xff0c;即用语句Q Q 1从0到19&#xff0c;当读到19的时候又回到0 其实就是下面的process语句&#xff0c;而clk event那一句其实就是确保&#x…

计算机组成原理VHDL语言实现16位ALU实验

计算机组成原理实验第二个&#xff0c;VHDL语言&#xff0c;ISE设计环境设计一个16位的ALU。 资源下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1cyhJ2ZynUMMFnYi2YOIMmA 提取码&#xff1a;0upp library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGI…

(萌新的数电学习)用VHDL语言设计简易模型机结构

实验背景&#xff1a; 计算机的工作过程可以看作是许多不同的数据流和控制流在机器各部分之间的流动&#xff0c;数据流所经过的路径称作机器的数据通路。数据通路不同&#xff0c;指令执行所经过的操作过程就不同&#xff0c;机器的结构也就不一样。 VHDL语言 library ieee;…

基于VHDL语言的状态机设计

基于VHDL语言的状态机&#xff08;FSM&#xff09;设计 状态机(Finite State Machine,FSM) 状态机的组成:如图所示 状态机的种类&#xff1a; Mealy型&#xff1a;当前状态、当前输入相关Moore型&#xff1a;仅当前状态相关VHDL代码结构&#xff1a;时序逻辑部分&#xff1a…

VHDL语言掌握——北京理工大学集成电路设计实践一

实验一&#xff1a;4通道分频器的设计 一、实验目的 &#xff08;1&#xff09;熟悉软件环境 &#xff08;2&#xff09;理解用VHDL进行设计综合的流程和方法 &#xff08;3&#xff09;掌握VHDL的代码结构及电路描述方法 &#xff08;4&#xff09;理解并行语句和顺序语句…

VHDL硬件描述语言(三)VHDL语言要素

一、文字规则 1.1 标识符 标识符主要用来为端口、信号、变量、子程序、常数和参数等命名。 其规则如下&#xff1a; 有效的字符&#xff1a;包括26个大小写英文字母&#xff0c;数字包括0&#xff5e;9 以及下划线“_”任何标识符必须以英文字母开头下划线“_”的前后必须有…

关于VHDL语言书写格式的学习(使用quartus Ⅱ)

本文并不是对VHDL的系统的讲解&#xff0c;而是我认为的关键部分&#xff0c;知道了这些&#xff0c;基本上可以使用VHDL语言进行一些相应的设计。并且在使用的过程中发现问题&#xff0c;再进行一些相应的检索&#xff0c;深入学习&#xff0c;最后达到精通。 首先要明白VHDL是…

vhdl计算机语言,vhdl语言编程实例.doc

vhdl语言编程实例 实现各种逻辑功能&#xff1a; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY louji1a IS PORT(S: IN STD_LOGIC_VECTOR(2 DOWNTO 0); C: IN STD_LOGIC; A: IN STD_LOGIC_VECTOR(4 DOWNTO 0); B: IN STD_LOGIC_VECTOR…