第5章VHDL设计进阶

合集下载

VHDL设计进阶实验与设计

VHDL设计进阶实验与设计

BEGIN
CASE A IS
WHEN "0000" => LED7S <= "0111111" ; WHEN "0001" => LED7S <= "0000110" ;
WHEN "0010" => LED7S <= "1011011" ;
实 验 与 设 计 WHEN "0011" => LED7S <= "1001111" ;
WHEN "100" => BT <= "00010000" ; A <= 9 ;
WHEN "101" => BT <= "00100000" ; A <= 11 ;
WHEN "110" => BT <= "01000000" ; A <= 13 ;
WHEN "111" => BT <= "10000000" ; A <= 15 ;
(3) 实验内容1:说明例5-21中各语句的含义,以及该例的整体功能。在MAX+plusII上对 该例进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。
提示:用输入总线的方式给出输入信号仿真数据,仿真波形示例图如图5-22所示。
Y IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
WHEN "1110" => LED7S <= "1111001" ;

第5章 VHDL设计进阶

第5章 VHDL设计进阶
Constant data_bus_width:INTEGER := 8; Constant fbt: STD_LOGIC_VECTOR := “010110”;
变量(Variable)
定义格式: 定义格式: VARIABLE 变量名 : 数据类型 := 初始值 ; 临时数据,没有物理意义 只能在Process和Function中定义,并只在 其内部有效 要使其全局有效,先转换为Signal。
………… ARCHITECTURE body_mux4 OF mux4 IS BEGIN process(i0,i1,i2,i3,a,b) variable muxval : integer range 7 downto 0; begin muxval := 0; if (a = '1') then muxval := muxval + 1; end if; if (b = '1') then muxval := muxval + 2; end if; case muxval is when 0 => q <= i0; when 1 => q <= i1; when 2 => q <= i2; when 3 => q <= i3; when others => null; end case; end process; END body_mux4;
信号(Signals)
没有方向性,可给它赋值,也可当作 输入。 Port也是一种隐含的信号。 信号的使用和定义范围是实体、结构 体和程序包。
数据对象DATA OBJECTS 数据对象
进程只对信号敏感,敏感表中不能包括 变量。 信号的赋值需要经历一个特定的延时, 即δ延时。 在进程中可允许同一信号由多个驱动源 (赋值源),但只有最后的赋值起作用。

第5章 VHDL设计进阶

第5章  VHDL设计进阶

) ;
图6-2 4位加法计数器工作时序
归 纳
数据类型
BUFFER模式
重载函数
计数器结构
5.1.2 整数、自然数和正整数数据类型
1 整数
整数:整数都是十进制的数,如: 5, 678, 0, 156E2(=15600), 45_234_287 (=45234287)
整数与数学中整数的定义相似,可以使用预定义运算操作 符,如加“+”、减“-”、乘“×”、除“÷”进行算术 运 算 。 在 VHDL 语 言 中 , 整 数 的 表 示 范 围 为 - 2147483647~2147483647,即从-(231-1)到(231-1)。
关键词OTHERS只能出现一次,且只能作为最后一种 条件取值
顺序描述语句
CASE语句存在以下问题: 对相同的逻辑功能,一般经综合后, CASE语句 比IF语句的描述耗用更多的硬件资源,而且对于有的 逻辑, CASE语句无法描述,只能用IF语句来描述, 这是因为IF-THEN-ELSIF语句具有条件相与的功能和 自然将逻辑值“_”包括进去的功能,有利于逻辑化简, 而CASE语句只有条件相或的功能。
例 SIGNAL value : INTEGER range 0 TO 15; SIGNAL out1 : STD_LOGIC ; …… CASE value IS ……… END CASE; ……. CASE value IS WHEN 0 => out1 <= `1` ; WHEN 1 => out1 <= `0` ; ……. CASE value IS WHEN 0 TO 10 => out1 <= `1` ; WHEN 5 TO 15 => out1 <= `0`; END CASE ;

第五章_VHDL设计进阶

第五章_VHDL设计进阶

