EDA技术及应用主讲:牛军浩第四章VHDL设计初步4.1多路选择器的VHDL描述4.2寄存器描述及其VHDL语言现象4.31位二进制全加器的VHDL描述4.4计数器设计4.5一般加法计数器设计教学目的通过简单、完整而典型的VHDL设计示例,初步了解用VHDL表达和设计电路的方法。4.1多路选择器的VHDL描述1.2选1多路选择器的示意图和真值表absyax0axb1babys01当s=0时,y=a当s=1时,y=b4.1多路选择器的VHDL描述2.2选1多路选择器实现-原理图形输入法001y=a0a110y=bb04.1多路选择器的VHDL描述2.2选1多路选择器实现-VHDL文本输入法1实体结构体实体名称端口名称流动方向数据类型bssay结构体名功能描述4.1多路选择器的VHDL描述2.2选1多路选择器实现-VHDL文本输入法2实体结构体4.1多路选择器的VHDL描述2.2选1多路选择器实现-VHDL文本输入法3实体结构体4.1多路选择器的VHDL描述3.相关语句结构和语法-实体表达结构ENTITY、IS、PORT、END都是描述实体的关键词,不分大写小写,但是为了便于阅读,一般在设计中将关键词使用大写,自定义使用小写。4.1多路选择器的VHDL描述3.相关语句结构和语法-实体名称实体名表达的是该设计电路的器件名,通常根据相应电路的功能来确定。不能用数字或中文、不能与工具库中已定义的元件名、不能数字开头。4.1多路选择器的VHDL描述3.相关语句结构和语法-实体名称举例mux4174LS04and2adder4bnot4输入与门4.1多路选择器的VHDL描述3.相关语句结构和语法-端口语句和名称端口以PORT();来引导端口模式有:IN、OUT、INOUT、BUFFER数据类型有:BOOLEAN、BIT、INTEGER、CHAR型等4.1多路选择器的VHDL描述3.相关语句结构和语法-结构体表达结构ARCHITECTURE、OF、IS、BEGIN、END都是描述结构体的关键词。功能描述语句:并行语句,顺序语句并行语句:WHEN_ELSE,逻辑操作赋值顺序语句:IF_THEN_ELSE功能描述语句4.1多路选择器的VHDL描述3.相关语句结构和语法-文件名称使用VHDL语句编写:后缀是.vhd使用VerilogHDL语句编写:后缀是.v使用原理图输入设计:后缀是.gdf文件名称建议和实体名称相同4.1多路选择器的VHDL描述4.思考y=ab+c_思考1:画出真值表abcyxx110x001b0b_4.1多路选择器的VHDL描述4.思考y=ab+c_思考2:使用原理图方式实现上式功能4.1多路选择器的VHDL描述4.思考y=ab+c_思考3:使用VHDL实现上式功能4.1多路选择器的VHDL描述5.赋值符号Y=(aAND(NOTs))or(bANDs)赋值符号4.1多路选择器的VHDL描述6.各种表达式的比较---布尔逻辑表达式y=(aAND(NOTs))OR(bANDs)bssay4.1多路选择器的VHDL描述6.各种表达式的比较---条件赋值表达式y=aWHENs1=‘0’ELSEb;赋值目标=表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE表达式;4.1多路选择器的VHDL描述7.各种表达式的比较---IF_THEN_ELSE表达IF(s=‘0’)THENy=a;ELSEy=b;ENDIF;IF条件表达式THEN赋值语句;ELSIF条件表达式THEN赋值语句;ELSIF条件表达式THEN赋值语句;ELSE条件表达式;ENDIF;4.1多路选择器的VHDL描述8.小结4.1节中主要通过多路选择器的实现过程,学习了VHDL描述的基本语言结构,以及组合逻辑电路的功能描述方法布尔逻辑表达式WHEN_ELSE条件表达式IF_THEN_ELSE表达式4.2寄存器描述及其VHDL语言1.教学目的通过D触发器的VHDL实现过程,学习时序电路的VHDL描述方法。4.2寄存器描述及其VHDL语言2.D触发器的功能描述当CP=0时,触发器不工作,处于维持状态。当CP=1时,它的功能如下:当D=0时,次态=0,当D=1时,次态=1。CPDQDFF4.2寄存器描述及其VHDL语言3.VHDL实现LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdff1ISPORT(clk:INSTD_LOGIC;d:INSTD_LOGIC;q:OUTSTD_LOGIC);ENDdff1;ARCHITECTUREbhvOFdff1ISSIGNALq1:STD_LOGIC;BEGINPROCESS(clk,q1)BEGINIFCLK'EVENTANDCLK='1'THENq1=d;ENDIF;ENDPROCESS;q=q1;ENDbhv;引用库数据类型内部节点时钟条件4.2寄存器描述及其VHDL语言4.VHDL实现---引用库LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;LIBRARY设计库名称;USE设计库.程序包名.ALL;数据类型、函数等放在设计库中和程序包中。因为使用了STD_LOGIC的数据类型,而该数据类型放置在设计库IEEE的STD_LOGIC_1164程序包中,所以在使用前需要先申明。4.2寄存器描述及其VHDL语言4.VHDL实现---数据类型PORT(clk:INSTD_LOGIC;d:INSTD_LOGIC;q:OUTSTD_LOGIC);BIT的定义:TYPEBITIS(‘0’,‘1’);STD_LOGIC的定义:TYPESTD_LOGICIS(‘U’,’X’,’0’,’1’,’Z’,’W’,’L’,’H’,’-’)4.2寄存器描述及其VHDL语言4.VHDL实现---信号定义(内部节点)SIGNALq1:STD_LOGIC;不必定义端口模式(如IN、OUT)目的是为了设计更大的时序电路qq1X1PORT(clk:INSTD_LOGIC;d:INSTD_LOGIC;q:OUTSTD_LOGIC);q=q1;4.2寄存器描述及其VHDL语言4.VHDL实现---时钟表达式IFclk'EVENTANDclk='1‘检测时钟信号的上升沿表示clk信号有变化,并且变化后为14.2寄存器描述及其VHDL语言4.VHDL实现---存储功能的产生不完整的条件语句实现存储功能元件如果是完整的条件语句,则只能构成逻辑电路IFclk'EVENTANDclk='1'THENq1=d;ENDIF;4.2寄存器描述及其VHDL语言5.实现时序电路的不同描述IF(clk‘EVENT)AND(clk='1‘)AND(clk’LAST_VALUE=‘0’)IF(clk='1‘)AND(clk’LAST_VALUE=‘0’)IFrising_edge(clk)--STD_LOGIC_1164定义Waituntilclk=‘1’;4.2寄存器描述及其VHDL语言6.同步时序电路和异步时序电路移位寄存器二进制计数器只需一个时钟进程需两个时钟进程4.2寄存器描述及其VHDL语言6.同步时序电路和异步时序电路PROCESS(clk)BEGIN**********ENDPROCESS;PROCESS(q)BEGIN**********ENDPROCESS;4.31位二进制全加器的VHDL描述1.半加器功能描述全加器可由两个半加器和一个或门构成半加器是最简单的加法器,把2个1位二进制数相加,不考虑低位的进位,产生一个2位和,和的低位叫半加和,高位叫半加进位半加器由一个与门,一个或门和一个异或门构成4.31位二进制全加器的VHDL描述2.半加器真值表及电路图abcoso0000010110011110co=aANDbso=aXORb4.31位二进制全加器的VHDL描述3.半加器VHDL描述方法--布尔表达式LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDh_adder;ARCHITECTUREaOFh_adderISBEGINco=aANDb;so=aXORb;ENDa;4.31位二进制全加器的VHDL描述3.半加器VHDL描述方法--真值表表达方式abcoso00000101100111104.31位二进制全加器的VHDL描述4.全加器图形输入法考虑低位进位的情况下,2个输入和4.31位二进制全加器的VHDL描述5.全加器VHDL描述——或门通过顶层调用底层元件,实现全加器,下面使用VHDL描述实现或门逻辑。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2aISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDor2a;ARCHITECTUREaOFor2aISBEGINc=aorb;ENDa;4.31位二进制全加器的VHDL描述5.全加器VHDL描述——顶层设计通过顶层调用底层元件,实现全加器def4.31位二进制全加器的VHDL描述6.新学内容总结a.标准逻辑矢量数据类型b.并置操作符c.CASE语句d.顶层描述及例化语句4.31位二进制全加器的VHDL描述6.新学内容总结--标准逻辑矢量数据类型STD_LOGIC_VECTOR标准一维数组,数组中每一位的数据类型都是STD_LOGICSTD_LOGIC标准位类型定义方法:A:OUTSTD_LOGIC_VECTOR(7DOWNTO0)B:OUTSTD_LOGIC_VECTOR(1TO5)赋值方法:A=“01010101”;A(7DOWNTO4)=“0101”;4.31位二进制全加器的VHDL描述6.新学内容总结--并置操作符并置操作符&的作用:将操作数或者数组合并成新的数组操作符举例功能=c=aANDb赋值操作符=,,IF(s=‘0’)THEN比较操作符&abc=a&b并置操作符使用方法:‘0’&’1’&a&d(1)----定义信号注释操作符4.31位二进制全加器的VHDL描述6.新学内容总结--CASE语句利用CASE语句可以直接表达电路的逻辑真值表,有效直观功能表达语句功能c=aANDb布尔表达方式IF_THEN_ELSEIF条件语句WHEN_ELSEWHEN条件语句CASE语句CASE语句4.31位二进制全加器的VHDL描述6.新学内容总结--顶层设计定义顶层设计端口申明调用元件,定义内部信号使用端口映射语句连接元件4.31位二进制全加器的VHDL描述6.新学内容总结--COMPONENTCOMPONENTh_adder2PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;1.将现成的设计实体定义为一个元件,做出调用申明2.端口名表需要列出元件对外通信的各端口名,命名方式与实体中的PORT()一致(端口名可重新定义)。3.元件申明语句放置在ARCHITECTURE和BEGIN之间COMPONENT元件名PORT(端口名表);ENDCOMPONENT;4.31位二进制全加器的VHDL描述6.新学内容总结--PORTMAPu1:h_adder2PORTMAP(a=ain,b=bin,co=d,so=e);u2:h_adder2PORTMAP(a=e,b=cin,co=f,so=sum);u3:or2aPORTMAP(a=d,b=f,c=cout);1.例化名相当于电子电路里的标号2.元件名即调用的元件实体的名称,相对于器件名称3.PORTMAP表示端口映射,端口到外部引脚或引线的连接关系4.两个例化元件之间不能直接连接5.=是连接符号例化名:元件名PORTMAP(端口名=X,端口名=Y,…)4.31位二进制全加器的VHDL描述7.思考习题4