EDA技术与VHDL第3章VHDLVHDL入门入门KKX康芯科技KKX康芯科技3.1简单组合电路的VHDL描述3.1.1多路选择器的VHDL描述图3-1mux21a实体图3-2mux21a结构体KKX康芯科技3.1简单组合电路的VHDL描述3.1.1多路选择器的VHDL描述【例3-1】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy=aWHENs='0'ELSEb;ENDARCHITECTUREone;KKX康芯科技3.1简单组合电路的VHDL描述3.1.1多路选择器的VHDL描述【例3-2】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd=aAND(NOTS);e=bANDs;y=dORe;ENDARCHITECTUREone;KKX康芯科技3.1简单组合电路的VHDL描述3.1.1多路选择器的VHDL描述【例3-3】ENTITYmux21aISPORT(a,b,s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy=a;ELSEy=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;KKX康芯科技3.1简单组合电路的VHDL描述3.1.1多路选择器的VHDL描述图3-3mux21a功能时序波形KKX康芯科技3.1简单组合电路的VHDL描述1.实体表达【例3-4】ENTITYe_nameISPORT(p_name:port_mdata_type;...p_namei:port_midata_type);ENDENTITYe_name;KKX康芯科技3.1简单组合电路的VHDL描述2.实体名3.端口语句和端口信号名4.端口模式“IN”、“OUT”、“INOUT”、“BUFFER”5.数据类型KKX康芯科技3.1简单组合电路的VHDL描述6.结构体表达【例3-5】ARCHITECTUREarch_nameOFe_nameIS[说明语句]BEGIN(功能描述语句)ENDARCHITECTUREarch_name;KKX康芯科技3.1简单组合电路的VHDL描述7.赋值符号和数据比较符号IFaTHEN...--注意,a的数据类型必须是booleanIF(s1='0')AND(s2='1')OR(cb+1)THEN..8.逻辑操作符BIT、BOOLEAN、STD_LOGICKKX康芯科技3.1简单组合电路的VHDL描述9.条件语句10.WHEN_ELSE条件信号赋值语句赋值目标=表达式WHEN赋值条件ELSE表达式WHEN赋值条件ELSE...表达式;z=aWHENp1='1'ELSEbWHENp2='1'ELSEc;KKX康芯科技3.1简单组合电路的VHDL描述11.进程语句和顺序语句12.文件取名和存盘IF_THEN_ELSE_ENDIF;“.vhd”adder_f.vhdKKX康芯科技【例3-6】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF1ISSIGNALQ1:STD_LOGIC;--类似于在芯片内部定义一个数据的暂存节点BEGINPROCESS(CLK,Q1)BEGINIFCLK'EVENTANDCLK='1'THENQ1=D;ENDIF;ENDPROCESS;Q=Q1;--将内部的暂存数据向端口输出(双横线--是注释符号)ENDbhv;3.2简单时序电路的VHDL描述3.2.1D触发器图3-4D触发器KKX康芯科技3.2简单时序电路的VHDL描述3.2.2D触发器VHDL描述的语言现象说明1.标准逻辑位数据类型STD_LOGICBIT数据类型定义:TYPEBITIS('0','1');--只有两种取值STD_LOGIC数据类型定义:TYPESTD_LOGICIS('U','X','0','1','Z','W','L','H','-');KKX康芯科技3.2简单时序电路的VHDL描述3.2.2D触发器VHDL描述的语言现象说明2.设计库和标准程序包LIBRARYWORK;LIBRARYSTD;USESTD.STANDARD.ALL;LIBRARY设计库名;USE设计库名.程序包名.ALL;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;KKX康芯科技3.2简单时序电路的VHDL描述3.2.2D触发器VHDL描述的语言现象说明3.信号定义和数据对象信号名'EVENT4.上升沿检测表式和信号属性函数EVENT5.不完整条件语句与时序电路KKX康芯科技3.2简单时序电路的VHDL描述3.2.2D触发器VHDL描述的语言现象说明【例3-7】ENTITYCOMP_BADISPORT(a1,b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_BADISBEGINPROCESS(a1,b1)BEGINIFa1b1THENq1='1';ELSIFa1b1THENq1='0';--未提及当a1=b1时,q1作何操作ENDIF;ENDPROCESS;END;KKX康芯科技3.2简单时序电路的VHDL描述3.2.2D触发器VHDL描述的语言现象说明图3-5例3-7的电路图(Synplify综合)KKX康芯科技3.2简单时序电路的VHDL描述3.2.2D触发器VHDL描述的语言现象说明图3-6例3-8的电路图(Synplify综合)【例3-8】...IFa1b1THENq1='1';ELSEq1='0';ENDIF;...KKX康芯科技3.2简单时序电路的VHDL描述3.2.3实现时序电路的不同表述【例3-9】...PROCESS(CLK)BEGINIFCLK'EVENTAND(CLK='1')AND(CLK'LAST_VALUE='0')THENQ=D;--确保CLK的变化是一次上升沿的跳变ENDIF;ENDPROCESS;【例3-10】...PROCESS(CLK)BEGINIFCLK='1'ANDCLK'LAST_VALUE='0'--同例3-9THENQ=D;ENDIF;ENDPROCESS;KKX康芯科技3.2简单时序电路的VHDL描述3.2.3实现时序电路的不同表述【例3-11】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK,D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALQ1:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFrising_edge(CLK)--必须打开STD_LOGIC_1164程序包THENQ1=D;ENDIF;ENDPROCESS;Q=Q1;--在此,赋值语句可以放在进程外,作为并行赋值语句END;KKX康芯科技3.2简单时序电路的VHDL描述3.2.3实现时序电路的不同表述【例3-12】...PROCESSBEGINwaituntilCLK='1';--利用wait语句Q=D;ENDPROCESS;KKX康芯科技3.2简单时序电路的VHDL描述3.2.3实现时序电路的不同表述【例3-13】...PROCESS(CLK)BEGINIFCLK='1'THENQ=D;--利用进程的启动特性产生对CLK的边沿检测ENDIF;ENDPROCESS图3-7例3-13的时序波形KKX康芯科技3.2简单时序电路的VHDL描述3.2.3实现时序电路的不同表述【【例3-14】...PROCESS(CLK,D)BEGINIFCLK='1'--电平触发型寄存器THENQ=D;ENDIF;ENDPROCESS;图3-8例3-14的时序波形KKX康芯科技3.2简单时序电路的VHDL描述3.2.4异步时序电路设计【例3-15】...ARCHITECTUREbhvOFMULTI_DFFISSIGNALQ1,Q2:STD_LOGIC;BEGINPRO1:PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1=NOT(Q2ORA);ENDIF;ENDPROCESS;PRO2:PROCESS(Q1)BEGINIFQ1'EVENTANDQ1='1'THENQ2=D;ENDIF;ENDPROCESS;QQ=Q2;...KKX康芯科技3.2简单时序电路的VHDL描述3.2.4异步时序电路设计图3-9例3-15综合后的电路(Synplify综合)KKX康芯科技3.3含有层次结构的VHDL描述3.3.1半加器描述和CASE语句图3-10半加器h_adder电路图及其真值表coasob1001010110001100cosobanotxnor2and2KKX康芯科技3.3含有层次结构的VHDL描述3.3.1半加器描述和CASE语句图3-11全加器f_adder电路图及其实体模块aincoutcoutainbinsumcinbinsumcinf_adderor2afedu3u2u1baccosoBcosoBh_adderAh_adderAKKX康芯科技3.3含有层次结构的VHDL描述3.3.1半加器描述和CASE语句【例3-16】LIBRARYIEEE;--半加器描述(1):布尔方程描述方法USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderisBEGINso=NOT(aXOR(NOTb));co=aANDb;ENDARCHITECTUREfh1;KKX康芯科技3.3含有层次结构的VHDL描述3.3.1半加器描述和CASE语句【例3-17】LIBRARYIEEE;--半加器描述(2):真值表描述方法USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderisSIGNALabc:STD_LOGIC_VECTOR(1DOWNTO0);--定义标准逻辑位矢量数据类型BEGINabc=a&b;--a相并b,即a与b并置操作PROCESS(abc)BEGINCASEabcIS--类似于真值表的CASE语句WHEN00=so='0';co='0';WHEN01=so='1';co='0';WHEN10=so='1';co='0';WHEN11=so='0';co='1';WHENOTHERS=NULL;ENDCASE;ENDPROCESS;ENDARCHITECTUREfh1;KKX康芯科技3.3含有层次结构的VHDL描述3.3.1半加器描述和CASE语句【例3-18】LIBRARYIEEE;--或门逻辑描述USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2aISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYor2a;ARCHITECTUREoneOFor2aISBEGINc=