5.3.3 信号(SIGNAL) 信号( )
定义格式: 定义格式: SIGNAL 信号名: 数据类型 ( := 初始值 ; 信号名: 初始值)
5.3 数据对象 数据对象DATA OBJECTS
5.3.4 进程中的信号与变量赋值语句
表5-1 信号与变量赋值语句功能的比较
信号SIGNAL 信号 基本用法 适用范围 行为特性 变量VARIABLE 变量
) ;
(3)重载函数:STD_LOGIC_UNSIGNED )重载函数: 调用+ 调用+号的运算符重载函数 (4)计数器结构:完成加 操作的纯组合 )计数器结构:完成加1操作的纯组合 电路加法器+ 位边沿触发锁存器 电路加法器+4位边沿触发锁存器
4位加法计数器由两大部分组成: 位加法计数器由两大部分组成: 位加法计数器由两大部分组成
EDA技术实用教程 技术实用教程
第5பைடு நூலகம் VHDL设计进阶 VHDL设计进阶
5.1 4位加法计数器的 位加法计数器的VHDL描述 位加法计数器的 描述
5.1.1 4位加法计数器 位加法计数器
【例5-1】 】 ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN Q <= Q + 1 ; END IF; END PROCESS ; 算术操作符 END bhv;
模式: (1)BUFFER模式:不同于 ) 模式 不同于OUT和INOUT 和 (2)整数类型 )整数类型INTEGER:32位有符号的 : 位有符号的 二进制数表示,需指定范围。 二进制数表示,需指定范围。 整数=正整数+ 整数=正整数+零+负整数 自然数=正整数+ 自然数=正整数+零

第5章 VHDL设计进阶

第5章 VHDL设计进阶

实验与设计
5-4 基于时序电路的移位相加型8位硬件乘法器设计
(1)实验原理: (2)实验任务1: (3)实验任务2: (4)实验任务4: 演示示例:/KX_7C5EE+/EXPERIMENTs/EXP32_MULTI8X8/MLTL8X8。
实验与设计
5-4 基于时序电路的移位相加型8位硬件乘法器设计
5.2 VHDL设计实例及其语法内涵
出 END BEHAV;
装载移位数值
左移
左移
5.2.3 位矢中‘1’码个数统计电路设计
5.2 VHDL设计实例及其语法内涵
5.2.3 位矢中‘1’码个数统计电路设计
5.2 VHDL设计实例及其语法内涵
5.2.3 位矢中‘1’码个数统计电路设计
LOOP语句的常用表达方式有两种: (1)单个LOOP语句

5-3 哪些情况下需要用到程序包STD_LOGIC_UNSIGNED?试举一例。 5-4 说明信号和变量的功能特点,以及应用上的异同点。 5-5 什么是重载函数?重载算符有何用处?如何调用重载算符函数?
5-6 在VHDL设计中,给时序电路清零(复位)有两种不同方法,它们是什么,如 何实现?
5-7 用循环语句设计一个7人投票表决器,及一个4位4输入最大数值检测电路。
5.1.4 进程中的信号赋值与变量赋值
5.2 VHDL设计实例及其语法内涵
5.2.1 含同步 并行预置功能 的8位移位寄 存器设计
5.2 VHDL设计实例及其语法内涵
5.2.1 含同步并行预置功能的8位移位寄存器设计
QB信号
7
6
5
4
3
2
1
0
右移
0
7 0

第5章 VHDL设计进阶

第5章  VHDL设计进阶

Entity comparator is Port(a,b:in bit; g:out bit); End comparator; Architecture behavioral of comparator is Begin comp:PROCESS (a,b) 行为描述:对设计实体 按算法的路径来描述, BEGIN IF a= b THEN G<=‘1’; 是一种高层次描述。 else G<= ‘0’; END IF; END PROCESS COMP; End behavioral;
信号赋值语句的语法格式为: 注意符号 目标信号名<=表达式(设定值);
SIGNAL temp : Std_Logic_Vector (7 downto 0);
整体赋值: temp <= “10101010”;
赋值标志 逐位赋值: temp(7) <= „1‟; 逐位赋值 多位赋值: 用单引号 temp (7 downto 4) <= “1010”; 多位赋值 用双引号
signal Enable: Bit; signal CLK, CLEAR: Bit:=‘1’;
例:signal
信号具有全局性的特征
在程序包中定义的信号对于所有调用此程 序包的设计实体都是有效地或称可视的, 可以直接使用。 在实体中定义的信号,对于此实体对应的 所有结构体都是可视的。 在结构体中定义的信号,对于整个结构体 所有子结构都是可视的。
数据流描述:反映数据经过一定的逻辑运算后在输 入和输出间的传递,可以清楚看到数据流出的方向、 路径和结果。描述方式类似于布尔方程,可以描述 组合逻辑电路,也可以描述时序逻辑电路。 LIBRARY IEEE; ENTITY lianxi IS PORT(a,b: IN bit-vector(7 downto 0); g: OUT bit-vector(7 downto 0)); END lianxi ; ARCHITECTURE dataflow OF lianxi IS BEGIN g <= “1” when (a=b) else “0”; END dataflow;

