第四章 VHDL语言构造体的描述
VHDL语言第四章VHDL语言构造体描述方式
具有传输延时的代入语句如下所示:
b<=TRANSPORT a AFTER 20ns; 语句中“TRANSPORT”是专门用于说明传输延时的前 置词。
举例
下面左图的门电路的惯性延时用传输延时来替代,那么就可 以得到如下面右图的波形结果。从下面右图波形可以看到,同样 门电路,当有10ns的脉冲波形输入时,经20ns传输延时以后,在 输出端就产生10ns的脉冲波形。也就是说,输出端的信号除延时 规定时间外,将完全复现输入端的输入波形,而不管输入波形的 形状和宽窄如何。
c<=a AND b AFTER 5ns; END and2_behav;
举例2
用行为描述方式描述四选一电路。
6个输入端口和一个输出端口。a和 b是选择信号输入端口
条件信号代 入语句
选择信号代入语句 根据选择型号 sel 当 前 值 , 将指定代入值 代入给输出量
根据a和b具体状态,将0-4值代入 信号量sel
BEGIN
信号a由两个驱动源b和d驱动。
a<=b AFTER 5 ns; a的值将取决于两个驱动器的
a<=d AFTER 5 ns; 输出b和d。那么信号a到底应
END sample;
该取何值?这一点在标准的数
据类型中没有定义。
为了解决多个驱动器同时驱动一个信号的信号行为 描述,在包集合STD_LOGIC_1164中专门定义了一 种描述判决函数的数据类型,称判决函数子类型。
4.1.3 多驱动器描述语句
在VHDL语言中,创建一个驱动器可以由一条信号代入语 句来实现。当有多个信号并行输出时,在构造体内部必须利用 代入语句,对每个信号创建一个驱动器。这样在构造体内部就 会有多个代入语句。
第4章VHDL语言基础
结构体组成
结 构 体 说 明 结
数据类型说明 信号说明 例化元件说明 子程序说明
构 体 块语句 结 构 体 功 能 描 述 进程语句 信号赋值语句 子程序调用语句 元件例化语句
结构体描述风格
行为描述
描述该设计单元的功能,主要使用函数、过程和进程语
句,以算法形式描述数据的变换和传送 例4-4
Port (a,b: in std_logic_vector (3 downto 0);
Ci: in std_logic; Sum: out std_logic_vector (3 downto 0); Co: out std_logic); End add4;
4.1.3 结构体部分
结构体(ARCHITECTURE)
4.1.1 参数部分
库说明 存放已经编译的实体、结构体、程序包和配臵,用于 设计共享,是编程资源。 library <库名>; 程序包引用
使用USE子句指明要使用库中某一个设计单元。
use <库名>. <程序包名>.all; 【例4-2】 LIBRARY ieee; USE ieee.std_logic_1164.ALL;
结构体主要用来描述实体的内部结构,即 描述一个实体的功能。 描述方式 行为描述方式、数据流描述方式、结构描 述方式、混合描述方式
4.1.3 结构体部分
结构体格式
ARCHITECTURE 结构体名 OF 实体名 IS [结构体说明部分]; BEGIN 结构体描述部分; END 结构体名;
4.1.3 结构体部分
4.1 基本结构
模块结构
参数部分:库(LIBRARY)、程序包(USE); 实体(ENTITY):[类属]、端口(PORT);
VHDL语言程序基本结构
4.1 设计实体
4.1.1 实体说明
端口说明: 端口说明: PORT(端口名{,端口名}:方向 数据类型名; …… 端口名{,端口名}:方向 数据类型名); 端口方向: 端口方向: 端口方向用来定义外部引脚的信号方向是输入还是输出。 端口方向用来定义外部引脚的信号方向是输入还是输出。 表示端口方向的说明符及含义: 表示端口方向的说明符及含义: IN ——输入 输入 OUT——输出(结构体内部不能再使用) 输出( 输出 结构体内部不能再使用) INOUT——双向,既可输入也可输出 双向, 双向 BUFFER—— 输出(结构体内可再使用) 输出(结构体内可再使用) LINKAGE ——不指定方向,无论哪个方向都可连接 不指定方向,
ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s = '0' ELSE b ; END ARCHITECTURE one ;
2选1多路选择器的 选 多路选择器的 多路选择器的VHDL描述 描述
图4-1 mux21a实体 实体
结构体
图4-2 mux21a结构体 结构体
4.1 设计实体
4.1.1 实体说明
实体说明主要描述的是一个设计的外貌, 实体说明主要描述的是一个设计的外貌,即对外 的输入输出接口以及一些用于结构体的参数的定义。 的输入输出接口以及一些用于结构体的参数的定义。
【例4-1】
ENTITY mux21a IS PORT( a, b : IN BIT; s : IN BIT; y : OUT BIT ) ; END ENTITY mux21a ;
4.1 设计实体
4.1.1 实体说明
数据类型: 数据类型: 例: PORT( a: IN BIT; b: IN BIT; bus : OUT BIT _VECTOR(3 DOWNTO 0) ) ; _VECTOR( 0) 解释说明: 解释说明: a、b为BIT数据型; 、 为 数据型; 数据型 bus为BIT _VECTOR类型,该端口为一个四位位宽端口。 为 _VECTOR类型 该端口为一个四位位宽端口。 类型, (3 DOWNTO 0)最高位bus[3] 、最低位bus[0] 。 0)最高位bus[3] 最低位bus[0]
VHDL语言结构体的描述方式
结构描述用于层次化设计,高层次的设计模块 调用低层次的设计模块,或直接用门电路来构成一 个复杂的逻辑电路。
7
第7页/共12页
VHDL语言结构体的描述方式
【例3.3】将例3.1中的数据选择器采用结构描述。
c: OUT STD_LOGIC );
END COMPONENT;
COMPONENT or2
PORT (a, b: IN STD_LOGIC;
c: OUT STD_LOGIC );
END COMPONENT;
U1
1 ns
s
U3
& ab
d0
U2
&
U4 ≥1
y
d1
aa
8
第8页/共12页
VHDL语言结构体的描述方式
【例3.1】试用行为描述完成二选一数据选择器的设计。
设数据输入为d0和d1、选择输入为s,输出为y。
程序清单:
ENTITY mux21 IS
PORT ( d1, d0: IN STD_LOGIC;
s:
IN STD_LOGIC;
y:
OUT STD_LOGIC );
END mux21;
ARCHITECTURE behavior OF mux21 IS
● 行为描述只需描述清楚输入与输出的行为, 而与它们的结构无关;
● 描述程序大多采用算术运算、关系运算、惯 性延时、传输延时等语句;
● 结构体中的过程语句属于典型的行为描述。
3
第3页/共12页
VHDL语言结构体的描述方式
3.2 结构体的数据流描述
VHDL语言的基本结构
4
一、VHDL语言设计的基本单元及其构成
3)端口说明 PORT(端口名{,端口名}:方向 数据类型; 是对设计实体与外部接口 的描述,即对元件引脚、 ┇ 数据类型和I/O方向的描述 端口名{,端口名}:方向 数据类型); 1端口名
设计实体
进程 或其它并行结构 结构体 n (ARCHITECTURE 进程 或其它并行结构
配置(CONFIGURATION)
VHDL程序设计实体的一般结构
2
VHDL语言的基本结构
主要内容
一、 VHDL语言设计的基本单元及其构成 二、 VHDL语言构造体的子结构描述 三、 包集合、库及配置
3
一、VHDL语言设计的基本单元及其构成
VHDL语言
15
二、VHDL语言构造体的子结构描述
【例】4位二进制加法计数器构造体逻辑描述。
SIGNAL cnt4:INTEGER RANGE O TO 15; ... PROCESS(clk,clear,Stop) BEGIN IF clear='0' THEN cnt4<=0; ELSIF clk'EVENT AND clk='1' THEN IF stop='0' THEN cnt4<=cnt4+1; END IF; END IF; END PROCESS; --注意cnt4的数据类型
存盘文件 为 bpac.vhd
VHDL的构造体architecture
str rtl beh 构造体分为两部分: is – bigin: 说明语句; bigin – end: 并行语句;
2
构造体的说明语句ห้องสมุดไป่ตู้
type declarations;
类型说明
signal declarations; 信号说明
17
常用预定义类型
预定义类型在相关的包集合中定义
std.standard:
bit(位)、boolean(布尔)
integer(整数)、real(实数)
ieee.std_logic_1164:
std_logic(标准逻辑量);
ieee.std_logic_arith:
signed、unsigned;
20
常用预定义类型
boolean:(falth,true) 逻辑量,用于关系判断; 可进行逻辑运算; 不能表达为多位数组;
21
常用预定义类型 integer:(-231-1 -- +231-1) 算术量,用于算术运算; 其子集合有natural和positive; 考虑到电路综合效率,对于整数类型,可 以在说明时对数据范围进行限制;
18
常用预定义类型 bit、bit_vector:2值逻辑 数据范围(0,1),用于逻辑运算 说明方式: signal x:bit;--x为1位逻辑信号; signal y:bit_vector(3 downto 0); --y为4位逻辑信号,最高位为y(3), 在最左边;
19
常用预定义类型
bit、bit_vector:常数表达形式 一位逻辑量采用单引号: '1' '0' 多位逻辑量采用双引号: " 1001" 可以采用其他进制的缩写形式: b" 1001" o" 7777" x"ffff"
VHDL语言 第四章 VHDL语言构造体的描述方式
在寄存器描述中,必须将值代入信号,如下例所
示。 PROCESS (clk) SIGNAL tmp: STD_LOGIC; BEGIN IF (clk‟ EVENT AND clk=„1‟) THEN tmp:=a; END IF; y<=tmp; END PROCESS;
4、关联性强的信号应放在一个进程中 在设计“与”及“或”这样部件时,如果在原理
结构描述是元件互连的描述,使用元件例化语句。
1. 元件声明
定义:对所调用的较低层次的实体模块(元件)的 名称、类属参数、端口类型、数据类型的声明
语法:
COMPONENT 元件名 GENERIC 说明; PORT 说明; END COMPONENT; ----类属声明 ----端口声明
元件声明类似实体声明(entity)
4.1 构造体的行为描述方式
行为描述方式是对系统数学模型的描述,其抽象程度比 寄存器传输描述方式和结构化描述方式的更高。
在行为描述方式的程序中大量采用算术运算、关系运算、 惯性延时、传输延时等难于进行逻辑综合和不能进行逻 辑综合的VHDL语句。 一般来说,采用行为描述方式的VHDL语言程序主要用于 系统数学模型的仿真或者系统工作原理的仿真。
类属说明: 确定实体或组件中定义的局部常数。模块化设计时多用于不同 层次模块之间信息的 传递。可从外部改变内部电路结构和规模。 类属说明必须放在端口说明之前。
GENERIC (
常数名称:类型 [:= 缺省值] {常数名称:类型 [:= 缺省值]} );
使用GENERIC语句易于使器件模块化和通用化。
对于用行为描述方式的VHDL语言程序只有改写为RTL 描述方式才能进行逻辑综合,也就是说 RTL 描述方式 才是真正可以进行逻辑综合的描述方式。
3.3 VHDL语言结构体的描述方法
Architecture dataflow2 of eqcomp4 is begin equal <= not(a(0) xor b(0))and not(a(1) xor b(1))and not(a(2) xor b(2))and not(a(3) xor b(3)); end dataflow2;
程序包
程序包的格式: 包集合标题 PACKAGE 包集合名 IS [说明语句] END 包集合名; 定义子程序
包集合体
PACKAGE BODY 包集合名 IS [说明语句] 实现子程序 END 包集合名;
Hale Waihona Puke 函数(Function)Function 函数名 (参数表) Return 数据类型 函数首 在程序包标题 中定义 Function 函数名 (参数表) Return 数据类型 IS 说明部分 Begin 顺序语句 函数体 END Function 函数名; 在程序包体中 定义
函数应用实例
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.hanshu.ALL ; ENTITY axamp IS PORT(dat1,dat2 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); dat3,dat4 : IN STD_LOGIC_VECTOR(3 DOWNTO 0); out1,out2 : OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ); END; ARCHITECTURE bhv OF axamp IS BEGIN out1 <= max(dat1,dat2); --用在赋值语句中的并行函数调用语句 PROCESS(dat3,dat4) BEGIN out2 <= max(dat3,dat4); --顺序函数调用语句 END PROCESS; END;
4.VHDL程序结构和常用描述方法
VHDL构造体常用描述方法 3
• 结构描述
– 把复杂的电子实体按其不同的硬件电路功能 划分为若干部分,然后对各部件具体描述。 – 全加器的一种逻辑结构图:
x y 半 加 器 a
b
Cin
半 加 器
c
或门
Cout Sum
结构描述
• 主要组成部分:元件、例元、生成语句
• 元件:用以描述某个实体的同一构造的同类 型部件(半加器)
• Architecture behave_aa OF aa Is Signal s1:bit; Signal s2,s3:std_logic_vector(0 to 3); ... Begin ... End data;
常数说明
结 构 体 说 明 结 构 体 结 构 体 功 能 描 述 数据类型说明 信号说明 例化元件说明 子程序说明 块语句 进程语句 信号赋值语句 子程序调用语句
类属常用于定义: 实体端口的大小、
设计实体的物理特性、 总线宽度、 元件例化的数量等。 例 1: entity mck is generic(width: integer:=16); port(add_bus:out std_logic_vector (width-1 downto 0)); …
例2:2输入与门的实体描述(P.213)
例:结构体中错误的信号声明
VHDL的程序结构
库、程序包 实体(Entity) 结构体
(Architecture)
进程 或其它并行结构
配置(Configuration)
VHDL的程序结构
四、配置
结构体1 结构体2 设计实体
• 一个设计实体的多种实现方式
Behave_.. Rtl_...
VHDL结构体的结构化描述法
VHDL结构体的结构化描述法在结构体中,设计任务的程序包内定义了一个8 输入与门(and8)和一个二异或非门(xnor2)。
把该程序包编译到库中,可通过USE 从句来调用这些元件,并从work 库中的gatespkg 程序包里获取标准化元件。
结构化描述通常用于层次式设计。
在8 位比较器的实体设计中,实体说明仅说明了该实体的I/O 关系,而设计中采用的标准元件8 输入与门and 8 和二输入异或非门xnor2 是标准元件。
它的输入关系也就是and8 与xnor2 的实体说明,是用USE 从句的方式从库中调用的。
对于一个复杂的电子系统,可以分解成许多子系统,子系统再分解成模块。
多层次设计可以使设计多人协作,并行同时进行。
多层次设计的每个层次都可以作为一个元件,再构成一个模块或构成一个系统,每个元件可以分别仿真,然后再整体调试。
结构化描述不仅是一个设计方法,而且是一种设计思想,是大型电子系统设计高层主管人员必须掌握的。
除了一个常规的门电路,其标准化后作为一个元件放在库中调用,用户自己定义的特殊功能的元件也可以放在库中,以方便调用。
这个过程称为标准化,有的资料中称为例化。
尤其需要声明的是,元件标准化不仅仅是常规门电路,这和标准化元件的含义不一样。
即任何一个用户设计的实体,无论功能多么复杂,复杂到一个数字系统,如一个CPU,还是多么简单,简单到一个门电路,如一个倒相器,都可以标准化成一个元件。
现在在EDA 工程中,工程师们把复杂的模块程序称为软核(softcore 或IP core),调试仿真通过的集成电路版图称为硬核,而把简单的通用模块称为元件。
图1 是一个8 位比较器的逻辑电路图,其对应的结构化描述(structural description)程序如例1-9 所示。
图1 8 位比较器的逻辑电路图【例1-9】8 位比较器的结构化描述法LIBRARY IEEE; USE IEEE std_logic_1164.ALL; ENTITY comparator IS PORT(a,b:in。
简述VHDL的基本结构及每部分的基本功能。
简述VHDL的基本结构及每部分的基本功能。
1.1. 简述VHDL的基本结构及每部分的基本功能。
(1)库库是经编译后的数据集合,库中存放的是各种程序包、实体定义、结构体描述等。
设计人员在用VHDL 语言设计系统时,库中内容有的可作为标准,有的可作为资源被引用。
库的作用就在于使设计者可以共享已经编译过的设计文件及有用数据。
(2)程序包程序包是VHDL程序的公共存储区,在程序包内说明的数据对实体是透明的。
程序包由程序包说明和程序包体组成。
(3)实体实体可以表示小到一个与门,也可以大到一个数字系统,这个系统可以像微处理器一样的复杂。
在实体的说明部分主要完成设计对象的输入输出端口名称、传输方向、数据类型的定义,即端口的定义。
(4)结构体结构体是设计实体的具体描述,如果把设计实体抽象为一个功能方块图,结构体则描述这个功能方块图内部的具体逻辑实现细节。
一个设计实体的内部实现细节通过结构体的具体描述表现出来。
(5)配置配置是用于描述设计不同层次之间的关系和实体与结构体之间的连接关系。
在实体与结构体之间的连接关系配置说明中,设计者可以利用配置语句为实体提供不同的结构体与之相匹配。
在仿真设计中,可以利用不同配置方式选择不同结构体,分别对不同结构体进行仿真测试。
2. 简述VHDL语言实体申明中:IN、OUT、BUFFER和INOUT 等端口模式各自的特点。
IN:输入型,只读模式。
OUT:输出型,只写。
BUFFER:缓冲型,带有读功能的输出模式,即输出并向内部反馈,out相似,但可读。
INOUT:输入输出型,可读可写,可以通过该端口读入或写出信息。
3. 在VHDL语言中,标识符必须遵循一些规则,有哪些规则?(1)标示符的第一个字母必须是英文字母。
(2)标示符的最后一个字母不能使下划线字符。
(3)标示符不允许连续出现两个下划线字符。
(4)标示符不区分字母的大小写。
(5)VHDL的保留字不能用于作为标示符使用。
4. VHDL的数据对象有哪几种,它们之间有什么不同?答:VHDL的数据对象包括信号、常量、变量和文件4类。
VHDL语言程序的基本结构
d0
&
≥1 q
d1
&
1 sel
图2-1 二选一选择器的电原理图
【例2-5】 图2-1的VHDL语言描述: ENTITY mux2 IS GENERIC(m: TIME:=1ns); PORT(d0,d1,sel: IN BIT;
bus: OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END mu;
该例中BIT类型用STD_LOGIC替代,而bus则用 STD_LOGIC_VECTOR(7 DOWNTO 0)说明。这样做在语法上都是 对的,所不同的是BIT、BIT_VECTOR与STD_LOGIC、 STD_LOGIC_VECTOR尽管都同样描述位和位矢量,但是它们的数 据类型是不一样的,前者只有两种状态“1”和“0”;而后者却有9 种状态(这一点在后面详述)。BIT和BIT_VECTOR在VHDL语言的 标准库(STD库)中定义,使用该类型数据可以不作任何说明。 STD_LOGIC和STD_LOGIC_VECTOR在IEEE库的 1164 包集合中定 义。在该包集合中专门对STD_LOGIC和STD_LOGIC_VECTOR数 据类型的定义作了具体说明,其作用像C语言中的include文件一样。 正如例2-7 所示那样,如果在实体和构造体中要使用这种类型的数 据,就必须在实体描述前加两条语句:库说明语句和使用包集合的 说明语句。这样可以使VHDL语言的编译器在对实体编译时从指定 库的包集合中找到数据类型的定义。
表2-1 端口方向说明
方向定义
含义
IN 输入端口
输入
OUT 输出端口
输出(构造体内部不能再使用)
VHDL硬件描述语言 第三讲 VHDL语言构造体的结构方式
COMPONENT语句:
可变参数的代入或赋值
COMPONENT 元件名 GENERIC 说明;--参数说明 PORT 说明; --端口说明 END COMPONENT;
COMPONENT_INSTANT语句:
标号名: 元件名 PORT MAP(信号,
是唯一的
);
位置映射方法:在下一层中元件端口说明中的信号书写顺序位置和PORTMAP
20
30
40
50
60
70
80
90
10
20
30
40
50
60
70
80
90
b<=TRANSPORT a AFTER 20ns
10
20
30
40
50
60
70
80
90
多驱动器描述语句
为了解决多个驱动器同时驱动一个信号的信号行为描述,在 包集合STD_LOGIC_1164中专门定义了一种描述判决函数的 数据类型,称判决函数子类型 eg: ARCHITECTURE sample OF sample IS BEGIN a<=b AFTER 5 ns; a<=c AFTER 5 ns; END sample; 判据函数子类型描述的部分源程序见p53例4-3。
惯性(惯性延时):当一个系统或器件,输入信号变化周期 小于系统或器件的惯性时,其输出将保持不变。 惯性延时是缺省,若不作特别说明,是指惯性延时。 传输延时:输出端的信号除延时规定时间外,将完全复现输入 端的输入波形,与形状和宽窄无关。
b<=a AFTER 20ns
b<=a AFTER 20ns
ห้องสมุดไป่ตู้
10
VHDL语言构造体的描述方式
VHDL语言构造体的描述方式4.1 构造体的行为描述方式4.2 构造体的寄存器传输描述方式4.3 构造体的结构描述方式4.1 构造体的行为描述方式●可并行信号赋值是VHDL的特点。
●简单与门(AND)模块如下:ENTITY and2 ISPORT (a,b,:IN BIT;c: OUT BIT);END and2;ARCHITECTURE and2_behav OF and2 ISBEGINc<= a AND b AFTER 5 ns;END and2_behav;2.延时语句●惯性延时*用于系统或器件的惯性描述;*语句:a < = b after 5 ns ;说明可以缺省;*惯性延时说明在仿真时有意义,综合时忽略●传输延时*用于总线、连接线或芯片中路径的延时;*语句:B < = transport A after 5 ns ;说明不可缺省;3.多驱动器描述语语句(略)4.GENERIC 语句●用于不同层次之间的信息传送例如,在数据说明中用于位矢量长度、数组长度、器件延时等参数的传递。
例:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ascount isgeneric(countsize:integer :=3);port(clk,areset,enable: in std_logic;count: buffer std_logic_vector(countsize-1 downto 0)); end ascount;4.2 构造体的寄存器传输描述方式1.描述方式的特点●寄存器描述方法:与硬件一一对应的描述或寄存器之间的功能描述(p56-57)●VHDL语言的限制2.描述方式应注意的问题●"X"状态传递●寄存器RTL描述的限制:*在一个进程中不能有多于一个寄存器的描述*IF语句中不能有ELSE●关联性强的信号应放在一个进程中4.3 构造体的结构描述方式●多层次设计,高层次设计调用低层次设计模块1.COMPONENT 语句●元件说明COMPONENT 元件名[GENERIC(类属说明)][PORT(端口说明)]END COMPONENT;●可以在结构体、包集合和BLOCK的说明中使用●例1:component AND2port(I1,I2 : in BIT;Z: out BIT);end component;●例2:component ADDgeneric(N:POSITIVE);port(X,Y : in BIT_VECTOR(N-1 downto 0);z : out BIT_VECTOR(N-1 downto 0);CARRY: out BIT);end component;元件例化语句*将现成元件的端口信号映射成高层次设计电路中的信号;*格式:例化名:元件名[generic map (类属名=>表达式{,类属名=>表达式})]port map ([端口信号名=>]信号{,[端口信号名=> ]信号})*类属映射为可选项,类属名与元件说明语句中的相同,每个表达式要计算出一个值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例4-4 将上升、下降时间作为类属参数的 二输入与门
ENTITY and2 IS GENERIC (rise,fall: TIME); PORT ( a,b: IN BIT; c: OUT BIT); END and2; ARCHITECTURE behave OF and2 IS SIGNAL internal:BIT; BEGIN internal <= a AND b; c <= internal AFTER (rise) WHEN internal = '1' ELSE internal AFTER (fall); END behave;
( 'U', 'X', '0', 'X', '0', '0', '0', '0', 'X' ), -- | 0 | ( 'U', 'X', 'X', '1', '1', '1', '1', '1', 'X' ), -- | 1 |
( 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', 'X' ), -- | Z |
ELSE FOR i IN s'RANGE LOOP result := resolution_table(result, s(i)); END LOOP; END IF; RETURN result; END resolved; …… END std_logic_1164;
在FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic IS中,
PACKAGE BODY std_logic_1164 IS TYPE stdlogic_table IS ARRAY(std_ulogic, std_ulogic) OF std_ulogic; CONSTANT resolution_table : stdlogic_table := ( -----------------------------------------------------------| U X 0 1 Z W L H | |
第四章 VHDL语言构 造体的描述方式
引子
硬件系统的描述可以采用三种不同的描述风 格: 行为描述方式 数据流描述方式 结构化描述方式
4.1构造体的行为描述方式
1 什么是行为描述? 它是对系统数学模型的描述,与寄存器传输描述方 式和结构化描述方式相比,具有最高的抽象程度。 2 使用的语句具有什么样的特点? 采用 : 算术运算,关系运算,惯性延时,传输延时 等不易或不能进行逻辑综合的VHDL语句。 3 行为描述方式的VHDL语言程序的运用场合? 主要用于系统数学模型的仿真或系统工作原理的仿 真。
四选一电路真值表
b 0 0 1 1
a 0 1 0 1
q i0 i1 i2 i3
延时语句
有两类延时用于行为描述:惯性延时、传输延时。
惯性(Inertial)延时:在惯性模型中,系统或器件 输出信号要发生变化,必须有一段时间的延时,这 段延时时间,就是系统或元件的惯性延时。 特点:当一个系统或器件的输入信号周期,小于系 统或器件的惯性延时,其输出将保持不变。 如:在一个信号值维持期间,如果存在任何毛刺、 脉冲等周期小于器件本身的惯性延时的情况,输出 信号的值将不变,否则将引起信号的变化。
惯性延时示例
假设某门电路的惯性延时为20 ns
B<=inertial A after 20 ns;
所有器件都存在惯性延 时,为了仿真硬件电路 实际工作情况,可以在 代入语句中加上惯性延 时时间加以说明, 如: b <= a AFTER 10 ns; 或: b <= INERTIAL a AFTER 10 ns; 惯性延时说明只在行为 仿真时才有意义,逻辑 综合时将被忽略。
--------------------------------------------------------( 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U', 'U' ), -- | U |
( 'U', 'X', 'X', 'X', 'X', 'X', 'X', 'X', 'X' ), -- | X |
( 'U', 'X', '0', '1', 'W', 'W', 'W', 'W', 'X' ), -- | W | ( 'U', 'X', '0', '1', 'L', 'W', 'L', 'W', 'X' ), -- | L |
( 'U', 'X', '0', '1', 'H', 'W', 'W', 'H', 'X' ), -- | H |
类属语句主要用于行为描述
使用GENERIC语句易于使器件 模块化和通用化
例如,要描述 2 输入与门的行为,其逻辑关系是明 确的 但在加工集成时: 材料、工艺不同,不同类型的输入与门的上升沿、 下降沿参数是不一致的 为了简化设计和供其它的设计人员方便地使用 需要开发一个通用的二输入与门的程序模块 在该模块中某些参数是待定的 在仿真或逻辑综合时,只要用GENERIIC语句 将待定参数初始化 就可以实现各种类型二输入与门的仿真与逻辑综合
例:四选一电路的行为描述方式(2)
Begin with sel select q<=i0 after 10 ns when 0, i1 after 10 ns when 1, i2 after 10 ns when 2, i3 after 10 ns when 3, „X‟ after 10 ns when others; sel<= 0 when a=„0‟ and b=„0‟ else 1 when a=„1‟ and b=„0‟ else 2 when a=„0‟and b=„1‟ else 3 when a=„1‟and b=„1‟ else 4; End behav;
一些专门用于行为描述的语句 代入语句:
格式: 信号量 <= 敏感信号量表达式;
例: z <= a OR (b NAND c); 上式中有3 个敏感量 a,b, c,无论哪一个 敏感量发生了变化,该代入语句将被执行。
例
a <= b AFTER 5 ns; --表示当b发生新的变化5ns后, 才被代入到信号a中
-- unconstrained array of std_ulogic for use with the resolution function TYPE std_ulogic_vector IS ARRAY ( NATURAL RANGE <> ) OF std_ulogic; -------------------------------------------------------------------- resolution function FUNCTION resolved ( s : std_ulogic_vector ) RETURN std_ulogic; -------------------------------------------------------------------- *** industry standard logic type *** SUBTYPE std_logic IS resolved std_ulogic; -------------------------------------------------------------------- unconstrained array of std_logic for use in declaring signal arrays TYPE std_logic_vector IS ARRAY ( NATURAL RANGE <>) OF std_logic; …… END std_logic_1164;
s是位矢量,它有多长就是多少个驱动源。
假设 s=“01X” S1<= resolved(s); --s1处于什么状态? 假设 s=“0ZZ”、“0X1” S1的状态又是什么呢?
„X‟ „0‟ „X‟
GENERIC语句(类属参数语句)
1. 2.3.源自常用于不同层次之间的信息传递 要把信息传递给实体的具体元件 就可用类属语句 例如, 把器件的上升和下降沿延时信息传给实体 类属也可用传送一些用户定义的数据类型,负载电 容和电阻 对综合参数,如数据通道宽度,信号宽度等均可用 类属传递