《VHDL设计初步》PPT课件

上传人:san****019 文档编号:16510068 上传时间:2020-10-04 格式:PPT 页数:117 大小:889.50KB
收藏 版权申诉 举报 下载
《VHDL设计初步》PPT课件_第1页
第1页 / 共117页
《VHDL设计初步》PPT课件_第2页
第2页 / 共117页
《VHDL设计初步》PPT课件_第3页
第3页 / 共117页
资源描述:

《《VHDL设计初步》PPT课件》由会员分享,可在线阅读,更多相关《《VHDL设计初步》PPT课件(117页珍藏版)》请在装配图网上搜索。

1、数字电路与系统设计EDA实验,VHDL设计初步,数字电路与系统设计EDA实验,内容安排:,电子工程学院必修课() 硬件描述语言(VHDL or VerilogHDL) (10学时) 电子工程学院必修课及限选、校任选课() EDA设计工具软件及实验 (10学时) SOPC及Nios II嵌入式系统设计 (10学时) 综合设计实验 (10学时),西安电子科技大学国家电工电子教学基地 西电Altera EDA/SOPC联合实验室及培训中心(E楼II-401),第1部分 VHDL设计初步,数字电路与系统设计EDA实验,VHDL历史回顾,VHDL 语言是美国国防部(DOD)在 20 世纪 80 年代初为

2、实现其高速集成电路计划(VHSICVery High Speed Integrated Circuit)而提出的一种硬件描述语言(HDLHardware Description Language),以作为各合同商之间提交复杂电路设计文档的一种标准方案,VHDL的含义为超高速集成电路硬件描述语言。 1987年被采纳为IEEE 1076标准(VHDL87)。 1993年被更新为IEEE 1164标准(VHDL93)。,VHDLVHSIC Hardware Description Language,HDL 的出现是为了适应电子系统设计的日益复杂性。若以计算机软件的设计与电路设计做个类比:,机器码好比

3、晶体管/MOS管;,汇编语言好比电路网表;,HDL语言就如同高级语言。,几种常用的HDL语言: (1)VHDL硬件描述语言:功能强,规范性好; (2)VerilogHDL硬件描述语言:功能强、灵活性高; (3)ABEL硬件描述语言:属于较低级的硬件描述语言; (4)AHDL硬件描述语言:Altera公司开发,语法简单,但不通用。 其中:VHDL和VerilogHDL已成为IEEE标准。,VHDLVHSIC Hardware Description Language,VHDL在语法和风格上类似于现代高级编程语言。但要注意,VHDL毕竟描述的是硬件,它包含许多硬件特有的结构。 HDL是用文字化方法

4、描述电子电路与系统。,计算机语言描述特点是 :顺序性,HDL语言描述的特点是:并行性,VHDLVHSIC Hardware Description Language,VHDL与计算机语言的区别,运行的基础 计算机语言是在CPURAM构建的平台上运行 VHDL设计的结果是由具体的逻辑、触发器组成的数字电路 (使用Quartus 软件编程,最终下载入可编程逻辑器件中实现一个数字系统) 执行方式 计算机语言基本上以串行的方式执行 VHDL在总体上是以并行方式工作 验证方式 计算机语言主要关注于变量值的变化 VHDL要实现严格的时序逻辑关系,数字电路与系统设计回顾,组合逻辑电路,时序逻辑电路,分析,设

5、计,真值表,分析,设计,与、或、非 与非、或非 异或、同或,RS触发器 D触发器 T触发器 JK触发器,主要内容安排,1 多路选择器的VHDL描述,2 时序电路的VHDL描述,3 更复杂电路的VHDL描述,5 VHDL设计练习,4 有限状态机(状态转移图)设计,1 多路选择器的VHDL描述,例1.1 2选1多路选择器的VHDL描述,2选1MUX输入/输出端口 (实体Entity),电路功能 实现 (结构体Architecture),?,例1.1 2选1多路选择器的实体描述,1 多路选择器的VHDL描述,说明:以关键字ENTITY引导,以END (ENTITY) xxx结尾的语句部分,称为实体。

6、描述电路的外部情况及接口性质。,ENTITY mux21 IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21; ARCHITECTURE one OF mux21 IS BEGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,例1.1 2选1多路选择器的结构体描述1 (行为描述),说明:以关键字ARCHITECTURE引导,以END (ARCHITECTURE) xxx结尾的语句部分,称为结构体。描述电路的内部逻辑功能或电路结构。,1 多路选择器的VHDL

