1、数字电路与系统设计数字电路与系统设计EDA实验实验VHDL设计初步设计初步数字电路与系统设计数字电路与系统设计EDA实验实验u硬件描述语言硬件描述语言(VHDL or VerilogHDL)(10学时)学时)uEDA设计工具软件及实验设计工具软件及实验 (10学时学时)uSOPC及及Nios II嵌入式系统设计嵌入式系统设计 (10学时学时)u综合设计实验综合设计实验 (10学时学时)西安电子科技大学国家电工电子教学基地西安电子科技大学国家电工电子教学基地西电西电Altera EDA/SOPC联合实验室及培训中心(联合实验室及培训中心(E楼楼II-401)第第1部分部分 VHDL设计初步设计初
2、步数字电路与系统设计数字电路与系统设计EDA实验实验VHDL历史回顾历史回顾 VHDL 语言是美国国防部语言是美国国防部(DOD)在在 20 世纪世纪 80 年代初为实现年代初为实现其高速集成电路计划其高速集成电路计划(VHSICVery High Speed Integrated Circuit)而提出的一种而提出的一种(HDLHardware Description Language),以作为各合同商之间提交复杂电路,以作为各合同商之间提交复杂电路设计文档的一种标准方案,设计文档的一种标准方案,VHDL的含义为的含义为。1987年被采纳为年被采纳为IEEE 1076标准(标准(VHDL87
3、)。)。1993年被更新为年被更新为IEEE 1164标准(标准(VHDL93)。)。VHDLVHSIC Hardware Description Language HDL 的出现是为了适应电子系统设计的日益复杂的出现是为了适应电子系统设计的日益复杂性。若以计算机软件的设计与电路设计做个类比:性。若以计算机软件的设计与电路设计做个类比:机器码机器码好比好比晶体管晶体管/MOS管管;汇编语言汇编语言好比好比电路网表电路网表;HDL语言语言就如同就如同高级语言高级语言。几种常用的几种常用的HDL语言:语言:功能强,规范性好;功能强,规范性好;功能强、灵活功能强、灵活性高;性高;属于较低级的硬件描属
4、于较低级的硬件描述语言;述语言;Altera公司开发,语公司开发,语法简单,但不通用。法简单,但不通用。VHDLVHSIC Hardware Description Language VHDL在语法和风格上类似于现代高级编程在语法和风格上类似于现代高级编程语言。但要注意,语言。但要注意,VHDL毕竟描述的是毕竟描述的是硬件硬件,它,它包含许多硬件特有的结构。包含许多硬件特有的结构。描述特点是描述特点是:描述的特点是:描述的特点是:VHDLVHSIC Hardware Description LanguageVHDL与计算机语言的区别与计算机语言的区别l 计算机语言是在计算机语言是在CPURAM
5、构建的平台上运行构建的平台上运行l VHDL设计的结果是由具体的逻辑、触发器组成的数字电路设计的结果是由具体的逻辑、触发器组成的数字电路l计算机语言基本上以计算机语言基本上以串行串行的方式执行的方式执行lVHDL在总体上是以在总体上是以并行并行方式工作方式工作l计算机语言主要关注于计算机语言主要关注于变量值变量值的变化的变化lVHDL要实现严格的要实现严格的时序逻辑时序逻辑关系关系数字电路与系统设计数字电路与系统设计回顾回顾组合逻辑电路组合逻辑电路时序逻辑电路时序逻辑电路分析分析设计设计真值表真值表分析分析设计设计输入输入/输出输出抽象抽象(实体)(实体)电路功能电路功能实现实现(结构体)(结
6、构体)EntityArchitecture与、或、非与、或、非与非、或非与非、或非异或、同或异或、同或RS触发器触发器D触发器触发器T触发器触发器JK触发器触发器主要内容安排主要内容安排1 多路选择器的多路选择器的VHDL描述描述2 时序电路的时序电路的VHDL描述描述3 更复杂电路的更复杂电路的VHDL描述描述5 VHDL设计练习设计练习4 有限状态机(状态转移图)设计有限状态机(状态转移图)设计1 多路选择器的多路选择器的VHDL描述描述例例1.1 2选选1多路选择器的多路选择器的VHDL描述描述 2选选1输入输入/输出端口输出端口(实体(实体Entity)abymux21s电路功能电路功
7、能实现实现(结构体(结构体Architecture)?例例1.1 2选选1多路选择器的多路选择器的1 多路选择器的多路选择器的VHDL描述描述abymux21sENTITY IS PORT (a,b :IN BIT;S :IN BIT;y :OUT BIT);END ENTITY ;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多
8、路选择器的多路选择器的abymux21sS=0S=1abyS1 多路选择器的多路选择器的VHDL描述描述例例1.1 2选选1多路选择器的多路选择器的ARCHITECTURE one OF mux21 IS SIGNAL d,e:BIT;-d,e 为内部信号为内部信号BEGIN d=a AND(NOT S);e=b AND s;y=d OR e ;END ARCHITECTURE one;abymux21s1 多路选择器的多路选择器的VHDL描述描述例例1.1 2选选1多路选择器的多路选择器的1 多路选择器的多路选择器的VHDL描述描述y=(a AND(NOT s)OR(b AND s);ARC
9、HITECTURE behave OF mux21 ISBEGINEND behave;y=as+bsabymux21s说明:以上说明:以上三种结构体三种结构体描述都是描述都是例例1.1 2选选1多路选择器的多路选择器的1 多路选择器的多路选择器的VHDL描述描述S=0S=1abySabymux21s ARCHITECTURE one OF mux21 ISBEGIN (a,b,s)IF s=0 THEN y=a;ELSE y=b;END IF;END ARCHITECTURE one;-a,b,s 为敏感信号表为敏感信号表2选选1多路选择器功能时序波形多路选择器功能时序波形 例例1.1 2选
10、选1多路选择器的多路选择器的1 多路选择器的多路选择器的VHDL描述描述1.1 实体表达(实体表达(ENTITY)1 多路选择器的多路选择器的VHDL描述描述例例1.1VHDL描述中出现的相关语句结构和语法说明描述中出现的相关语句结构和语法说明ENTITY 实体名实体名 IS GENERIC (类属表);(类属表);PORT (端口表);(端口表);END ENTITY 实体名;实体名;实体在电路中主要是说明该电路的输入、输实体在电路中主要是说明该电路的输入、输出关系,更具体地说就是用来定义实体与外部的出关系,更具体地说就是用来定义实体与外部的连接关系以及需传送给实体的参数。连接关系以及需传送
11、给实体的参数。ENTITY 实体名实体名 IS GENERIC (类属表类属表););PORT (端口表端口表););END ENTITY 实体名;实体名;(1)类属表:用以将信息参数传递到实体。)类属表:用以将信息参数传递到实体。(2)端口表:指明实体的输入、输出信号及其模式、)端口表:指明实体的输入、输出信号及其模式、数据类型。数据类型。PORT (端口名:端口模式端口名:端口模式 数据类型;数据类型;端口名:端口模式端口名:端口模式 数据类型数据类型 );英文字母英文字母+数字数字数据流动方向数据流动方向主要有主要有“位位”和和“位矢量位矢量”两类两类设计者自己命名的名称(文件名)设计者
12、自己命名的名称(文件名)注意注意 简单地说简单地说方向定义方向定义含义含义IN输入,定义的通道为单向只读模式输入,定义的通道为单向只读模式 OUT输出,输出,定义的通道为单向输出模式定义的通道为单向输出模式 INOUT双向,定义的通道确定为输入输出双向端口双向,定义的通道确定为输入输出双向端口 BUFFER缓冲端口,其功能与缓冲端口,其功能与INOUT类似类似 常用端口模式:常用端口模式:例:例:ENTITY IS PORT (a,b,:IN ;S :IN ;y :OUT );END ENTITY ;VHDL中任何一种数据对象(信号、变量、常数)中任何一种数据对象(信号、变量、常数)必须严格限
13、定其取值范围。必须严格限定其取值范围。VHDL 中一个对象只能有一种类型,施加于该对象中一个对象只能有一种类型,施加于该对象的操作必须与该类型相匹配。的操作必须与该类型相匹配。常用数据类型有:常用数据类型有:BIT,BIT_VECTOR,STD_LOGIC,STD_LOGIC_VECTOR,INTEGER,BOOLEAN等等1.2 结构体表达(结构体表达(ARCHITECTURE)1 多路选择器的多路选择器的VHDL描述描述ARCHITECTURE 结构体名结构体名 OF 实体名实体名 IS 定义语句定义语句 内部信号,常数,数据类型,函数等定义;内部信号,常数,数据类型,函数等定义;BEGI
14、N 功能描述语句功能描述语句;END ARCHITECTURE 结构体名;结构体名;它是该结构体的唯一名它是该结构体的唯一名称。称。“OF”后面紧跟的实体名表明了该结构体所后面紧跟的实体名表明了该结构体所对应的是哪一个实体。用对应的是哪一个实体。用“IS”来结束结构体的来结束结构体的命名。命名。ARCHITECTURE OF 实体名实体名 IS 内部信号,常数,数据类型,函数等的定义;内部信号,常数,数据类型,函数等的定义;BEGIN ;END ARCHITECTURE 结构体名;结构体名;位于位于“ARCHITECTURE”和和“BEGIN”之间。用于对结构体内部所使用的信号常数、之间。用于
15、对结构体内部所使用的信号常数、数据类型和函数等进行定义。如:数据类型和函数等进行定义。如:ARCHITECTURE OF 实体名实体名 IS 内部信号,常数,数据类型,函数等的定义;内部信号,常数,数据类型,函数等的定义;BEGIN ;END ARCHITECTURE 结构体名;结构体名;cont:STD_LOGIC_VECTOR(3DOWNTO0);co_1:STD_LOGIC;m:TIME:=2ns;(INIT,DAD,ADC,SRF,FRF);处于处于“BEGIN”和和“END”之之间。具体描述了结构体的行为及其连接关系。间。具体描述了结构体的行为及其连接关系。ARCHITECTURE
16、OF 实体名实体名 IS 内部信号,常数,数据类型,函数等的定义;内部信号,常数,数据类型,函数等的定义;BEGIN ;END ARCHITECTURE 结构体名;结构体名;(behavioral)结构体的行为描述表示输入与输出间转换的关系,结构体的行为描述表示输入与输出间转换的关系,是对设计实体按算法的路径来描述。行为描述在是对设计实体按算法的路径来描述。行为描述在 EDA 工程中称为高层次描述或高级描述。工程中称为高层次描述或高级描述。看例题!看例题!如图所示的如图所示的半加器半加器,其功,其功能真值表已经给出,写出它的能真值表已经给出,写出它的行为描述行为描述。半加器半加器abcsabc
17、s0000000011111110半加器真值表半加器真值表:abcs0000000011111110半加器半加器abcs (ENTITY部分省略)部分省略)ARCHITECTURE alg_ha OF half_adder IS BEGIN PROCESS(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;高层次的功能描高层次的功能描述,不必考虑在述,不必考虑在电路中到底是怎电路中到底是怎样实现的。样实现的。(datafl
18、ow)它反映了从输入数据到输出数据之间所发生的它反映了从输入数据到输出数据之间所发生的逻辑变换,或者说描述了数据流程的运动路径、运动逻辑变换,或者说描述了数据流程的运动路径、运动方向和运动结果。方向和运动结果。(structural)结构化描述给出了实体内部结构、所包含的模结构化描述给出了实体内部结构、所包含的模块或元件间互连关系;与实体外部引线的对应关系。块或元件间互连关系;与实体外部引线的对应关系。练习:练习:试用上面的两种方法描述半加器的功能。试用上面的两种方法描述半加器的功能。半加器半加器abcs结构体中三种描述方式的比较结构体中三种描述方式的比较布尔函数定义布尔函数定义明白明白连接关
19、系清晰,连接关系清晰,电路模块化清电路模块化清晰晰 优优 点点小门数设计小门数设计不易描述复杂电路,不易描述复杂电路,修改不易修改不易数据流描述数据流描述电路层次化设计电路层次化设计电路不易理解、繁电路不易理解、繁琐、复杂琐、复杂结构化描述结构化描述 适用场合适用场合 缺缺 点点描述方式描述方式电路特性清楚电路特性清楚明了明了大型复杂的电路模大型复杂的电路模块设计块设计进行综合效率相对进行综合效率相对较低较低行为描述行为描述 信号赋值符信号赋值符 “=”表式中的等号表式中的等号“=”没有没有赋值的含义,只是一种数赋值的含义,只是一种数据比较符号。据比较符号。1.3 赋值符号和数据比较符号赋值符
20、号和数据比较符号 1 多路选择器的多路选择器的VHDL描述描述例例1.1VHDL描述中出现的相关语句结构和语法说明描述中出现的相关语句结构和语法说明 ARCHITECTURE one OF mux21 ISBEGIN PROCESS(a,b,s)BEGIN IF s 0 THEN y a;ELSE y b;END IF;END PROCESS;END ARCHITECTURE one;1.4 逻辑操作符逻辑操作符 1 多路选择器的多路选择器的VHDL描述描述例例1.1VHDL描述中出现的相关语句结构和语法说明描述中出现的相关语句结构和语法说明y=(a (s)(b s);ARCHITECTURE
21、 behave OF mux21 ISBEGINEND behave;VHDL共有共有7种基本逻辑操作符:种基本逻辑操作符:要求数据类型:要求数据类型:BIT BOOLEAN STD_LOGICARCHITECTURE one OF mux21 IS BEGIN y=a s=0 b ;END ARCHITECTURE one;1.5 WHEN_ELSE条件信号赋值语句条件信号赋值语句 1 多路选择器的多路选择器的VHDL描述描述例例1.1VHDL描述中出现的相关语句结构和语法说明描述中出现的相关语句结构和语法说明赋值目标赋值目标=表达式表达式 WHEN 赋值条件赋值条件 ELSE 表达式表达式
22、 WHEN 赋值条件赋值条件 ELSE 表达式表达式;在在VHDL中,所有的中,所有的,如,如“IF_THEN_ELSE_END IF”,都必须放在由,都必须放在由“PROCESSEND PROCESS”引导的进程结引导的进程结构中。构中。在一个结构体(在一个结构体(ARCHITECTURE)中可以包含任意个进程)中可以包含任意个进程语句,所有的进程语句都是语句,所有的进程语句都是,而进程,而进程PROCESS引导的引导的内部语句结构属于内部语句结构属于。1.4 进程语句和顺序语句进程语句和顺序语句 1 多路选择器的多路选择器的VHDL描述描述例例1.1VHDL描述中出现的相关语句结构和语法说
23、明描述中出现的相关语句结构和语法说明1 小结小结在在2选选1的的VHDL描述中出现的语言现象归纳:描述中出现的语言现象归纳:实体:实体:Entity结构体:结构体:Architecture端口定义:端口定义:Port()端口模式:端口模式:In/Out/Inout数据类型:数据类型:Bit、Std_Logic信号赋值符:信号赋值符:=条件比较符:条件比较符:=逻辑操作符:逻辑操作符:ANDIF条件语句:条件语句:IFEND IF并行条件语句:并行条件语句:WHENELSE进程语句:进程语句:ProcessEnd Process顺序语句:顺序语句:由进程语句引导由进程语句引导并行语句:简单赋值语
24、句并行语句:简单赋值语句 when.else语句语句 select语句语句2 时序电路的时序电路的VHDL描述描述例例2.1 D触发器的触发器的VHDL描述描述 最简单、最具有代表性的时序电路是最简单、最具有代表性的时序电路是D触发器。触发器。(实体(实体Entity)电路功能描述电路功能描述(结构体(结构体Architecture)?DCLKQDFF1ENTITY DFF1 IS -端口声明端口声明 PORT(CLK,D:IN ;Q:OUT );END ENTITY DFF1;ARCHITECTURE bhv OF DFF1 IS -结构体描述结构体描述 Q1:STD_LOGIC;-类似于在
25、芯片内部定义一个数据的暂存节点类似于在芯片内部定义一个数据的暂存节点BEGIN PROCESS(CLK)-进程进程 BEGIN IF THEN Q1=D;END IF;END PROCESS;Q=Q1;-将内部的暂存数据向端口输出(双横线将内部的暂存数据向端口输出(双横线-是注释符号)是注释符号)END ARCHITECTURE bhv;例例2.1 D触发器的触发器的VHDL描述描述 VHDL电路描述与电路描述与设计平台和硬件实现对设计平台和硬件实现对象象(组合或时序逻辑组合或时序逻辑)无无关。关。DCLKQDFF1例例2.1中中D触发器的触发器的VHDL描述的语言现象说明描述的语言现象说明
26、2.1 完整完整VHDL程序程序基本构成基本构成VHDL设计设计VHDL文件文件库和程序包库和程序包 声明在设计或实体中将用到的常数,数据类型,声明在设计或实体中将用到的常数,数据类型,元件及子程序等元件及子程序等实体(实体(Entities)声明到其实体及其声明到其实体及其设计的接口,即定义本设计的接口,即定义本设计的输入设计的输入/出端口出端口结构体结构体(Architectures)定义了实体的实现。定义了实体的实现。即电路功能的具体描述即电路功能的具体描述 定义了一组数据类型说明、常量说明、元件说明定义了一组数据类型说明、常量说明、元件说明和子程序说明。以供其它多个设计实体引用。和子程
27、序说明。以供其它多个设计实体引用。是专门存放预先编译好的程序包的地方,这样它们就是专门存放预先编译好的程序包的地方,这样它们就可以在其它设计中被调用。可以在其它设计中被调用。就是为了使一组类型说明,常量说明和就是为了使一组类型说明,常量说明和子程序说明对多个设计实体都成为可见的而提供的一子程序说明对多个设计实体都成为可见的而提供的一种结构。它们如同种结构。它们如同C语言中的语言中的*.h文件,定义了一些类文件,定义了一些类型说明,函数一样。型说明,函数一样。例如:例如:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_uns
28、igned.ALL;IEEE是是IEEE标准库的标志名,两个标准库的标志名,两个USE语句使得以下语句使得以下设计可使用程序包设计可使用程序包std_logic_1164,std_logic_unsigned中所有中所有预定义的内容,如预定义的内容,如std_logic,in,out的定义等。的定义等。格式:格式:LIBRARY ;USE .ALL;TYPE BIT IS(0,1);即即BIT数据类型仅可取值数据类型仅可取值0或或1;TYPE STD_LOGIC IS(U,X,0,1,Z,W,L,H,-);工业标准逻辑类型,取值工业标准逻辑类型,取值U,X,0,1,Z,W,L,H和和-2.2
29、标准逻辑位数据类型标准逻辑位数据类型STD_LOGIC ENTITY IS -端口声明端口声明 PORT(CLK,D:IN ;Q:OUT );END ENTITY;ENTITY IS PORT (a,b,:IN ;S :IN ;y:OUT );END ENTITY ;2.3 信号定义和数据对象信号定义和数据对象 信号的使用和定义范围是实体、结构体和程序包,信号的使用和定义范围是实体、结构体和程序包,在进程在进程和子程序的顺序语句中不允许定义信号。和子程序的顺序语句中不允许定义信号。(只有信号才能把进(只有信号才能把进程外的信息带入进程内部,或将进程内的信息带出进程)程外的信息带入进程内部,或将
30、进程内的信息带出进程)2.3 信号定义和数据对象信号定义和数据对象 在在VHDL中,变量是一个局部量,作为临时的数据存储单中,变量是一个局部量,作为临时的数据存储单元,元,只能在进程和子程序的顺序语句中使用只能在进程和子程序的顺序语句中使用。变量定义中的初。变量定义中的初始值仅对仿真有效,实际的综合器并不支持设置初始值。始值仅对仿真有效,实际的综合器并不支持设置初始值。2.3 信号定义和数据对象信号定义和数据对象 常量的定义主要是为了程序更容易阅读和修改。在所有的常量的定义主要是为了程序更容易阅读和修改。在所有的VHDL结构中都可以定义常量,如实体、结构体、程序包、进结构中都可以定义常量,如实
31、体、结构体、程序包、进程和子程序等。常量是一个恒定不变的值。程和子程序等。常量是一个恒定不变的值。2.4 上升沿检测表式和信号属性函数上升沿检测表式和信号属性函数EVENT PROCESS(CLK)-进程进程 BEGIN IF THEN Q1=D;END IF;END PROCESS;边沿检测语句边沿检测语句2.5 不完整条件语句与时序电路不完整条件语句与时序电路 ENTITY DFF1 IS -DFF 端口声明端口声明 PORT(CLK,D:IN ;Q:OUT );END ENTITY DFF1;ARCHITECTURE bhv OF DFF1 IS Q1:STD_LOGIC;BEGIN P
32、ROCESS(CLK)-进程进程 BEGIN IF THEN Q1=D;END IF;END PROCESS;Q=Q1;END ARCHITECTURE bhv;CLKEVENT AND CLK=1YesNoQ1=D;?ARCHITECTURE one OF mux21 ISBEGIN PROCESS(a,b,s)BEGIN IF s=0 THEN y=a;ELSE y=b;END IF;END PROCESS;END ARCHITECTURE one;-a,b,s 为敏感信号表为敏感信号表S=0YesNoy=a;y b1 THEN q1=1;ELSIF a1 b1 THEN q1 b1 TH
33、EN q1=1;ELSE q1=0;END IF;END PROCESS;END;例例b:EDA软件综合结果软件综合结果2.6 实现时序电路的实现时序电路的VHDL不同表述不同表述 ENTITY DFF1 IS -DFF 端口声明端口声明 PORT(CLK,D:IN ;Q:OUT );END ENTITY DFF1;ARCHITECTURE bhv OF DFF1 IS Q1:STD_LOGIC;BEGIN PROCESS(CLK)-进程进程 BEGIN IF THEN Q1=D;END IF;END PROCESS;Q=Q1;END ARCHITECTURE bhv;.PROCESS(CLK
34、)BEGIN IF THEN Q=D;-确保确保CLK的变化是一次上升沿的跳变的变化是一次上升沿的跳变 END IF;END PROCESS;.PROCESS(CLK)BEGIN -同上同上 IF THEN Q=D;END IF;END PROCESS;2.6 实现时序电路的实现时序电路的VHDL不同表述不同表述 LIBRARY IEEE;ENTITY DFF3 IS PORT(CLK,D:IN STD_LOGIC;Q:OUT STD_LOGIC);END;ARCHITECTURE bhv OF DFF3 IS SIGNAL Q1:STD_LOGIC;BEGIN PROCESS(CLK)BEG
35、IN IF THEN Q1=D;END IF;END PROCESS;Q=Q1;END;.PROCESS BEGIN CLK=1;Q=D;END PROCESS;2.6 实现时序电路的实现时序电路的VHDL不同表述不同表述.PROCESS()BEGIN IF THEN Q=D;END IF;END PROCESS;上升沿触发上升沿触发DFF的仿真波形:的仿真波形:2.6 实现时序电路的实现时序电路的VHDL不同表述不同表述.PROCESS(,)BEGIN IF THEN Q 0);-计数器复位(高有效)计数器复位(高有效)ELSIF(clkEVENT AND clk=1)THEN -检测时钟上
36、升沿检测时钟上升沿 IF(en=1)THEN -检测是否允许计数(不完全条件语句)检测是否允许计数(不完全条件语句)IF cqi 9 THEN cqi:=cqi+1;-允许计数,且计数允许计数,且计数0);-计数状态计数状态=9,下一状态清零,下一状态清零 END IF;END IF;END IF;IF cqi=9 THEN co=1;-计数状态计数状态=9,输出进位信号,输出进位信号 ELSE co=0;END IF;qcnt 0);-计数器复位(高有效)计数器复位(高有效)ELSIF(clkEVENT AND clk=1)THEN -检测时钟上升沿检测时钟上升沿 IF(en=1)THEN
37、-检测是否允许计数(不完全条件语句)检测是否允许计数(不完全条件语句)IF cqi 9 THEN cqi:=cqi+1;-允许计数,且计数允许计数,且计数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;10进制计数器时序波形仿真结果进制计数器时序波形仿真结果VARIABLE cqi:STD_LOGIC_VECTOR(3
38、 DOWNTO 0);SIGNAL d1 :STD_LOGIC_VECTOR(4 DOWNTO 0);VARIABLE a1:STD_LOGIC_VECTOR(15 DOWNTO 0);.d1 0);a1:=(OTHERS=0);3.3 不同工作方式的时序电路设计不同工作方式的时序电路设计 library ieee;use ieee.std_logic_1164.all;ENTITY shifter IS-PORT(clk,load:IN std_logic;din :IN std_logic_vector(7 downto 0);qb :OUT std_logic);END ENTITY s
39、hifter;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 reg8(6 downto 0):=reg8(7 downto 1);END IF;END IF;qb=reg8(0);-串行输出最低位串行输出最低位 END PROCESS;END ARCHITECTURE
40、behave;移位寄存器时序波形仿真结果移位寄存器时序波形仿真结果实例练习实例练习 用VHDL编写BCD码模60计数器,计数器时钟频率为1Hz,并将计数结果(状态)输出到7段数码管上显示。3.4 1位二进制全加器的位二进制全加器的VHDL描述描述 1位二进制全加器引脚图位二进制全加器引脚图1位二进制全加器实现原理图位二进制全加器实现原理图1位二进制位二进制半加器半加器3.4.1 半加器的半加器的VHDL描述描述 1001010110001100cosoba半加器其真值表半加器其真值表 coasobnotxnor2and2半加器电路图半加器电路图3.4 1位二进制全加器的位二进制全加器的VHDL
41、描述描述 so=?co=?-半加器描述半加器描述(1):布尔方程描述方法:布尔方程描述方法LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY h_adder IS -实体声明实体声明 PORT(a,b:IN STD_LOGIC;co,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
42、):真值表描述方法(:真值表描述方法(1)-这里省略库和实体声明部分这里省略库和实体声明部分ARCHITECTURE fh1 OF h_adder is abc:STD_LOGIC_VECTOR(1 DOWNTO 0);BEGIN PROCESS(abc)BEGIN CASE abc IS -WHEN 00 so=0;co=0;WHEN 01 so=1;co=0;WHEN 10 so=1;co=0;WHEN 11 so=0;co=1;WHEN OTHERS NULL;END CASE;END PROCESS;END ARCHITECTURE fh1;VHDL描述中的描述中的基本结构与语法基本结
43、构与语法:VHDL运算符运算符&:连接运算符:连接运算符&连接,将两个对象或矢量连接成维数连接,将两个对象或矢量连接成维数更大的矢量更大的矢量,它可给代码书写带来方便。它可给代码书写带来方便。例如,为表达例如,为表达a=1 and b=0 and c=1概念,可定义一个变量:概念,可定义一个变量:vabc=a&b&c;则可用则可用 vabc=“101”表达上述内容。表达上述内容。-半加器描述半加器描述(3):真值表描述方法(:真值表描述方法(2)-这里省略库和实体声明部分这里省略库和实体声明部分ARCHITECTURE fh1 OF h_adder IS BEGIN abc cso cso c
44、so 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;ARCHITECTURE one OF or2a IS -结构体描述结构体描述 BEGIN END ARCHITECTURE one;3.4.2 “或门或门”逻辑的逻辑的VHDL描述描述 3.4.3 1
45、位二进制全加器的位二进制全加器的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 -结构体描述结构体描述 SIGNAL d,e,f:STD_LOGIC;BEGIN U1:h_adder PORT MAP(a=ain,b=bin,co=d,so=e);U2:h_adder PORT M
46、AP(a=e,b=cin,co=f,so=sum);U3:or2a PORT MAP(a=d,b=f,c=cout);END ARCHITECTURE fd1;VHDL描述中的描述中的基本结构与语法基本结构与语法:STD_LOGIC_VECTOR STD_LOGIC 在使用在使用STD_LOGIC_VECTOR中,必须注明其数中,必须注明其数组宽度,即位宽,如:组宽度,即位宽,如:B:OUT STD_LOGIC_VECTOR ;SIGNAL A:STD_LOGIC_VECTOR ;B=01100011;-B(7)为为 0 B(4 DOWNTO 1)=“0001;-B(4)为为 0 B(7 DO
47、WNTO 4)=A;-B(6)等于等于 A(2)SIGNAL a:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL d:STD_LOGIC_VECTOR(1 DOWNTO 0);.a 连接端口名,连接端口名,.);U1:h_adder PORT MAP(a=ain,b=bin,co=d,so=e);作用作用:为了方便电路描述,将具有某一逻辑功能的完:为了方便电路描述,将具有某一逻辑功能的完整的整的VHDL设计(元件)直接调用,避免重复描述。设计(元件)直接调用,避免重复描述。例例a1b1c1d1xz1u2u3y并发语句并发语句 元件例化(元件例化(Component In
48、stantiation)语句)语句 U1a1b1c1d1xz1u2u3ya1b1c1d1xz1u2u3ya1b1c1d1xz1u2u3yyabLibrary ieee;Use ieee.std_logic_1164.all;Entity nd2 isPort (a,b:in std_logic;c:out std_logic;);End nd2;Architecture ndbev of nd2 isBegin c 外接外接信号信号A1,组件信号组件信号B=外接外接信号信号B1,);位置对应方式位置对应方式名字直接对应名字直接对应1、状态机分类:、状态机分类:按输出按输出方式分方式分Mealy
49、型型Moore型型输出仅为当前状输出仅为当前状态的函数态的函数输出是当前状态输出是当前状态和输入的函数和输入的函数按结按结构分构分单单 进进 程程多多 进进 程程主进程和辅进程主进程和辅进程合一合一分时序、组合主分时序、组合主进程,辅助进程进程,辅助进程4 有限状态机设计有限状态机设计4.1 一般有限状态机的设计一般有限状态机的设计按状态按状态表达分表达分符号状态机符号状态机确定编码状态机确定编码状态机S0,S1,S2,000,001,010,按编码按编码方式分方式分顺序编码顺序编码一位热码一位热码二进制顺序编码等二进制顺序编码等00001,00010,00100,其它编码其它编码格雷码,循环
50、码,等格雷码,循环码,等4 有限状态机设计有限状态机设计2、用户自定义数据类型、用户自定义数据类型4 有限状态机设计有限状态机设计4.1 一般有限状态机的设计一般有限状态机的设计TYPE 数据类型名数据类型名 IS 数据类型定义;数据类型定义;例如:例如:TYPE m_state IS (st0,st1,st2,st3,st4,st5);SIGNAL present_state,next_state:m_state;3、一般状态机的设计、一般状态机的设计a、说明部分、说明部分例如:例如:SIGNAL current_state,next_state:m_state;ARCHITECTURE b