5第5章 VHDL设计进阶

5第5章 VHDL设计进阶
延时
A<=D1 „0‟ „1‟ 经时间后
两个对象的关系
A<=D1 „1‟ „1‟
A在时序 延时 上的变化
A为‘1‟
2. 进程中赋值的延时特点
进程中,所有的赋值语句(包括信号与变量赋值),均必须在一个延 时内完成。一个进程的运行时间固定为一个延时。
进程中所有的信号赋值语句在进程启动的瞬间顺序启动各自的延时为 的定时器,在定时结束后分别进行赋值操作。
5.1 数据对象
5.1.2 变量
定义变量的一般表述如下: VARIABLE 变量名 : 数据类型 := 初始值 ;
VARIABLE a : INTEGER RANGE 0 TO 15 ;--变量a定义为常数,取值范围是0到15 VARIABLE d : STD_LOGIC := „1‟ ;--变量d定义为标准逻辑位数据类型, 初始值是1
5.1 数据对象
在VHDL中,数据对象有三类,变量(variable)、常量 (constant)和信号(signal)。 数据对象类似于一种容器,用于接受不同数据类型的赋值。 注意:信号的表现比较特殊,具有更多的硬件特征,是VHDL 中最有特色的语言要素之一,在学习中需要进行熟练把握。
5.1 数据对象
只有信号才能把进程外的信息带入进程内部,或将进程内部的信息带出进 程。(信息的内部和外部沟通差异)
5.1.3 信号
信号的定义还可以设置延时量,如下
SIGNAL a,b,c,y,z: INTEGER ; ... PROCESS (a,b,c) BEGIN y <= a + b ; z <= c – a ; y <= b ; END PROCESS ;
对于端口,区别只是输出端口不能读入数据,输入端口不能被赋值;

第5章 VHDL设计进阶

第5章 VHDL设计进阶
定义格式: 信号赋值的一般表述: SIGNAL 信号名: 数据类型 := 初始值 ;
目标信号名 《= 表达式 after 时间量 ;
5.1 数 据 对 象
5.1.4 进程中的信号赋值与变量赋值
一般地,从硬件电路系统来看,变量和信号相当于 逻辑电路系统中的连线和连线上的信号值;常量相当于电 路中的恒定电平,如GND或VCC接口。
接上页
5.2 VHDL设计实例及其语法内涵
5.2.2 移位模式可控的8位移位寄存器设计
5.2.3 位矢中‘1’码个数统计电路设计
5.2 VHDL设计实例及其语法内涵
5.2.3 位矢中‘1’码个数统计电路设计
5.2 VHDL设计实例及其语法内涵
5.2.3 位矢中‘1’码个数统计电路设计
LOOP语句的常用表达方式有两种: (1)单个LOOP语句
5.2 VHDL设计实例及其语法内涵
5.2.4 三态门设计
5.2 VHDL设计实例及其语法内涵
5.2.4 三态门设计
5.2 VHDL设计实例及其语法内涵
5.2.5 双向端口的设计方法
5.2 VHDL设计实例及其语法内涵
5.2.5 双向端口的设计方法
5.2 VHDL设计实例及其语法内涵
5.2.5 双向端口的设计方法
5.1 数 据 对 象
5.1.4 进程中的信号赋值与变量赋值
在不完整的条件语句中,单独的变量赋值语句与信号 赋值语句都能综合出相同的时序电路,此时变量己不是简单 的数据临时储存结构了。
5.1 数 据 对 象
5.1.4 进程中的信号赋值与变量赋值
例5-1与例5-2综合的结果完全一样,都 是图5-1所示的D触发器。
EDA技术实用教程
第5章

5.GH_VHDL设计进阶