7、描述,例1.1 2选1多路选择器的结构体描述2 (原理图描述),1 多路选择器的VHDL描述,例1.1 2选1多路选择器的结构体描述3 (布尔方程描述),1 多路选择器的VHDL描述,说明:以上三种结构体描述都是并行语句,例1.1 2选1多路选择器的结构体描述4 (进程描述),1 多路选择器的VHDL描述, ARCHITECTURE one OF mux21 IS BEGIN PROCESS (a,b,s) BEGIN IF s = 0 THEN y = a ; ELSE y = b ; END IF; END PROCESS; END ARCHITECTURE one ;,-a,b,s 为敏

8、感信号表,2选1多路选择器功能时序波形,例1.1 2选1多路选择器的EDA软件仿真结果,1 多路选择器的VHDL描述,1.1 实体表达(ENTITY),1 多路选择器的VHDL描述,例1.1VHDL描述中出现的相关语句结构和语法说明,ENTITY 实体名 IS GENERIC (类属表); PORT (端口表); END ENTITY 实体名;,实体在电路中主要是说明该电路的输入、输出关系,更具体地说就是用来定义实体与外部的连接关系以及需传送给实体的参数。,ENTITY 实体名 IS GENERIC (类属表); PORT (端口表); END ENTITY 实体名;,(1)类属表:用以将信息

9、参数传递到实体。 (2)端口表:指明实体的输入、输出信号及其模式、数据类型。,PORT (端口名:端口模式 数据类型; 端口名:端口模式 数据类型 );,英文字母+数字,数据流动方向,主要有“位”和“位矢量”两类,设计者自己命名的名称(文件名),例如:mux21的端口描述 增加以下语句: generic (m: time:=1ns) 类属参数说明语句,它定 义了延时时间为1ns,注意 简单地说 In 不可以出现在赋值符号(= 或:=)的左边 out不可以出现在赋值符号(= 或:=)的右边 buffer可以出现在赋值符号(= 或:=)的两边,In 信号只能被引用,不能被赋值 out 信号只能被赋

10、值,不能被引用 buffer 信号可以被引用,也可以被赋值,例:,VHDL中任何一种数据对象(信号、变量、常数)必须严格限定其取值范围。 VHDL 中一个对象只能有一种类型,施加于该对象的操作必须与该类型相匹配。 常用数据类型有:BIT,BIT_VECTOR,STD_LOGIC,STD_LOGIC_VECTOR,INTEGER,BOOLEAN等(参考书上P260表10.3.1),1.2 结构体表达(ARCHITECTURE),1 多路选择器的VHDL描述,ARCHITECTURE 结构体名 OF 实体名 IS 定义语句 内部信号,常数,数据类型,函数等定义; BEGIN 功能描述语句; END

11、 ARCHITECTURE 结构体名;,以关键字ARCHITECTURE引导,以END (ARCHITECTURE) xxx结尾的语句部分,称为结构体。描述电路的内部逻辑功能或电路结构。,结构体名称的命令:它是该结构体的唯一名称。“OF”后面紧跟的实体名表明了该结构体所对应的是哪一个实体。用 “IS”来结束结构体的命名。,ARCHITECTURE 结构体名 OF 实体名 IS 定义语句 内部信号,常数,数据类型,函数等的定义; BEGIN 功能描述语句; END ARCHITECTURE 结构体名;,定义语句:位于“ARCHITECTURE”和“BEGIN”之间。用于对结构体内部所使用的信号、

12、常数、数据类型和函数等进行定义。如:,ARCHITECTURE 结构体名 OF 实体名 IS 定义语句 内部信号,常数,数据类型,函数等的定义; BEGIN 功能描述语句; END ARCHITECTURE 结构体名;,SIGNALcont:STD_LOGIC_VECTOR(3DOWNTO0); SIGNALco_1:STD_LOGIC; CONSTANTm:TIME:=2 ns; TYPESTATEIS(INIT,DAD,ADC,SRF,FRF);(枚举类型),功能描述语句:处于“BEGIN”和“END”之间。具体描述了结构体的行为及其连接关系。,ARCHITECTURE 结构体名 OF 实

