第5章VHDL深入

合集下载

VHDL硬件描述语言与数字逻辑电路设计 (5)[88页]

VHDL硬件描述语言与数字逻辑电路设计 (5)[88页]
第5章 VHDL构造体的描述方式
第5章 VHDL构造体的描述方式
5.1 构造体的行为描述方式 5.2 构造体的寄存器传输(RTL)描述方式 5.3 构造体的结构描述方式 习题与思考题
第5章 VHDL构造体的描述方式
5.1 构造体的行为描述方式
什么样的描述属于行为描述方式,这一点目前还没有确 切的定义,所以在不同的书刊中,对相同或相似的某些用 VHDL描述的逻辑电路的程序有不同的说明。有的说明为行 为描述方式,有的说明为寄存器传输描述方式。但是,有一 点是明确的,行为描述方式是对系统数学模型的描述,其抽 象程度比寄存器传输描述方式和结构描述方式更高。
第5章 VHDL构造体的描述方式
5.1.2 延时语句 在VHDL中存在两种延时类型:惯性延时和传输延时。
这两种延时常用于VHDL的行为描述方式。 1.惯性延时 在VHDL中,惯性延时是缺省的,即在语句中如果不作
特别说明,产生的延时一定是惯性延时,这是因为大多数器 件在行为仿真时都会呈现这种惯性延时。
第5章 VHDL构造体的描述方式
第5章 VHDL构造体的描述方式
在例5-2中用了两个语句:第一个语句是选择语句,第 二个语句是代入语句。这两个语句是条件代入类型语句。也 就是说,只有WHEN后面所指定的条件得到满足时,指定的 代入值才被代入信号量sel或输出量q。
当第一个语句执行时,将使用选择信号。根据选择信号 sel的当前值,后跟的5种状态下的值i0~i3、'X' 中的一个值 将通过输出端口q输出。在正常情况下,q端将选择i0~i3之 一输出,在非正常情况下将输出 'X' 值。
第5章 VHDL构造体的描述方式
几乎所有器件都存在惯性延时,因此,硬件电路的设计 人员为了逼真地仿真硬件电路的实际工作情况,在代入语句 中总要加上惯性延时时间的说明。例如:

第五章 组合逻辑电路的VHDL语言描述

第五章 组合逻辑电路的VHDL语言描述

BEGIN
PROCESS ( a, datain ) BEGIN IF ( datain = '1' ) THEN dataout <= '0' ; ELSE dataout <= '1' ; END IF ; END PROCESS ; END ARCHITECTURE behavioral_2 ; --RTL描述方式 ,MAX中需要加入时钟a
第5章
组合逻辑电路的VHDL描述
仿真波形
第5章
组合逻辑电路的VHDL描述
5.1.5 2输入同或门电路
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cynxor2 IS PORT ( datain1, datain2 : IN STD_LOGIC ; dataout : OUT STD_LOGIC ) ; END ENTITY cynxor2 ; ARCHITECTURE behavioral OF cynxor2 IS BEGIN
END ENTITY cyxor2 ;
ARCHITECTURE behavioral OF cyxor2 IS BEGIN dataout <= datain1 XOR datain2 ; END ARCHITECTURE behavioral ;
第5章
组合逻辑电路的VHDL描述
LIBRARY IEEE ;
第5章
组合逻辑电路的VHDL描述
LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY cynot IS
PORT ( a, datain : IN STD_LOGIC ; END ENTITY cynot ; ARCHITECTURE behavioral_2 OF cynot IS dataout : OUT STD_LOGIC ) ;

第五章_VHDL语言的主要描述语句

第五章_VHDL语言的主要描述语句

