您好,欢迎访问三七文档
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)BEGINIFa1b1THENq1='1';ELSIFa1b1THENq1='0';--未提及当a1=b1时,q1作何操作ENDIF;ENDPROCESS;END;4.2.2D触发器VHDL描述的语言现象说明5.不完整条件语句与时序电路图4-5例5-11的电路图5.不完整条件语句与时序电路【例4-8】ENTITYCOMP_GOODISPORT(a1:INBIT;b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_GOODISBEGINPROCESS(a1,b1)BEGINIFa1b1THENq1='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不同表达方式【例4-12】...PROCESSBEGINwaituntilCLK='1';--利用wait语句Q=D;ENDPROCESS;【例4-13】...PROCESS(CLK)BEGINIFCLK='1'THENQ=D;--利用进程的启动特性产生对CLK的边沿检测ENDIF;ENDPROCESS;4.2.3实现时序电路的VHDL不同表达方式图5-8电平触发型寄存器的时序波形【例4-14】...PROCESS(CLK,D)BEGINIFCLK='1'--电平触发型寄存器THENQ=D;ENDIF;ENDPROCESS;4.2.4异步时序电路设计单一时钟的同步时序逻辑4.2.4异步时序电路设计【例4-19】...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;QQ=Q2;ENDPROCESS;图5-9例5-19综合的电路Q1Q2比较用5种不同语句的D触发器VHDL程序Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginifclk='1'ANDclk’last_value='0'thenq1=d;endif;q=q1;endprocess;endtest1_body;LIBRARYIEEE;USEIEEE.std_logic_1164.all;Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1isbeginprocess(clk,d)beginifrising_edge(clk)thenq=d;endif;endprocess;endtest1_body;Entitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1isbeginprocessbeginwaituntilclk=‘1’thenq1=d;endif;q=q1;endprocess;endbody;Entitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginif(clk=‘1’)thenq1=d;endif;q=q1;endprocess;endbody;
本文标题:寄存器描述
链接地址:https://www.777doc.com/doc-3303062 .html