5.GH_VHDL设计进阶
When OTHERS => <顺序语句>; ... ; <顺序语句> ;
END CASE ;

Case语句是顺序语句,因此必须放在进程语 句当中使用。 当执行到CASE语句时,首先计算<表达式>的 值,然后根据when条件句中与之相同的<选 择值>,执行对应的<顺序语句>,最后结束 case语句。条件句中的=>不是操作符,它的 含义相当于then(于是)。
变量赋值目标 := 赋值源 信号赋值目标 <= 赋值源

赋值目标可以是单个变量或信号名,或是数组中的单个元 素,或数组中的一段,也可以是一个集合。 信号赋值语句只有出现在Process或者Subprogram中才 是顺序语句,在其他场合下均是并行语句。

信号与变量赋值语句
【例1】(用变量的方式实现典型D触发器) LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE QQ : STD_LOGIC ; BEGIN IF CLK'EVENT AND CLK = '1' QQ := D1 ; END IF; Q1 <= QQ; END PROCESS ; END ;
Case语句使用时应该注意几点:

When条件句中的选择值或者标识符所代表的值必须在表 达式的取值范围内。
除非所有的条件句中的选择值能完全覆盖case语句中的 表达式的取值,否则,最后一个条件句必须是:when others=><顺序语句>,以免插入不必要的寄存器。 Case语句中的选择值只能出现一次。 Case语句执行中必须选中,且只能选中所列条件句中的 一条件。

EDA技术教程课件-第五章_VHDL设计初步

EDA技术教程课件-第五章_VHDL设计初步
以并行赋值语句为基础,当语句 中的任一输入信号值发生变化时, 激活赋值语句,使信息从所描述 的结构中“流出”。这种描述方式 称为数据流方式,又称为寄存器 转换层次描述(RTL)
·行为描述主要是对设计对象进行数学建 模,描述程序大量采用算术运算、关系运 算、惯性延时、传输延时等语句 ·结构体中的过程语句属于典型的行为描 述 ·VHDL语言具有较强的行为仿真和综合能 力,是EDA技术发展的基础
2020/12/22
表5.1.3 几种基本的数据类型
类型
取值范围
逻辑位矢量
是STD_LOGIC的数组
STD_LOGIC_VECTO
R
特点
由STD_LOGIC_1164程序包 定义,能表示多位 STD_LOGIC信号,如总线 信号
整数类型INTEGER
正整数,负整数和零, POSITIVE
布尔类型BOOLEAN FALSE和TRUE
结构体承担的具体任务是:
定 义 结 构 体 中 的 各 项 内 部 使 用 元 素 , 如 数 据 类 型 ( TYPE)、 常 数 ( CONSTANT)、 信 号 ( SIGNAL)、 元 件 ( COMPONENT)、 过 程 ( POCEDURE)等;
通过VHDL语句描述实体所要求的具体行为和逻辑功能; 描述各元件之间的连接。
U2: nand2 PORT MAP (q,reset, qbar); E20N20/1D2/22entlist;
表5.1.5 结构体中的三种子结构方式比较
子结构名称
语句格式
特点
块语句结构 进程语句结构 子程序语句结 构
2020/12/22
块结构名: BLOCK
端口说明 类属说明 BEGIN 并行语句 END BLOCK 块结构名;

vhdl基础

