DQnQn+1000010101111D触发器真值表(发生在时钟上升沿)01D=1D=1D=0D=04.2寄存器描述及其VHDL语言现象4.2.1D触发器的VHDL描述【例4-6】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF1ISSIGNALQ1:STD_LOGIC;--类似于在芯片内部定义一个数据的暂存节点BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;Q<=Q1;--将内部的暂存数据向端口输出ENDPROCESS;ENDbhv;D触发器4.2.2D触发器VHDL描述的语言现象说明1.标准逻辑位数据类型STD_LOGICBIT数据类型定义:TYPEBITIS('0','1');STD_LOGIC数据类型定义:TYPESTD_LOGICIS('U','X','0','1','Z','W','L','H','-');STD_LOGIC所定义的9种数据的含义是:‘U’表示未初始化的;‘X’表示强未知的;‘0’表示强逻辑0;‘1’表示强逻辑1;‘Z’表示高阻态;‘W’表示弱未知的;‘L’表示弱逻辑0;‘H’表示弱逻辑1;‘-’表示忽略。4.2.2D触发器VHDL描述的语言现象说明2.设计库和标准程序包使用库和程序包的一般定义表式是:LIBRARY<设计库名>;USE<设计库名>.<程序包名>.ALL;库的种类VHDL库可分为5种:1)IEEE库定义了四个常用的程序包:•std_logic_1164(std_logictypes&relatedfunctions)•std_logic_arith(arithmeticfunctions)•std_logic_signed(signedarithmeticfunctions)•std_logic_unsigned(unsignedarithmeticfunctions)TypeSTD_LOGIC:9logicvaluesystem(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)•‘W’,‘L’,‘H”weakvalues(NotsupportedbySynthesis)•‘X’-(not‘x’)usedforunknown•‘Z’-(not‘z’)usedfortri-state•‘-’Don’tCare2)STD库(默认库)库中程序包为:standard,定义最基本的数据类型:Bit,bit_vector,Boolean,Integer,Real,andTime注:TypeBit2logicvaluesystem(‘0’,‘1’)3)面向ASIC的库4)WORK库(默认库)5)用户定义库4、库及程序包的使用库及程序包的说明总是放在实体单元前面,默认库及程序包可不作说明。用关健字library说明要使用的库,用关健字use说明要使用的库中的程序包。库及程序包的作用范围:仅限于所说明的设计实体。每一个设计实体都必须有自已完整的库及程序包说明语句。2选1选择器:2选1的另一种描述3.SIGNAL信号定义和数据对象ARCHITECTUREbhvOFDFF1ISBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ<=D;ENDIF;ENDPROCESS;END;SIGNALQ1:STD_LOGIC4.2.2D触发器VHDL描述的语言现象说明4.上升沿检测表式和信号属性函数EVENT关键词EVENT是信号属性,VHDL通过以下表式来测定某信号的跳变边沿:<信号名>'EVENTCLK’EVENT----CLK’EVENTANDCLK=‘1’5.不完整条件语句与时序电路【例4-7】ENTITYCOMP_BADISPORT(a1:INBIT;b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_BADISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSIFa1b1THENq1<='1';ELSEq1<='0';ENDIF;ENDPROCESS;END图4-6例4-12的电路图a1b1q10000101011104.2.3实现时序电路的VHDL不同表达方式【例4-9】...PROCESS(CLK)BEGINIFCLK'EVENTAND(CLK='1')AND(CLK'LAST_VALUE='0')THENQ<=D;--确保CLK的变化是一次上升沿的跳变ENDIF;ENDPROCESS;【例4-10】...PROCESS(CLK)BEGINIFCLK='1'ANDCLK'LAST_VALUE='0'--同例5-13THENQ<=D;ENDIF;ENDPROCESS;4.2.3实现时序电路的VHDL不同表达方式【例4-11】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALQ1:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFrising_edge(CLK)--CLK的数据类型必须是STD_LOGICTHENQ1<=D;ENDIF;Q<=Q1;ENDPROCESS;END;4.2.3实现时序电路的VHDL不...