13、体名 IS 定义语句 内部信号,常数,数据类型,函数等的定义; BEGIN 功能描述语句; END ARCHITECTURE 结构体名;,结构体功能可以用三种方式进行描述,即: 行为描述、数据流描述、结构描述。,.结构体的行为描述(behavioral) 结构体的行为描述表示输入与输出间转换的关系,是对设计实体按算法的路径来进行描述的。行为描述在 EDA 工程中称为高层次描述或高级描述。,看例题!,例:如图所示的半加器,其功能真值表已经给出,写出它的行为描述。,半加器真值表:,(ENTITY部分省略) ARCHITECTURE alg_ha OF half_adder IS BEGIN PRO

14、CESS (a , b) BEGIN IF a=0 AND b=0 THEN c=0 ; s=0 ELSIF a=1 AND b=1 THEN c=1 ; s=0; ELSE c=0 ; s=1; END IF; END PROCESS; END alg_ha;,高层次的功能描述,不必考虑在电路中到底是怎样实现的。,.结构体的数据流描述(dataflow) 它反映了从输入数据到输出数据之间所发生的逻辑变换,或者说描述了数据流程的运动路径、运动方向和运动结果。 .结构体的结构化描述(structural) 结构化描述给出了实体内部结构、所包含的模块或元件间互连关系;与实体外部引线的对应关系。,练

15、习: 试用上面的两种方法描述半加器的功能。,结构体中三种描述方式的比较,布尔函数定义明白,连接关系清晰,电路模块化清晰,优 点,小门数设计,不易描述复杂电路,修改不易,数据流描述,电路层次化设计,电路不易理解、繁琐、复杂,结构化描述,适用场合,缺 点,描述方式,电路特性清楚明了,大型复杂的电路模块设计,进行综合效率相对较低,行为描述,信号赋值符 “=”,表达式中的等号“=”没有赋值的含义,只是一种数据比较符号。,1.3 赋值符号和数据比较符号,1 多路选择器的VHDL描述,例1.1VHDL描述中出现的相关语句结构和语法说明,1.4 逻辑操作符,1 多路选择器的VHDL描述,例1.1VHDL描述

16、中出现的相关语句结构和语法说明,VHDL共有7种基本逻辑操作符: AND(与)、OR(或)、NOT(取反)、NAND (与非)、 NOR(或非)、XOR(异或)、XNOR(同或),要求数据类型: BIT BOOLEAN STD_LOGIC, ARCHITECTURE one OF mux21 IS BEGIN y = a WHEN s = 0 ELSE b ; END ARCHITECTURE one ;,1.5 WHEN_ELSE条件信号赋值语句,1 多路选择器的VHDL描述,例1.1VHDL描述中出现的相关语句结构和语法说明,赋值目标 = 表达式 WHEN 赋值条件 ELSE 表达式 WH

17、EN 赋值条件 ELSE 表达式 ;,在VHDL中,所有的顺序语句,如“IF_THEN_ELSE_END IF”,都必须放在由“PROCESSEND PROCESS”引导的进程结构中。 在一个结构体(ARCHITECTURE)中可以包含任意个进程语句,所有的进程语句都是并行语句,而进程PROCESS引导的内部语句结构属于顺序语句。,1.6 进程语句和顺序语句,1 多路选择器的VHDL描述,例1.1VHDL描述中出现的相关语句结构和语法说明,1.7 IF语句 IF语句与条件信号赋值语句功能相当,有两种基本格式: 1.两分支IF语句: IF 条件表达式 THEN 顺序语句; ELSE 顺序语句;

18、END IF;,1 多路选择器的VHDL描述,2.多分支IF语句:,IF 条件表达式 THEN 顺序语句; ELSIF 条件表达式 THEN 顺序语句; ELSE 顺序语句; END IF;,1 多路选择器的VHDL描述,1.8 WITH . SELECT 语句,用WITH . SELECT语句描述2选1多路选择器,ENTITY mux21 IS PORT (a, b : IN STD_LOGIC; S : IN STD_LOGIC; y : OUT STD_LOGIC); END mux21; ARCHITECTURE one OF mux21 IS BEGIN WITH s SELECT

19、y = a WHEN 0; b WHEN OTHERS ; END one ;,选择信号赋值语句的基本格式为: WITH 条件表达式 SELECT 目标信号名=表达式 WHEN 条件; 表达式 WHEN 条件; 表达式 WHEN 条件; 选择信号赋值语句属于并行语句。,1.8 WITH . SELECT 语句,1 小结,在2选1的VHDL描述中出现的语言现象归纳:,实体: Entity 结构体:Architecture 端口定义: Port( ) 端口模式:In/Out/Inout 数据类型:Bit、Std_Logic 信号赋值符:= 条件比较符:= 逻辑操作符:AND,IF条件语句:IFEN