vhdl基础
对于每个对象,必须定义它的类和类型,类指明对象 属于4类对象中的哪一类,类型指明该对象具有哪种 数据类型。
➢引用范围
全局对象和局部对象之间存在不同的作用范围。
《CPLD技术及应用》教学课件
17
一、常量(Constant)
P64
➢定义 常量指在设计实体中不会发生变化的值,它可以在
很多部分进行说明,并且可以是任何数据类型。
5. VHDL的保留字不能用于作为标识符使用。 举例:
见教材P58。
《CPLD技术及应用》教学课件
14
四、下标名和段名 格式:
P58~P59
标识符(表达式)
标识符(表达式1 方向 表达式2) 举例:
Input(0)、Input(1)
定义Output(0 To 7)/Output(7 Downto 0)
《CPLD技术及应用》教学课件
11
➢‘#’ 以数制基数表示的文字。
格式:基#整数部分#[指数部分] 举例:
2#10110101# 8#123# 10#128# 16#FE#
《CPLD技术及应用》教学课件
12
二、字符串型文字
P57
1. 字符
字符——用单引号括起来的ASCII码字符。 VHDL对字符的大小写敏感,例如‘A’和‘a’是不同字符。
一、什么是VHDL?
P56
Very-High-Speed Integrated Circuit
Hardware Description
Language
全称——非常高速集成电路硬件描述语言
《CPLD技术及应用》教学课件
2
二、VHDL发展历史
VHDL诞生于1982年。1987年底, VHDL被IEEE和美国国防 部确认为标准硬件描述语言。自IEEE公布了VHDL的标准版 本(IEEE-1076)之后,各EDA公司相继推出了自己的VHDL 设计环境,或宣布自己的设计工具可以和VHDL接口。此后 VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有 的非标准硬件描述语言。1993年,IEEE对VHDL进行了修订, 从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布 了新版本的VHDL,即IEEE标准的1076-1993版本。现在, VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到 众多EDA公司的支持,在电子工程领域,已成为事实上的通用 硬件描述语言。有专家认为,在新的世纪中,VHDL与Verilog 语言将承担起几乎全部的数字系统设计任务。

VHDL设计进阶之第四讲

VHDL设计进阶之第四讲
EDA
电子教案
第五章 VHDL设计进阶
第五章 VHDL设计进阶之第四讲
第 1 页 © 常州大学信息科学与工程学院
EDA
电子教案
第五章 VHDL设计进阶
§5.4 子程序和子程序重载
§5.4.1 子程序 子程序是用顺序语句完成的,是用来直接调 用以完成重复性的工作。一般放在程序包中, 结构体和进程中也可以。每一次调用都会产 生一个新的硬件模块。
第 7 页 © 常州大学信息科学与工程学院
EDA
电子教案
第五章 VHDL设计进阶
PACKAGE BODY packexp IS FUNCTION max( a,b : IN STD_LOGIC_VECTOR) RETURN STD_LOGIC_VECTOR IS --定义函数体 BEGIN IF a > b THEN RETURN a; ELSE RETURN b; END IF; END FUNCTION max; --结束FUNCTION语句 END packexp ; --结束PACKAGE BODY语句
第 20 页
© 常州大学信息科学与工程学院
EDA
电子教案
第五章 VHDL设计进阶
一般,参数表中信号有三种模式IN、OUT和INOUT; 如果只定义IN模式而未定义目标参数类型,则默认为 常数量;
如果只定义了INOUT或OUT,则默认目标参数类型是 变量。
BEGIN PROCESS ( a ) BEGIN m(0) <= sam( a(0), a(1), a(2) ) ; m(1) <= sam( a(2), a(0), a(1) ) ; m(2) <= sam( a(1), a(2), a(0) ) ; END PROCESS ; END ARCHITECTURE demo ;

第五章VHDL设计进阶

第五章VHDL设计进阶

第结1果0 页:x<=c xor b, y<=c xor b x<=c xor a, y<=c xor b
第五章 VHDL设计进阶
信号VS变量
从表面上看…
(1)信号可以是多个进程的全局信号,定义范围是 实体、结构体和程序包,进程和子程序不允许定义 信号;而变量只在进程或子程序中使用,即在定义 它们的顺序域可见。
生在该属性所附着的信号上(即信号有变化), 则其取值为Ture,否则为False。 利用此属性可决定时钟信号的变化情况,即时钟是 否发生。
则这两个信号的属性值分别为: A’left=7; A’right=0; A’low=0; A’high=7; A’length=8; B’left=0; B’right=3; B’low=0; B’high=3; B’length=4;
第 26 页
第五章 VHDL设计进阶
(2)‘event属性: ‘event属性,它的值为布尔型,如果刚好有事件发
第 14 页
3、VHDL数据类型
第五章 VHDL设计进阶
(1)VHDL的逻辑数据类型:
布尔代数(Boolean)型 ;
位(Bit);
在std库的standard 程序包中进行定义。
位数组类型(Bit_Vector)
type BOOLEAN is (FALSE, TRUE) ; type BIT is (‘0’, ‘1’); type BIT_VECTOR is array (NATURAL range <>) of BIT;
c: out std_logic);
end data;
architecture m1 of data is
begin

第5章 VHDL设计进阶-ST

第5章 VHDL设计进阶-ST