例:
library ieee; use ieee.std_logic_1164.all; entity kdec24 is port(a:in std_logic_vector (1 downto 0); en:in std_logic; f:out std_logic_vector (3
architecture d of kdec24 is begin
执行到该语句等待20ns以后,再继续执行下一条指令。
wait for( a*(b+c));
若a=2,b=50ns,c=70ns, 则执行到该语句时,就要等待2*(50+70)=240ns后, 再继续执行后续语句。
2016/3/23 20
例:利用wait for构成输入信号波形
process entity inhibittestbench is begin end entity inhibittestbench; xt<='0';yt<='0'; architecture beh of wait for 10 ns; inhibittestbench is xt<='0';yt<='1'; component inhibit is wait for 10 ns; port (x,y:in bit;z: out bit); xt<='1';yt<='0'; end component inhibit; wait for 10 ns; signal xt,yt,zt:bit; xt<='1';yt<='1'; begin wait; --进入无限期等待, u1: inhibit port map (xt, yt, 避免进入无限期循环; zt); end process; end architecture beh;

EDA第五章复习总结

EDA第五章复习总结

5.1 VHDL概述硬件描述语言(VHDL)的突出优点1.打破了IC设计者与使用者的界线2.VHDL及其配套工具软件简单易学,直观明了,便于迅速掌握,也便于修改。

3.极大地缩短了专用芯片的开发周期,降低开发成本,加快了产品更新换代的速度,提高产品的市场竞争力。

4.大大缩小电路板面积和整机体积,提高产品可靠性,增强产品功能,实现技术保密。

5.可实现电路设计的模块化和积木式多级组合。

各模块均可在今后被重复再利用(调用)。

6.完全实现拥有整机的自主知识产权,不再在关键芯片(专用芯片)的进口及价格方面受制于人。

5.2 VHDL程序的结构一、基本的VHDL描述的组成:实体(entity)部分64页2.结构体(architecture)部分67页IN(输入)、OUT(输出)是表示信号的类别;BIT是表示信号的类型,BIT是系统定义的类型,即二进位类型,信号只有‘0’和‘1’两种值;每个VHDL语句都是以“;”结束,包括最后一个语句也不例外;VHDL中的“注释”是以两个减号“--”开始的。

二、实体描述ENTITY 实体名ISPORT(信号名: 类别信号类型;………信号名: 类别信号类型);END 实体名;同样类别和类型的信号可以用逗号分隔,在一个语句行中说明。

信号的类别主要有以下4种:IN:此信号是输入信号;OUT:此信号是输出信号,提供给其他的实体;:缓冲信号,也是实体的输出信号,但是可以被实体本身的结构体读入;INOUT:双向信号,既可以输入,也可以输出。

系统预定义的信号类型有:BIT:二进位型,信号的值只能是‘0’或‘1’。

BIT_VECTOR:二进位向量,实际对应的是二进位数组;BOOLEAN:布尔型,取值只能是true或者false ;INTEGER:整型,一般都用32位二进制数表示整型数;CHARACTER:字符型,使用8位编码的ASCII字符。

三、结构体描述ARCHITECTURE 结构体名OF 实体名IS<声明部分>BEGIN<描述部分>END 结构体名;对于一个实体来说,可以有几种不同的结构体描述。

《数字电子技术与接口技术试验教程》课件第5章

《数字电子技术与接口技术试验教程》课件第5章
8
第5章 基于HDL的时序逻辑电路实验
图5-2 边沿D触发器的仿真结果
9
第5章 基于HDL的时序逻辑电路实验 (2) 边沿D触发器的VHDL源代码如下:
--Behavioral D Flip-Flop with Clock Enable and Asynchronous Reset
entity Dflipflop is Port (D,clk,rst,ce : in STD_LOGIC; Q : out STD_LOGIC);
architecture Behavioral of DFF is begin
process(clk, rst,D) begin
if (CLK'event and CLK='1') then if rst ='1' then Q <= '0'; else Q<=D; end if;
end if; end process; end Behavioral;
end if; end process; end Behavioral;
13
第5章 基于HDL的时序逻辑电路实验
(3) 带有置位和清零端的边沿D触发器的约束文件规定
如下:
#Basys2约束文件: NET "clk" LOC ="B8"; //时钟
#Basys2约束文件: NET "clk" LOC ="B8"; //时钟
end Dflipflop;
architecture Behavioral of Dflipflop is begin
process(clk, rst,D,ce)

第五章(VHDL主要描述语句)

第五章(VHDL主要描述语句)

(4) CASE语句执行中必须选中,且只能选中所列条件语
句中一条。这表明CASE语句中至少要包含一个条件语句。
CASE语句常用来描写总线行为、编码器和译码器的结构。CASE语句 与IF语句功能相似但CASE语句的可读性好,非常简洁。
CASE语句的误用:
SIGNAL value : INTEGER RANGE 0 TO 15 ; SIGNAL out_1 : BIT ; CASE value IS -- 缺少 WHEN条件语句 END CASE ; -- 分支条件不包含2到15 CASE value IS WHEN 0 => out_1 <= „1‟; WHEN 1 => out_1 <=„0‟; END CASE ; -- 在5到10上发生重叠 CASE value IS WHEN 0 TO 10 => out_1 <= „1‟; WHEN 5 TO 15 => out_1 <= „0‟; END CASE ;
IF语句不仅可用于选择器设计,还可用于比较 器,译码器等进行条件控制的逻辑设计。IF语句 中至少应有一个条件句,条件句必须由布尔表达 式构成,条件表达式中能使用关系运算操作及逻 辑运算操作的组合表达式。 IF语句颠倒条件判别次序,会引起在综合时逻辑 功能的变化,即IF语句判别条件不可颠倒。 IF语句中,先处理最起始的条件;如果不满足, 再处理下一个条件。一般把条件约束最多的作为 起始条件。

用IF语句描述一个二位等值比较器
ARCHITECTURE a OF compare IS LIBRARY IEEE; BEGIN PROCESS(a,b) USE IEEE.STD_LOGIC_1164.ALL; BEGIN ENTITY compare IS IF(a>b) THEN eater<='1';equal<='0';less<='0'; generic(n:natural:=2); ELSIF (a=b) THEN PORT( greater<='0';equal<='1';less<='0'; ELSE a,b:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); greater<='0';equal<='0';less<='1'; greater,equal,less:OUT STD_LOGIC); END IF; END PROCESS; END; END;

EDA技术及应用 第5章

EDA技术及应用 第5章

表 5-1 端口模式说明
端口模式
端口模式说明(以设计实体为主体)
IN
OUT
BUFFER INOUT LINKAGE
输入,只读模式,将变量或信号信息通过该端口读入,与 IN、INOUT 及 BUFFER 型端口连接
输出,单向赋值模式,将信号通过该端口输出,与 OUT、INOUT 及 BUFFER 型端 口连接
第 5 章 VHDL程序结构
5.1 实体 5.2 构造体 5.3 库 5.4 程序包 5.5 配置
作为一种程序设计语言,VHDL除有上述两种基本语言结 构外,还有程序包(PACKAGE)、库(LIBRARY)和配置 (CONFIGURATION)。一个相对完整的VHDL程序(或称为设 计实体)具有如图5-1所示的结构。下面就这几部分结构作两点 说明:
(1) VHDL中实体、构造体、库、程序包是必备的结构, 而配置不是必备的,可以省略。通常我们将VHDL所描述的某 个电路称之为一个设计实体。需要注意的是,当设计中只调用 STD库时,可以省略库、程序包使用说明,这是由于STD库是 显式打开的,不用声明。
(2) 在一个VHDL设计中只能有一个实体;而同一个设计 实体可以对应多个构造体。这是因为VHDL语言支持行为级、 RTL传输级等多种抽象描述层次,而一个抽象层次通常可以对 应至少一种描述语句。
2. 类属说明 类属(GENERIC)参量是一种端口常数,用于说明端口的静 态特性。类属的值可以由设计实体外部提供,因此,设计者可 以通过重新设定类属参量来改变一个设计实体或一个元件的内 部电路结构和规模。
类属说明的格式如下: GENERIC(常量名:数据类型[:=设定值 量纲]; 常量名:数据类型[:=设定值 量纲]);
库、程序包使用说明

《VHDL语言程序设计》课程教学大纲

《VHDL语言程序设计》课程教学大纲

GDOU-B-11-213《VHDL语言程序设计》课程教学大纲课程简介课程简介:本课程为软件工程专业嵌入式专业方向的专业课,是开发基于FPGA/CPLD嵌入式系统的必备基础。

主要内容包括FPGA/CPLD目标器件的结构和工作原理、EDA技术和工作流程、VHDL基础知识、VHDL实用方法和设计深入、原理图输入法、LPM宏功能模块实用方法、状态机设计以及EDA优化设计。

目的是为后续课程的学习和嵌入式系统的设计作必须的基础准备。

课程大纲一、课程的性质与任务:本课程是软件工程专业的专业方向课程。

教学任务主要包括使学生了解EDA技术的工作流程,正确使用开发平台,掌握以VHDL为代表的硬件描述语言的基本知识、编程实用方法和工程设计方法,掌握原理图设计法、状态机设计法,能够正确使用IP Core和LPM等宏功能模块。

本课程是软件工程专业嵌入式专业方向的第一门专业方向课,是后续课程的必备基础,具有较重要的地位。

二、课程的目的与基本要求:本课程涉及到的学科基础知识面广,要求软硬件兼备,需要较好的学科基础。

通过本课程的学习,最终达到能够设计基于FPGA/CPLD的ASIC,并能进行EDA优化的目的。

三、面向专业:软件工程四、先修课程:《计算系统基础》五、本课程与其它课程的联系:本课程的先行课程是计算系统基础。

服务的主要后续课程包括基于FPGA的嵌入式软件开发、基于ARM的嵌入式软件开发等。

六、教学内容安排、要求、学时分配及作业:第一章概述(2学时)1.1 EDA技术及其发展(C)1.2 硬件描述语言硬件描述语言种类、自顶向下设计方法、EDA工程设计流程。

(A)1.3 面向FPGA/CPLD的开发流程设计输入、分析综合、布局布线、仿真、下载和硬件测试。

(A)1.4 IP Core 及EDA技术发展趋势。

(C)第二章 FPGA硬件特性与编程技术(8学时)2.1 PLD发展历程及其分类(c)2.2 低密度PLD工作原理PROM、PLA、PAL、GAL。

第5章 组合逻辑电路(combinational logic)

第5章   组合逻辑电路(combinational   logic)

o <= ‘1’ when a=’1’ and b =’1’ else ‘0’; 这表示当输入端信号a及信号b都是逻辑’1’时,输出信号o才会为’1’,否则 输出信号o都是’0’。由此可以画出其真值表如表5—1所示。
表 5-1
a
b
C
0
0
0
0
1
0
1
0
0
1
l
1
由真值表可得知它也是一个and gate。 ‘ 当 然 两 种 表 示 法 各 有 优 劣 ,第 一 种 表 示法 相 当 简 洁 ,一 眼 看 去 便 知 道 是 一 个 双输入的and gate。在输入端扩充时也相当明确,例如4输入的and gate其表示 成:
( ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’ ), --|L|
( ‘U’, ‘X’, ‘0’, ‘1’, ‘X’, ‘X’, ‘0’, ‘1’, ‘X’ ), --|H|
( ‘U’, ‘X’, ‘0’, ‘X’, ‘X’, ‘X’, ‘0’, ‘X’, ‘X’ ), --|-|
( ‘U’, ‘U’, ‘0’, ‘U’, ‘U’, ‘U’, ‘0’, ‘U’, ‘U’ ), --|U|
( ‘U’, ‘X’, ‘0’, ‘X’, ‘X’, ‘X’, ‘0’, ‘X’, ‘X’ ), --|X|
( ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’, ‘0’ ), --|0|
设计起来就太麻烦了,设计者可能要重写许多function来处理一些像and、or、
not等最基本的功能。
事实上如果你声明的a、b、o、o1都是std_logic,在compile时仍然不会出 现 任 何 错 误 信 息 , 这 又 是 为 什 么 呢 ?原 因 是 std_logic及 UX01都 是 由 基 本 类 型 std_ulogic所衍生的子数据类型。在IEEE的std_logic_1164 package中,虽然没 有一个如下所示的function:

VHDL详解

VHDL详解

自顶向下的系统设计方法


自底向上设计方法 首先确定可用的元器件,然后根据 这些器件进行逻辑设计,完成各模块后 进行连接,最后形成系统。 TOP-TO-DOWN(自顶向下):
自顶向下 的系统设 计方法
采用硬件描述语言,在系统的基本 功能或行为级上对设计的产品进行描述 和定义,结合多层次的仿真技术、在确 保设计的可行性与正确性的前提下,完 成功能确认。然后利用EDA工具的逻辑 综合功能,把功能描述转换成某一具体 目标芯片的网表文件,输出给该器件厂 商的布局布线适配器,进行逻辑映射及 布局布线,再利用产生的仿真文件进行 功能和时序的验证,以确保实际系统的 性能。
数据类型; 数据类型
端口名
赋于每个外部引脚的名称通常 以1个或n个英文字母或以字母 打头后跟数字命名 如:d0、d1、sel、q
端口方向: Nhomakorabea

定义外部引脚是输入还是输出 表明方向的说明符如下: IN 输入,信号从端口进入结构体内; OUT 输出,信号从结构体内流经端口输出 (结构体内不再使用) INOUT 双向; BUFFER 输出,结构体可再使用
结构体构造图
对结构体的描述方式
有以下三种: 行为描述 数据流方式 结构描述

行为描述:





对设计实体的数学模型的描述 其抽象程度远高于其他描述 主要使用函数、过程或进程语句 以算法形式描述数据的变换和传送 描述该设计单元的功能,即:描述输 入与输出的行为
Behavioral Modeling
FPGA/CPLD的优势

高集成度、高速和高可靠是FPGA/CPLD 最明显的特点,其时钟延迟可达纳秒级, 结合其并行工作方式,在超高速应用领 域和实时测控方面有非常广阔的应用前 景。

第5章 VHDL结构及实例

第5章 VHDL结构及实例

8.3 VHDL子程序
8.3.7 子程序调用语句
1. 过程调用
5.3 VHDL操作符
逻辑操作符(Logical Operator) 关系操作符(Relational Operator) 算术操作符(Arithmetic Operator) 符号操作符(Sign Operator) 重载操作符(Overloading Operator)
HDL可编程逻辑器件 第5章 VHDL结构及实例
5.1 VHDL程序的基本结构
通常一个完整的VHDL程序(或称为设 计实体)应该包含库(LIBRARY)、程序包 (PACKAGE)、实体(ENTITY)、结构体 ( A R C H I T E C T U R E ) 和 配 置 (CONFIGURATION)五个部分,如图5.1 所示。
VHDL重载函数:
-- 程序包首 PACKAGE STD_LOGIC_UNSIGNED is function "+" (L : STD_LOGIC_VECTOR ; R : INTEGER) return STD_LOGIC_VECTOR ; function "+" (L : INTEGER; R : STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR ; function "+" (L : STD_LOGIC_VECTOR ; R : STD_LOGIC ) return STD_LOGIC_VECTOR ; ... end STD_LOGIC_UNSIGNED ;
库、程序包使用说明 设 计 实 体 结构体(ARCHITECTURE)
GENERIC 类属说明
实体(ENTITY)

EDA技术第5章

EDA技术第5章

利用EDA工具进
行仿真和验证
状态机一般由三个模块构成:状态寄存器、次态逻辑和输出逻辑。
在使用VHDL描述状态机时,通常从状态机的三个基本模块入手,可分为:
(1)单进程(一段式)
将整个状态机的三个模块合并起来,写到一个进程里面,在该进程中既描述状
态转移,又描述状态的输入和输出。
(2)两进程(二段式)
(2)条件(事件、输入信号):当条件被满足,会执行状态的迁移。
(3)动作(操作、输出控制信号):条件满足后执行的动作。
(4)次态(下一个状态):条件满足后要迁移的新状态。
有限状态机分类
(1)根据状态迁移是否受时钟控制:同步有限状态机 & 异步有限状态机
(2)隐式有限状态机 & 显式有限状态机
(3)根据状态机的信号输出方式:摩尔(Moore)型 & 米勒(Mealy)型
IF rst =‘1’ THEN
Z <= ‘1’ ;
END IF;
current_state <= S1;
WHEN S3 =>
END CASE;
ELSE
Z <= ‘0’ ;
END PROCESS;
current_state <= next_state;
END CASE;
END IF;
END PROCESS;
(4)运行速度块,比CPU高出近两个数量级,在高速运算和控制方面有优势;
(5)可靠性高。如复位时间、与CPU相比,复位时间短很多。
由状态机构成的硬件系统广泛应用在一般CPU无法胜任的领域,如超高速
串行或并行AD、DA的控制,硬件串行通信接口RS232、PS/2、USB的实现

EDA技术教程讲义第五章VHD初步

EDA技术教程讲义第五章VHD初步
·以规定设计中的各种寄存器形式为特征 ,并在各寄存器之间插入组合逻辑,能描 述组合逻辑和时序逻辑 ·既可以用功能描述的RTL方式,也可用与 硬件一一对应的方式 ·基于并行赋值语句实现
结 调用低层设计模块或门级电路, ·主要应用VHDL中的例化语句和生成语句 构 过端口连接实现设计要求。类似于 ·完成各种简单电路到复杂电路的演变 描 实际的硬件电路连接 述
a: IN BIT; b: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); SIGNAL C: STD_LOGIC_VECTOR(1 TO 4); SIGNAL d: BIT_VECTOR (3 DOWNTO 0);
三、结构体(ARCHITECTURE)说明
1、结构体的功能与格式
U2: nand2 PORT MAP (q,reset, qbar); END entlist;
表5.1.5 结构体中的三种子结构方式比较
子结构名称
语句格式
特点
块语句结构 进程语句结构
子程序语句结 构
块结构名: BLOCK
端口说明 类属说明 BEGIN 并行语句 END BLOCK 块结构名;
进程名: PROCESS(每感信号表)IS 进程说明 BEGIN 顺序描述语句 END PROCESS 进程名;
[例5-3] 用行为描述方式设计的全加器
LIBRARY IEEE;
--库说明
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY onebitadder IS
--实体说明
PORT(x,y,cin:IN BIT;
--端口信号定义
Sum,count: OUT BIT);
END onebitadder;

第5章_VHDL时序电路+状态机+交通灯

第5章_VHDL时序电路+状态机+交通灯

时序逻辑电路设计
读懂每一个时序电路的VHDL程 序,能够熟练进行分析。 能够根据已知功能写出相关的 VHDL程序。
重点内容: • 时序逻辑电路的基本概念 • 触发器 • 寄存器 • 计数器
时钟信号
任何时序电路都以时钟信号为驱动信号, 时序电路仅在时钟信号的边沿到来时,其 状态才发生改变。因此,时钟信号通常是 描述时序电路程序的执行条件. 另外,时序电路也总是以时钟进程的形式 进行描述的。
(三).计数器
1.计数器简介
定义: 数字电路中用来记忆时钟脉冲个数的逻辑电 路。 原理:采用几个触发器的状态,按照一定规 律随时钟变化来记忆时钟的个数。 计数器的模:一个计数器所能记忆时钟脉冲 的最大数目。
1.计数器简介
计数器的分类
1、同步计数器、异步计数器。
2、加法计数器、减法计数器和可逆计数器。

IF (clk′EVENT AND clk=′0′) THEN WAIT UNTIL clk=‘0’; IF (clk’last_value=‘1’ AND clk’event AND clk=‘0’) THEN

IF (falling_edge(clk)) THEN
复位信号
同步复位,就是当复位信号有效且在给 定的时钟边沿到来时,触发器才被复位 。换一句话说,即使复位信号有效,如 果时钟脉冲边沿未到来,触发器也不会 复位。 非同步复位则不同,一旦复位信号有效 ,触发器就立即复位。
第5章 VHDL基本逻辑电路设计
--时序逻辑电路
时序逻辑电路概述
回顾:
组合逻辑电路:任意时刻的输出仅取决于该 时刻数据的输入,与电路原来的状态无关。 时序逻辑电路:是指数字电路在任何时刻的 输出不仅取决于当时的输入信号,而且还取决 于电路原来的状态,或者说和以前的输入有关。

EDA技术及应用_第5章_1

EDA技术及应用_第5章_1

第5章VDHL程序设计介绍硬件描述语言(HDL)是用来描述硬件电路的功能、信号连接关系及时序关系的语言,也是一种用形式化方法来描述数字电路和设计数字系统的语言。

常用的硬件描述语言有ABEL、AHDL、VHDL、Verilog HDL、System-Verilog和System C等等。

VHDL----V ery high speed integrated circuitH ardware D escription L anguage1.超高速集成电路(VHSIC)硬件描述语言美国国防部在80年代初研究VHSIC计划时组织开发的,并成功用于军方的设计项目.2.IEEE 标准: IEEE Std 1076-1987 (called VHDL 1987)IEEE Std 1076-1993 (called VHDL 1993)由于当时工业界的迫切需要,IEEE标准化委员会于1987年将其确定为标准硬件描述语言,1993年,又对此标准作了进一步修定.3. VHDL语言特点(1)行为描述能力强描述简单、方便(2)丰富的仿真语句和函数库可在高层次上进行仿真模拟(3)支持大规模设计的分解和已有设计的再利用功能实体、程序包、设计库等是并行工作和设计分解的基础(4)EDA工具支持它的综合、仿真和优化系统级、算法级、RTL级、逻辑级、开关级等(5)对设计描述具有相对独立性与具体的工艺技术和硬件结构无关(6)良好的可扩展性可轻易改变设计的规模和结构4.常用的三种硬件描述语言的比较VHDL:行为级描述描述层次高,适宜电路高级建模,设计工作量小综合过程:行为级->RTL级->门电路级Verilog-HDL:RTL级描述描述层次低,适宜描述门级电路,设计工作量大综合过程:RTL级->门电路级ABEL-HDL: RTL级描述描述层次和综合过程同Verilog多用在小规模的PLD 设计中,如GAL等在全定制集成电路设计中不如VHDL、Verilog-HDL使用普遍5.1 VHDL程序的基本结构库、程序包实体结构体配置library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity counter10 isport(en,reset,clk:in std_logic;q:buffer std_logic_vector(3 downto 0);co:out std_logic);end counter10;architecture behav of counter10 isbeginprocess(clk,reset,en)beginif reset='1' thenq<="0000";elsif clk'event and clk='1' thenif en='1' thenif q<"1001" then q<=q+1;else q<="0000";end if;end if;end if;end process;co<='1' when q="1001" else '0';end behav;5.1.1 实体(Entity)在VHDL设计中,实体是其最基本的结构。

第5章-VHDL-状态机

第5章-VHDL-状态机

有限状态机的设计中能使用各种完整的容错技术, 可避免大部分错误,即便发生运行错误,由于有 限状态机运行速度上的优势,进入非法状态并从 中跳出,进入正常状态所耗的时间通常只有二三 个时钟周期,约数十纳秒,尚不足以对系统的运 行构成损害;而CPU通过复位方式从非法运行方 式中恢复过来,耗时达数十毫秒,这对于高速高 可靠系统显然是无法容忍的。
无论有限状态机属于何种类型,其结构均可
分为状态说明、主控时序进程、主控组合进程和 辅助进程几个部分。
5.1 状态机设计相关语句
5.1.3 状态机结构
1. 说明部分
ARCHITECTURE ...IS TYPE FSM_ST IS (s0,s1,s2,s3); SIGNAL current_state, next_state: FSM_ST;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY s_machine IS
PORT ( clk,reset : IN STD_LOGIC;
state_inputs : IN STD_LOGIC_VECTOR (0 TO 1);
comb_outputs : OUT INTEGER RANGE 0 TO 15 );
(1) 有限状态机是纯硬件数字系统中的顺序控制电路,具 有纯硬件电路的速度和软件控制的灵活性。 (2) 由于有限状态机的结构模式相对简单,设计方案相对 固定,特别是可以定义符号化枚举类型的状态,这一切都 为VHDL综合器尽可能发挥其强大的优化功能提供了有利 条件。而且,性能良好的综合器都具备许多可控或自动的 专门用于优 化有限状态机的功能。 (3) 有限状态机容易构成性能良好的同步时序逻辑模块, 这对于解决大规模逻辑电路设计中令人深感棘手的竞争冒 险现象无疑是一个上佳的选择。为了消除电路中的毛刺现 象,在有限状态机设计中有多种设计方案可供选择。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章VHDL深入本章仍将沿用第3章中通过一些实例引出了相关的VHDL语法结构和语言现象,并给予一定说明的方法,介绍一些新的实例及相关的VHDL语法知识,使读者进一步深入了解VHDL语言现象和语句规则的特点,以及应用VHDL表达与设计电路的方法。

下面首先对第3章出现的一些语法现象作更为深入的讨论,然后再引出一些新的实例,帮助读者对相关的语法现象作更详细的了解。

5.1 数据对象及其示例说明在VHDL中,数据对象有三类,即变量(V ARIABLE)、常量(CONSTANT)和信号(SIGNAL)。

如前所述,数据对象类似于一种容器,它接受不同数据类型的赋值。

变量和常量可以从软件语言中找到对应的类型,然而信号的表现较特殊,它具有更多的硬件特征,是VHDL中最有特色的语言要素之一。

尽管信号和变量已在前面一些示例中出现过,但都没有作更详细的解释,这势必影响对VHDL程序的更好理解,以下将针对数据对象给出一些示例,以作进一步的说明。

5.1.1 常数常数的定义和设置主要是为了使程序更容易阅读和修改。

例如,将逻辑位的宽度定义为一个常量,只要修改这个常量就能很容易地改变宽度,从而改变硬件结构。

在程序中,常量是一个恒定不变的值,一旦作了数据类型和赋值定义后,在程序中不能再改变,因而具有全局性意义。

常数定义的一般表述如下:CONSTANT 常数名:数据类型 := 表达式;例如:CONSTANT FBT : STD_LOGIC_VECTOR := "010110" ; -- 标准位矢类型CONSTANT DATAIN : INTEGER := 15 ; -- 整数类型第1句定义常数FBT的数据类型是STD_LOGIC_VECTOR,它等于"010110";第2句定义常数DATAIN的数据类型是整数INTEGER,它等于15 。

VHDL要求所定义的常量数据类型必须与表达式的数据类型一致。

常数定义语句所允许的设计单元有实体、结构体、程序包、块、进程和子程序。

常数的可视性,即常数的使用范围取决于它被定义的位置。

如果在程序包中定义,常EDA技术与VHDL124数具有最大的全局化特征,可以用在调用此程序包的所有设计实体中;常数如果定义在设计实体中,其有效范围为这个实体定义的所有的结构体(含多结构体时);如果常数定义在设计实体的某一结构体中,则只能用于此结构体;如果常数定义在结构体的某一单元,如一个进程中,则这个常数只能用在这一进程中。

这就是常数的可视性规则。

这一规则与信号的可视性规则是完全一致的。

5.1.2 变量在VHDL语法规则中,变量是一个局部量,只能在进程和子程序中使用。

变量不能将信息带出对它作出定义的当前结构中。

变量的赋值是一种理想化的数据传输,是立即发生的,不存在任何延时的行为。

变量的主要作用是在进程中作为临时的数据存储单元。

定义变量的一般表述如下:VARIABLE 变量名 : 数据类型 := 初始值 ;例如:VARIABLE a : INTEGER RANGE 0 TO 15 ;--变量a定义为常数,取值范围是0到5VARIABLE d : STD_LOGIC := ‘1’ ;--变量a定义为标准逻辑位数据类型, 初始值是1 分别定义a的取值范围从0到15的整数型变量;d为标准位类型的变量,初始值是1。

变量作为局部量,其适用范围仅限于定义了变量的进程或子程序的顺序语句中。

在这些语句结构中,同一变量的值将随变量赋值语句前后顺序的运算而改变,因此,变量赋值语句的执行与软件描述语言中的完全顺序执行的赋值操作十分类似。

在变量定义语句可以定义初始值,这是一个与变量具有相同数据类型的常数值,这个表达式的数据类型必须与所赋值的变量一致,初始值的定义不是必需的。

此外,由于硬件电路上电后的随机性,因此综合器并不支持设置初始值。

变量赋值的一般表述如下:目标变量名 := 表达式 ;由此式可见,变量赋值符号是 := ,变量数值的改变是通过变量赋值来实现的。

赋值语句右方的“表达式”必须是一个与“目标变量名”具有相同数据类型的数值,这个表达式可以是一个运算表达式,也可以是一个数值。

通过赋值操作,新的变量值的获得是立刻发生的。

变量赋值语句左边的目标变量可以是单值变量,也可以是一个变量的集合,如位矢量类型的变量,如: VARIABLE x,y : INTEGER RANGE 15 DOWNTO 0 ;--分别定义变量x和y为整数类型VARIABLE a,b : STD_LOGIC_VECTOR(7 DOWNTO 0) ;x := 11 ;y := 2 + x ; -- 运算表达式赋值,y 也是实数变量a :=b --b向a赋值a(0 TO 5) := b(2 TO 7) ;5.1.3 信号信号是描述硬件系统的基本数据对象,它的性质类似于连接线。

信号可以作为设计实第5章 VHDL深入125体中并行语句模块间的信息交流通道。

信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值(这决定于语句的表达方式)。

这一属性与触发器的记忆功能有很好的对应关系,只是不必注明信号上数据流动的方向。

信号定义的语句格式与变量相似,信号定义也可以设置初始值,定义格式是:SIGNAL 信号名:数据类型 := 初始值;同样,信号初始值的设置也不是必需的,而且初始值仅在VHDL的行为仿真中有效。

与变量相比,信号的硬件特征更为明显,它具有全局性特征。

例如,在实体中定义的信号,在其对应的结构体中都是可见的,即在整个结构体中的任何位置,任何语句结构中都能获得同一信号的赋值。

事实上,除了没有方向说明以外,信号与实体的端口(Port)概念是一致的。

对于端口来说,其区别只是输出端口不能读入数据,输入端口不能被赋值。

信号可以看成是实体内部(设计芯片内部)的端口。

反之,实体的端口只是一种隐形的信号,在实体中对端口的定义实质上是作了隐式的信号定义,并附加了数据流动的方向,而信号本身的定义是一种显式的定义。

因此,在实体中定义的端口,在其结构体中都可以看成是一个信号,并加以使用,而不必另作定义。

此外还需要注意,信号的使用和定义范围是实体、结构体和程序包,在进程和子程序的顺序语句中不允许定义信号。

此外,在进程中只能将信号列入敏感表,而不能将变量列入敏感表。

可见进程只对信号敏感,而对变量不敏感,这是因为只有信号才能把进程外的信息带入进程内部,或将进程内的信息带出进程。

当信号定义了数据类型和表达方式后,在VHDL设计中就能对信号进行赋值了。

信号的赋值语句表达式如下:目标信号名 <= 表达式 AFTER 时间量;这里的“表达式”可以是一个运算表达式,也可以是数据对象(变量、信号或常量)。

数据信息的传入可以设置延时量,如AFTER 3 ns。

因此目标信号获得传入的数据并不是即时的。

即使是零延时(不作任何显式的延时设置,即等效于AFTER 0 ns),也要经历一个特定的延时,即?延时。

因此,符号“<=”两边的数值并不总是一致的,这与实际器件的传播延迟特性是吻合的,因此这与变量的赋值过程有很大差别。

信号的赋值可以出现在一个进程中,也可以直接出现在结构体的并行语句结构中,但它们运行的含义是不一样的。

前者属顺序信号赋值,这时的信号赋值操作要视进程是否已被启动,并且允许对同一目标信号进行多次赋值;后者属并行信号赋值,其赋值操作是各自独立并行地发生的,且不允许对同一目标信号进行多次赋值。

即在进程中,可以允许同一信号有多个驱动源(赋值源),即在同一进程中存在多个同名的信号被赋值,其结果只有最后的赋值语句被启动,并进行赋值操作。

例如:SIGNAL a,b,c,y,z: INTEGER ;...PROCESS (a,b,c)BEGINy <= a + b ;z <= c – a ;EDA技术与VHDL126y <= b ;END PROCESS ;上例中,a、b、c被列入进程敏感表,当进程被启动后,信号赋值将自上而下顺序执行,但第一项赋值操作并不会发生,这是因为y的最后一项驱动源是b,因此y被赋值b。

但在并行赋值语句中,不允许如上例所示的同一信号有多个驱动源的情况。

5.1.4 进程中的信号与变量赋值准确理解和把握一个进程中的信号和变量赋值行为的特点以及它们功能上的异同点,对利用VHDL进行正确地设计电路十分重要。

以下对信号和变量这两种数据对象在赋值上的异同点作一些比较分析,使读者对它们有更深刻的理解。

一般地,从硬件电路系统来看,变量和信号相当于逻辑电路系统中的连线和连线上的信号值;常量相当于电路中的恒定电平,如GND或VCC接口。

从行为仿真和VHDL语句功能上看,信号与变量具有比较明显的区别,其差异主要表现在接受和保持信号的方式和信息保持与转递的区域大小上。

例如信号可以设置传输延迟量,而变量则不能;变量只能作为局部的信息载体,如只能在所定义的进程中有效,而信号则可作为模块间的信息载体,如在结构体中各进程间传递信息。

变量的设置有时只是一种过渡,最后的信息传输和界面间的通信都靠信号来完成。

综合后的VHDL文件中信号将对应更多的硬件结构。

但对于信号和变量的认识单从行为仿真和纯语法的角度去认识是不完整的。

事实上,在许多情况下,综合后所对应的硬件电路结构中信号和变量并没有什么区别。

例如在满足一定条件的进程中,综合后它们都能引入寄存器,如例3-23。

其关键在于,它们都具有能够接受赋值这一重要的共性,而VHDL综合器并不理会它们在接受赋值时存在的延时特性(只有VHDL仿真器才会考虑这一特性差异)。

表5-1就基本用法、适用范围和行为特性方面对信号与变量作了比较。

表5-1 信号与变量赋值语句功能的比较信号SIGNAL 变量VARIABLE基本用法用于作为电路中的信号连线用于作为进程中局部数据存储单元适用范围在整个结构体内的任何地方都能适用只能在所定义的进程中使用行为特性在进程的最后才对信号赋值立即赋值为了更具体地了解信号与变量的特性,以下给出示例说明。

试比较例5-1和例5-2。

例5-2与例3-6是相同的,是典型的D触发器的VHDL描述,综合后的电路如图5-2所示。

例5-1仅是将例5-2中定义的信号换成了变量,其综合的结果与例5-2完全一样,也是图5-2所示的D触发器。

此2例表明,在不完整的条件语句中,单独的变量赋值语句与信号赋值语句都能产生相同的时序电路,此时变量已不是简单的数据临时储存结构。

【例5-1】. . .ARCHITECTURE bhv OF DFF3 IS第5章 VHDL深入127BEGINPROCESS (CLK)VARIABLE QQ : STD_LOGIC ;BEGINIF CLK'EVENT AND CLK = '1' THEN QQ := D1 ;END IF;END PROCESS ;Q1 <= QQ;END ;【例5-2】. . .ARCHITECTURE bhv OF DFF3 ISSIGNAL QQ : STD_LOGIC ;BEGINPROCESS (CLK)BEGINIF CLK'EVENT AND CLK = '1' THEN QQ <= D1 ;END IF;END PROCESS ;Q1 <= QQ;END ;再较例5-3和例5-4,它们惟一的区别是对进程中的A和B定义了不同的数据对象,前者定义为信号而后者定义为变量。

相关文档
最新文档