20、D IF 并行条件语句:WHENELSE 进程语句:ProcessEnd Process 顺序语句:由进程语句引导 并行语句:简单赋值语句 when.else语句 with .select语句,2 时序电路的VHDL描述,例2.1 D触发器的VHDL描述,最简单、最具有代表性的时序电路是D触发器。对D触发器的描述包含了VHDL对时序电路的最基本和典型的表达方式,也包含了VHDL中许多最具特色的语言现象。,(实体Entity),电路功能描述 (结构体Architecture),?,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 I

21、S - 端口声明 PORT (CLK, D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ENTITY DFF1; ARCHITECTURE bhv OF DFF1 IS -结构体描述 SIGNAL Q1 : STD_LOGIC ; -类似于在芯片内部定义一个数据的暂存节点 BEGIN PROCESS (CLK) - 进程 BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; -将内部的暂存数据向端口输出(双横线-是注释符号) END ARCHITECTURE

22、bhv;,例2.1 D触发器的VHDL描述,VHDL电路描述与设计平台和硬件实现对象 (组合或时序逻辑) 无关。,例2.1中D触发器的VHDL描述的语言现象说明,2.1 完整VHDL程序基本构成,库(Library)和程序包(Package),程序包:定义了一组数据类型说明、常量说明、元件说明和子程序说明。以供其它多个设计实体引用。,库:是专门存放预先编译好的程序包的地方,这样它们就可以在其它设计中被调用。,库/程序包就是为了使一组类型说明,常量说明和子程序说明对多个设计实体都成为可见的而提供的一种结构。它们如同C语言中的*.h文件,定义了一些类型说明,函数一样。,例如: LIBRARY IE

23、EE; USE IEEE.std_logic_1164.ALL; USE IEEE.std_logic_unsigned.ALL; IEEE是IEEE标准库的标志名,两个USE语句使得以下设计可使用程序包std_logic_1164, std_logic_unsigned中所有预定义的内容,如std_logic,in,out的定义等。,格式: LIBRARY ; USE .ALL;,库(Library)和程序包(Package),常用标准库std和ieee库中的程序包,库(Library)和程序包(Package),BIT数据类型定义: TYPE BIT IS(0,1); 即BIT数据类型仅可

24、取值0或1;,STD_LOGIC数据类型定义: TYPE STD_LOGIC IS (U,X,0,1,Z,W,L,H,-); 工业标准逻辑类型,取值U,X,0,1,Z, W, L, H和- U-未初始化的; X-强未知的;0,1-强0,强1 ;Z高阻态; W弱未知的; L弱0; H弱1; - 忽略,2.2 标准逻辑位数据类型STD_LOGIC,ENTITY DFF1 IS - 端口声明 PORT (CLK, D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ENTITY DFF1;,ENTITY mux21 IS PORT (a, b, : IN BIT

25、; S : IN BIT ; y : OUT BIT ); END ENTITY mux21 ;,ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1:STD_LOGIC; BEGIN ,2.3 信号定义和数据对象,信号(Signal):,信号的使用和定义范围是实体、结构体和程序包,在进程和子程序的顺序语句中不允许定义信号。(只有信号才能把进程外的信息带入进程内部,或将进程内的信息带出进程),SIGNAL 信号名: 数据类型 := 初始值;,信号赋值语句:目标信号名=表达式;,VARIABLE 变量名: 数据类型 :=初始值;,变量赋值语句: 目标变量名:=表达式;,AR

26、CHITECTURE bhv OF DFF1 IS SIGNAL Q1:STD_LOGIC; BEGIN ,2.3 信号定义和数据对象,变量(Variable):,在VHDL中,变量是一个局部量,作为临时的数据存储单元,只能在进程和子程序的顺序语句中使用。变量定义中的初始值仅对仿真有效,实际的综合器并不支持设置初始值。,CONSTANT 常量名: 数据类型:= 表达式;,ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1:STD_LOGIC; BEGIN ,2.3 信号定义和数据对象,常量(Constant):,常量的定义主要是为了程序更容易阅读和修改。在所有的VHDL

27、结构中都可以定义常量,如实体、结构体、程序包、进程和子程序等。常量是一个恒定不变的值。,EVENT (CLKEVENT表示 CLK信号发生变化),2.4 上升沿检测表达式和信号属性函数EVENT, PROCESS (CLK) - 进程 BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ; ,边沿检测语句,用信号属性函数EVENT来测定某信号的跳变边沿,即,2.5 不完整条件语句与时序电路,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF1 IS - DFF

28、 端口声明 PORT (CLK, D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ENTITY DFF1; ARCHITECTURE bhv OF DFF1 IS SIGNAL Q1 : STD_LOGIC ; BEGIN PROCESS (CLK) - 进程 BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; END ARCHITECTURE bhv;,IF语句中没有利用ELSE明确指出当IF语句不满足条件时如何操作,即不完整条件语句。,IF语句表示:,完

29、整的条件语句只能构成组合逻辑电路。,IF语句表示:,2.5 不完整条件语句与时序电路,2.5 不完整条件语句与时序电路,例a:,2.5 不完整条件语句与时序电路,例b:,2.6 实现时序电路的VHDL不同表述,CLK信号定义为STD_LOGIC数据类型,有9种取值,该描述并不能保证CLK是从“0”到“1”的上升沿跳变。,. PROCESS (CLK) BEGIN IF CLKEVENT AND (CLK=1) AND (CLKLAST_VALUE=0) THEN Q = D ; -确保CLK的变化是一次上升沿的跳变 END IF; END PROCESS ;,. PROCESS (CLK) B

30、EGIN - 同上 IF CLK=1 AND CLKLAST_VALUE=0 THEN Q = D ; END IF; END PROCESS ;,2.6 实现时序电路的VHDL不同表述,CLKLAST_VALUE=0为真,表示CLK在变化之前时刻为0。,LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY DFF3 IS PORT (CLK,D : IN STD_LOGIC ; Q : OUT STD_LOGIC ); END ; ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1 : STD_LOGIC; BEGIN

31、 PROCESS (CLK) BEGIN IF rising_edge(CLK) THEN Q1 = D ; END IF; END PROCESS ; Q = Q1 ; END ;,Rising_edge( )是IEEE库中STD_LOGIC_1164标准程序包内预定义的函数,该函数只能用于标准逻辑位数据类型STD_LOGIC的信号。因此,在实体前必须打开STD_LOGIC_1164程序包。,. PROCESS BEGIN wait until CLK = 1 ; Q = D ; END PROCESS;,当进程中使用wait语句后,就不必列出敏感信号表。,2.6 实现时序电路的VHDL不同

32、表述,. PROCESS (CLK) BEGIN IF CLK = 1 THEN Q = D ; END IF; END PROCESS ;,将CLK放入敏感信号表中,CLK边沿的检测由PROCESS和IF语句结合实现。 注:D信号并没有在敏感表中。,上升沿触发DFF的仿真波形:,2.6 实现时序电路的VHDL不同表述,. PROCESS (CLK,D) BEGIN IF CLK = 1 THEN Q = D ; END IF; END PROCESS ;,电平触发DFF,即在CLK为高电平1时,输出Q随D的变化而变化,而CLK为0时输出保持不变。 注:D信号在敏感表中。,电平触发DFF的仿真

33、波形:,2.6 实现时序电路的VHDL不同表述,如果设clk为时钟信号输入端,以下四条WAIT语句所设的进程启动条件都是时钟上跳沿,所以它们对应的硬件结构是一样的。 WAIT UNTIL clk=1; WAIT UNTIL RISING_EDGE(clk); WAIT UNTIL clkEVENT AND clk=1; WAIT UNTIL NOT clkSTABLE AND clk=1;,2.6 实现时序电路的VHDL不同表述,2 小结,VHDL 库:Library语句,包括IEEE库、标准库STD、工作库Work等; 程 序 包:USE语句,如Std_logic_1164程序包、Stand

34、ard程序包等; 数据类型:Std_logic,定义值中包括0、1、Z和X等共9种取值; 数据对象:信号Signal、变量Variable、常量Constant; 信号属性:信号属性函数EVENT、LAST_VALUE; 时钟检测:上升沿检测Clkevent AND Clk=1、Rising_edge( )。 时序电路:不完整条件语句产生时序电路。,3 更复杂电路的VHDL描述,时序电路中,一般计数器的输入/输出信号包括:,?,Entity,Architecture,电路设计,3.1 计数器的VHDL描述,ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUF

35、FER INTEGER range 15 downto 0 ) ; END CNT4; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; END IF; END PROCESS ; END bhv;,【例1】: 4位二进制加法计数器,注意:(1) Q的端口模式为BUFFER; (2) Q的数据类型为INTEGER。,注意,?,ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER range 15 d

36、ownto 0 ) ; END CNT4; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q = Q + 1 ; -如何理解? END IF; END PROCESS ; END bhv;,【例1】: 4位二进制加法计数器,注意,注意:在使用整数时,VHDL综合器要求必须使用“Range”限定范围,否则无法综合。,VHDL中规定,算术操作符“+”、“-”的数据类型(除特殊说明,如重载函数)只能是整型“INTEGER”。,整数的表达不加引号,而逻辑位的数据必须加引号,如1、0、

37、“101”。,整数(Integer)类型,VHDL中整数常量的书写方式:,3.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 ENTITY CNT4; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1 : STD_LOGIC_VECTOR(3

38、 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1 ; -“+” 运算符重载 END IF; END PROCESS ; Q = Q1 ; END ARCHITECTURE bhv;,3.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

39、STD_LOGIC_VECTOR(3 DOWNTO 0) ) ; END ENTITY CNT4; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1 ; -“+” 运算符重载 END IF; END PROCESS ; Q = Q1 ; END ARCHITECTURE bhv;,3.2 计数器设计的其他表述方法,LIBRARY IEEE ; USE IEEE.STD_LO

40、GIC_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 ENTITY CNT4; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1 : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLKEVENT AND CLK = 1 THEN Q1 = Q1 + 1 ; -“+

41、” 运算符重载 END IF; END PROCESS ; Q = Q1 ; END ARCHITECTURE bhv;,3.3 不同工作方式的时序电路设计,例3.3.1:设计一个异步清零、有使能输入的十进制计数器。,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY cntm10 IS - 实体声明 PORT( clk, rst, en : IN std_logic; -时钟、清零、使能信号 co : OUT std_logic; -进位输出 qcnt : buffer std_

42、logic_vector(3 downto 0); END ENTITY cntm10;,ARCHITECTURE behave OF cntm10 IS -结构体描述 BEGIN PROCESS (clk,rst) VARIABLE cqi :STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF(rst=1) THEN cqi :=(others=0); -计数器复位(高有效) ELSIF (clkEVENT AND clk = 1) THEN -检测时钟上升沿 IF (en=1) THEN -检测是否允许计数(不完全条件语句) IF cqi 0); -计数状态=9,

43、下一状态清零 END IF; END IF; END IF; IF cqi = 9 THEN co = 1; -计数状态=9,输出进位信号 ELSE co =0; END IF; qcnt = cqi; -将计数值输出到端口 END PROCESS; END behave;,ARCHITECTURE behave OF cntm10 IS -结构体描述 BEGIN PROCESS (clk,rst) VARIABLE cqi :STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN IF(rst=1) THEN cqi :=(others=0); -计数器复位(高有效) ELS

44、IF (clkEVENT AND clk = 1) THEN -检测时钟上升沿 IF (en=1) THEN -检测是否允许计数(不完全条件语句) IF cqi 0); -计数状态=9,下一状态清零 END IF; END IF; END IF; IF cqi = 9 THEN co = 1; -计数状态=9,输出进位信号 ELSE co =0; END IF; qcnt = cqi; -将计数值输出到端口 END PROCESS; END behave;,(1) 变量,VARIABLE cqi : STD_LOGIC_VECTOR(3 DOWNTO 0) ;,(2)省略赋值操作符 (OTHE

45、RS=X),SIGNAL d1 : STD_LOGIC_VECTOR(4 DOWNTO 0); VARIABLE a1 : STD_LOGIC_VECTOR(15 DOWNTO 0); . d1 0); a1 := (OTHERS=0) ;,相关语法说明,3.3 不同工作方式的时序电路设计,例3.3.2:设计一个带有并行输入置数,串行输出的移位寄存器。,library ieee; use ieee.std_logic_1164.all; ENTITY shifter IS-实体声明 PORT( clk, load : IN std_logic; din : IN std_logic_vecto

46、r(7 downto 0); qb : OUT std_logic); END ENTITY shifter;,ARCHITECTURE behave OF shifter IS -结构体描述 BEGIN PROCESS (clk,load) VARIABLE reg8 : std_logic_vector(7 downto 0); BEGIN IF clkEVENT AND clk = 1 THEN IF load=1 THEN reg8 :=din; -由(LOAD=1)装载新数据 ELSE - load=0, 移位操作 reg8(6 downto 0) :=reg8 (7 downto

47、1); END IF; END IF; qb = reg8(0) ; - 串行输出最低位 END PROCESS; END ARCHITECTURE behave;,3.4 1位二进制全加器的VHDL描述,1位二进制全加器引脚图,1位二进制全加器实现原理图,1位二进制半加器,3.4.1 半加器的VHDL描述,3.4 1位二进制全加器的VHDL描述,so=? co=?,-半加器描述(1):布尔方程描述方法 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder IS -实体声明 PORT (a, b : IN STD_LOGIC; co

48、, so : OUT STD_LOGIC); END ENTITY h_adder; ARCHITECTURE fh1 OF h_adder is BEGIN so = NOT (a XOR (NOT b) ; co = a AND b ; END ARCHITECTURE fh1;,3.4.1 半加器的VHDL描述,-半加器描述(2):真值表描述方法(1) -这里省略库和实体声明部分 ARCHITECTURE fh1 OF h_adder is SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ; BEGIN abc so so so so NULL ; E

49、ND CASE; END PROCESS; END ARCHITECTURE fh1 ;,VHDL描述中的基本结构与语法: VHDL运算符 BEGIN abc cso cso cso cso null ; -或“00” END CASE; END PROCESS; END fh1;,-“或门”逻辑描述 LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; -库、函数包调用 ENTITY or2a IS -实体声明 PORT (a, b : IN STD_LOGIC; c : OUT STD_LOGIC ); END ENTITY or2a; ARCHITECT

50、URE one OF or2a IS -结构体描述 BEGIN c = a OR b ; END ARCHITECTURE one ;,3.4.2 “或门”逻辑的VHDL描述,3.4.3 1位二进制全加器的VHDL描述,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS -实体f_adder描述 PORT (ain,bin,cin: IN STD_LOGIC; cout,sum:OUT STD_LOGIC); END f_adder; ARCHITECTURE fd1 OF f_adder IS -结构体描述 COMPONE

51、NT h_adder -半加器元件调用声明 PORT (a,b: IN STD_LOGIC; co,so: OUT STD_LOGIC); END COMPONENT;,COMPONENT or2a PORT (a,b: IN STD_LOGIC; c: OUT STD_LOGIC); END COMPONENT; SIGNAL d,e,f: STD_LOGIC; -定义3个信号作为内部的连接线 BEGIN U1:h_adder PORT MAP(a=ain, b=bin, co=d, so=e); U2:h_adder PORT MAP(a=e, b=cin, co=f, so=sum);

52、U3:or2a PORT MAP(a=d, b=f, c=cout); -元件例化 END ARCHITECTURE fd1;,(1) CASE语句,CASE IS When = ; . ; ; When = ; . ; ; . WHEN OTHERS = ; END CASE ;,VHDL描述中的基本结构与语法:,(2) LOOP语句,VHDL描述中的基本结构与语法:,1) FOR类型 FOR类型的LOOP语句的书写格式为: 标号: FOR 循环变量 IN 离散范围 LOOP 顺序处理语句; END LOOP 标号;,其中标号是可选项;循环变量是一个临时变量,属LOOP语句的局部变量,不需要