5.4 并行赋值语句讨论
并行赋值语句 缩略的进程语句 并行赋值语句同顺 序赋值语句都会有一个σ延时 并行赋值语句也会包含 类似进程的顺序语句特性。
5.5 IF语句概述
IF语句是一种条件语句,其可根据语句中设置的一种或 多种条件,有选择地执行指定的顺序语句。 IF语句中至少应有一个条件句,条件句可以是一个 BOOLEAN类型的标识符或者其判断结果的数据类型为 BOOLEAN类型。
5.1.2 变量 变量具有局限性 不能将信息带出其定义的当前结构 只能在进程和子程序(FUNCTION和PROCEDURE)中使用 变量的赋值操作是实时的,不存在延时行为 变量的主要作用是在进程中作为临时的数据存储单元
变量可定义初始值,仅对HDL仿真器有效
5.1 数 据 对 象
5.1.3 信号 信号具有全局性 硬件特征明显 作为设计实体中并行语 句模块间的信息交流通道
5.2 VHDL设计实例及其语法内涵
5.2.4 三态门设计
5.2 VHDL设计实例及其语法内涵
5.2.4 三态门设计
一个’Z’表示一个逻辑位 ‘Z’在综合中表示一个不确定的值,因此不同的综合器可能会给 出不同的综合结果。 VHDL语法规定不区分大小写,但IEEE库中对STD_LOGIC的预 定义将高阻态确定为’Z’,因此高阻态’Z’必须大写。
5.6 半整数与奇数分频电路设计
接下页
5.6 半整数与奇数分频电路设计
接上页
5.6 半整数与奇数分频电路设计
奇数次分频(N)电路设计思路与步骤: 1. 设置2个相同的加1计数器,其中一个以CLK上升沿触发, 另一个以CLK下降沿触发; 2. 2个计数器分别在取得(N-1)/2和N-1时进行翻转; 3. 将2个计数器的输出进行相或运算,可得出占空比为50% 的技术分频时钟。

09第5章_VHDL设计进阶

09第5章_VHDL设计进阶

康芯科技
THEN
KX
5.1.4 进程中的信号与变量赋值语句
【例5-5】 】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE A,B : STD_LOGIC ; BEGIN IF CLK'EVENT AND CLK ='1' THEN A:= D1; B := A; Q1 <= B; END IF; END PROCESS ; END ;
【例5-6】 】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS signal muxval : integer range 7 downto 0; BEGIN process(i0,i1,i2,i3,a,b) begin muxval <= 0; if (a = '1') then muxval <= muxval + 1; end if; if (b = '1') then muxval <= muxval + 2; end if; case muxval is when 0 => q <= i0; when 1 => q <= i1; when 2 => q <= i2; when 3 => q <= i3; when others => null; end case; end process; END body_mux4;

VHDL设计进阶

VHDL设计进阶