53、事先定义;离散范围用来指定LOOP语句中的顺序语句被执行的次数。循环变量从离散范围的初值开始,每执行一次顺序处理语句加1,直到离散范围的最大值。,VHDL描述中的基本结构与语法:,2)WHILE类型 WHILE类型的LOOP语句的书写格式为: 标号: WHILE 条件 LOOP 顺序处理语句; END LOOP 标号; WHILE类型的LOOP语句给出了循环执行顺序语句的条件,如果条件为真,则进行循环;如果条件为假,则退出循环。一般综合器通常不支持WHILE类型语句。,VHDL描述中的基本结构与语法:,STD_LOGIC_VECTOR STD_LOGIC,在使用STD_LOGIC_VECTOR

54、中,必须注明其数组宽度,即位宽,如: B : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) ; SIGNAL A :STD_LOGIC_VECTOR (1 TO 4) ;,B = 01100011 ; - B(7)为 0 B(4 DOWNTO 1) = “0001 ; - B(4)为 0 B(7 DOWNTO 4) = A ; - B(6)等于 A(2),(3) 标准逻辑矢量数据类型,SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ; . a = 1 0

55、 d(1) 1 ; - 元素与元素并置,并置后的数组长度为4 . IF a d = 101011 THEN . - 在IF条件句中可以使用并置符,(4) 并置(连接)操作符,COMPONENT 元件名 PORT (端口名表) ; END COMPONENT 元件名 ;,COMPONENT h_adder PORT ( c,d : IN STD_LOGIC; e,f : OUT STD_LOGIC); END COMPONENT;,例化名 : 元件名 PORT MAP( 端口名 = 连接端口名,.);,(5) 元件声明及例化语句,U1:h_adder PORT MAP(a=ain, b=bin,

56、 co=d, so=e);,1、状态机分类:,按输出方式分,Mealy型,Moore型,输出仅为当前状态的函数,输出是当前状态和输入的函数,按结构分,单 进 程,多 进 程,主进程和辅进程合一,分时序、组合主进程,辅助进程,4 有限状态机设计,4.1 一般有限状态机的设计 时序电路可以称为有限状态机(Finite State Machine, FSM),以此命名的原因是可以使用有限数量的状态表示时序电路的功能行为。,按状态表达分,符号状态机,确定编码状态机,S0,S1,S2,000,001,010, ,按编码方式分,顺序编码,一位热码,二进制顺序编码等,00001,00010,00100, ,

57、其它编码,格雷码,循环码,等,4 有限状态机设计,2、用户自定义数据类型,4 有限状态机设计,4.1 一般有限状态机的设计,枚举类型,其书写格式为: TYPE 数据类型名 IS (元素,元素,);,例如:描述一周每一天状态的逻辑电路时,可定义如下:,TYPE week IS(sun,mon,tue,wed,thr,fri,sat);,TYPE m_state IS (st0,st1,st2,st3,st4,st5);,SIGNAL present_state,next_state : m_state;,4 有限状态机设计,再例如,某控制器的控制过程可用五个状态表示,则可定义一 个名为m_sta

58、te的数据类型:,如该控制器需要用到present_state,next_state 的信号,这两个 信号的数据类型为m_state ,则可定义为:,此后,在结构体中就可以对present_state,next_state赋值,如:present_state=st4,3、一般状态机的设计,a、说明部分,例如:,4 有限状态机设计,4.1 一般有限状态机的设计,b、主控时序进程,该部分是在CLK控制下,进行状态转换: current_state = next_state ;,c、主控组合进程,该部分是确定current_state,next_state的取值,为时序进程提供参数;进行状态转换条件

59、的判定;进行输出判定。,d、辅助进程,该部分是配合主控时序进程或主控组合进程,完成某种算法、输出数据锁存等。,4 有限状态机设计,4.2 双进程Moore型有限状态机的设计,例: “1110”序列检测器设计,4 有限状态机设计,4.3 Mealy型有限状态机的设计,LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY statem IS PORT ( clk : IN std_logic; x,reset: INstd_logic; z: out std_logic ); END statem;,例: “1110”序列检测器设计,ARCHITECT