§顺序条件语句IF 语句
1、用于门闩控制的语句: 、用于门闩控制的语句:
格式
3、用于多选控制的IF语句: 、用于多选控制的 语句 语句:
格式
IF 条件句 THEN <顺序处理语句> END IF ;
IF 条件句1 THEN <顺序处理语句1>; ELSIF 条件句2 THEN <顺序处理语句2>; : ELSIF 条件句n-1 THEN <顺序处理语句n-1>; ELSE <顺序处理语句n>; END IF;
(3),进程必须由敏感信号的变化来启动 进程既可以通过敏感信号的变化来启动,也可以由满足条件的 WAIT 语句来启动.遇到不满足条件的WAIT语句后被挂起. (1)进程必须定义显式或隐式的敏感信号. 注意 (2)但是在一个使用了敏感表的进程(或由该进程所调用的 子程序)中不能含有任何WAIT语句. (4),进程语句本身是并行语句 进程语句引导的属于顺序语句, 但同一结构体中的不同进程是并行运行的.或者说是根据相应的 敏感信号独立运行. (5),信号是多个进程的通信线 多个进程能并行同步运行,进程间的通信是通过信号实现的. 所以,任一进程的进程说明部分不允许定义信号. (6),一个进程只允许描述对应于一个时钟信号的同步时序逻辑 时序电路必须由进程中的顺序语句描述,而此顺序语句必须由不完全的 条件语句构成.尽管在同一进程中可顺序放置多个条件语句,但是只能 放置一个含有时钟边沿检测语句的条件语句.
3,进程要点 (1) PROCESS为一无限循环语句 在同一结构提中的任一进程是一个独立的无限循环结构,但 进程中不必放入返回语句,它的返回是自动的。 进程只有两种运行状态,即执行状态和等待状态。 (2)PROCESS中的顺序语句具有明显的顺序/并行运行双重性 进程的顺序语句的执行方式与软件语言的顺序执行方式有很大的不同。 软件语句的每一条语句的执行是按CPU的机器周期的节拍顺序执行的。 进程中,一个执行状态的运行周期(进程的启动执行到遇到END PROCESS为止所花的时间与任何外部因素都无关。 同一个进程中,10条语句和100条语句的执行时间是一样的。 例: PROCESS (abc) BEGIN abc发生改变时首先执行语句 CASE abc IS CASE abc IS ,即顺序执行最 WHEN “0000” => so<=“010” ; 前面的语句,若此时abc=“1110” WHEN “0001” => so<=“111” ; 立即执行so<=“100”,不用象软件 …………. 语言逐条比较.这就是并行运行 WHEN “1110” => so<=“100” ; 的特点. WHEN OTHERS => NULL ; END CASE; END PROCESS;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分类
VHDL中,对象包括4类:常量(Constant)、信号 (Signal)、变量(Variable)和文件(File)。 对于每个对象,必须定义它的类和类型,类指明对象 属于4类对象中的哪一类,类型指明该对象具有哪种 数据类型。
引用范围
全局对象和局部对象之间存在不同的作用范围。
数据对象DATA OBJECTS
THEN
【例4】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS BEGIN PROCESS (CLK) VARIABLE A,B : STD_LOGIC ; BEGIN IF CLK'EVENT AND CLK ='1' THEN A:= D1; B := A; Q1 <= B; END IF; END PROCESS ; END ;
变量VARIABLE 用于作为进程中局部数据存储单元 只能在所定义的进程中使用 立即赋值
【例1】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; q : out STD_LOGIC_vector(3 downto 0) ) ; END ; ARCHITECTURE bhv OF CNT4 IS signal q1: STD_LOGIC_vector(3 downto 0); BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' THEN q1 <= q1 + 1 ; END IF; q<=q1; END PROCESS ; END bhv;
与变量相比,信号的硬件特征更为明显,它具有全 局性特征.例如,在实体中定义的信号,在其对应的结构 体中都是可见的,即在整个结构体中的任何位置,任何 语句结构中都能获得同一信号的赋值. 除了没有方向说明外,信号与实体的端口(Port)概 念是一致的,对于端口来说,其区别只是输出端口不能 读入数据,输入端口不能被赋值.信号可以看成是实体 内部的端口.反之,实体的端口是一种隐形的信号,端口 的定义实质上是作了隐式的信号定义,并附加了数据 流动的方向.信号本身的定义是一种显式的定义.因此, 在实体中定义的端口,在其结构体中都可以看成是一 个信号,并加以使用,而不必另作定义.
格式与举例 Constant 常量名 :数据类型:=表达式 Constant fbus :bit_vector:=“01010101” Constant Vcc :real:=5.0
Constant Width :integer:=8 Constant Delay :time:=10ns
常量的可视性,即常量的使用范围:
【例2】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; USE IEEE.STD_LOGIC_UNSIGNED.ALL ; ENTITY CNT4 IS PORT ( CLK : IN STD_LOGIC ; q : out STD_LOGIC_vector(3 downto 0) ) ; END ; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) variable q1: STD_LOGIC_vector(3 downto 0); BEGIN IF CLK'EVENT AND CLK = '1' THEN q1 := q1 + 1 ; END IF; q<=q1; END PROCESS ; END bhv;
VARIABLE a : INTEGER RANGE 0 TO 15 ;--变量a定义为常数,取值范围是0到5 VARIABLE d : STD_LOGIC := ‘1’ ;--变量a定义为标准逻辑位数据类型, 初始值是1
变量定义语句中的初始值是一个与变量具有相同 数据类型的常数值,此初始值不是必须的. 由于硬件电路上电后的随机性,因此综合器并不 支持设置初始值.
⑤ 信号是硬件中连线的抽象描述,其功能是保存变化的数据 值和连接子元件,信号在元件的端口连接元件。变量在硬 件中没有类似的对应关系,主要应用于高层次建模中。 ⑥ 赋值符号不同,分别是“<=”,“:=”。
表1 信号与变量赋值语句功能的比较
信号SIGNAL 基本用法 适用范围 行为特性 用于作为电路中的信号连线 在整个结构体内的任何地方都能适用 在进程的最后才对信号赋值
使用与注意
① 信号可以在定义时赋值,也可以在实体中进行赋 值,如果不赋值则取默认值。
② 信号初始化时用“:=”进行初始化,但在实体 中进行赋值时须用“<=”,可以延时赋值。 ③ 实体说明部分、结构体说明部行信 号的定义。
④ 注意信号定义后的引用范围。
6.1 VHDL数据对象
概念
P59
VHDL语言中涉及许多信号、变量和常量,它们是用来保 持一个数据的,这些用来保持数据的一些单元——对象。
特点
每个对象都有一个类型用来确定对象所保持的哪一类数据。
VHDL语言是一种非常严格的类型化语言,规定每个对象和 表达式都要有唯一的确定类型,因此分配数值给对象时类型 不能混用,并且每个对象的类型是静态确定的,在本设计实 体中不可以改变。 以下内容我们将详细介绍对象、数据类型和运算操作符。
【例3】 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT ( CLK,D1 : IN STD_LOGIC ; Q1 : OUT STD_LOGIC); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL A,B : STD_LOGIC ; BEGIN PROCESS (CLK) BEGIN IF CLK'EVENT AND CLK = '1' A <= D1; B <= A; Q1 <=B; END IF; END PROCESS ; END ;
使用与注意
P64
① 一个实体中多处需要使用一个固定值,我们就可 以用常量进行描述,这样修改方便。
② 常量定义具有全局意义,一旦赋值不能再改变。 ③ 注意全局常量和局部常量的区别。
④ 常量所赋的值应该与定义的类型一致。
Constant Delay :time:=10.0
2.变量(VARIABLE)
在VHDL语法规则中,变量是一个局部量,只能在进 程和子程序中使用.变量不能将信息带出对它作出定 义的当前结构中.变量的赋值是一种理想化的数据传 输,是立即发生的不存在任何延时的行为.变量的主要 作用是在进程中作为临时的数据存储单元.
定义变量的一般表述: VARIABLE 变量名 : 数据类型 := 初始值 ;
D1
D
Q
D
Q
D
Q
Q1
D1 CLK
D
Q
Q1
CLK
例3的RTL电路
例4的RTL电路
【例6】 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); END mux4; ARCHITECTURE body_mux4 OF mux4 IS signal muxval : integer range 7 downto 0; BEGIN process(i0,i1,i2,i3,a,b) begin muxval <= 0; if (a = '1') then muxval <= muxval + 1; end if; if (b = '1') then muxval <= muxval + 2; end if; case muxval is when 0 => q <= i0; when 1 => q <= i1; when 2 => q <= i2; when 3 => q <= i3; when others => null; end case; end process; END body_mux4;
在VHDL 87标准中,数据对象有三类:变量 (VARIABLE)、常量(CONSTAN)和信号(SIGNAL).
1.常量(CONSTAN) 在程序中,常量是一个恒定不变的值,一旦作了数 据类型和赋值定义后,在程序中不能在改变,因而具有 全局性意义.
常数定义的一般表述: CONSTANT 常数名:数据类型 := 表达式 ;
CONSTANT FBT : STD_LOGIC_VECTOR := "010110" ; -- 标准位矢类型 CONSTANT DATAIN : INTEGER := 15 ; -- 整数类型
VHDL所定义的常量数据类型必须与表达式 的数据类型一致.
常量指在设计实体中不会发生变化的值,它可
以在很多部分进行说明,并且可以是任何数据类型。
它取决于它被定义的位置.如果在程序包中定 义,常量具有最大的全局化特征,可以用在调用此程 序包的所有设计实体中;常量如果定义在设计实体 中,其有效范围为这个实体定义的所有结构体(多结 构体);常量如果定义在设计实体的某一结构体中, 则只能用于此结构体;如果常量定义在结构体的某 一单元,如一个进程中,则这个常量只能用在这一进 程中.这就是常数的可视性规则,这一规则与信号 的可视性规则是完全一致的.
相关文档
最新文档