60、URE behave OF statem IS TYPE STATE_TYPE IS (sa, sb, sc,sd); SIGNAL state: STATE_TYPE; BEGIN PROCESS (clk,reset) BEGIN IF reset = 1 THEN state = sa; ELSIF clkEVENT AND clk = 1 THEN,CASE state IS WHEN sa = IF x=1 THEN state IF x=1 THEN state IF x=1 THEN state IF x=1 THEN state = sd; ELSE state=sa; END

61、 IF; END CASE; END IF; -reset END PROCESS; z=1 when state=sd and x=0 else 0; END ARCHITECTURE behave;,105,Finite State Machine (FSM) - State Diagram,RESET,nw = 1,Tap1,select = 0,first = 1,Idle,nxt = 0,first = 0,Tap2,select = 1,first = 0,Tap3,select = 2,Tap4,select = 3,nxt = 1,nw = 1,nw = 0,Inputs: r

62、eset nw,Outputs: select first nxt,106,Writing VHDL Code for FSM,To Determine Next State Transition/Logic: Use a CASE Statement Inside IF-THEN Statement That Checks for the Clock Condition Remember: State Machines Are Implemented Using Registers To Determine State Machine Outputs: Use Conditional and/or Selected Signal Assignments Or Use a Second Case Statement to Determine the State Machine Outputs,107,FSM VHDL Code - Enumerated Data Type,Enumerated Data Type,LIBRARY IEEE; USE IEEE.std_logic_1164.all; USE IEEE.std_logic_unsigned.all; USE

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!