资源描述:
《电路基础与集成电子技术与习题解答-蔡惟铮 第14章 触发器和定时器 14.9 用VHDL语言描述时序逻辑电路》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、14.9.1用VHDL语言描述同步计数器14.9用VHDL语言描述时序逻辑电路*14.9.2用VHDL语言描述异步计数器第14章触发器和时序逻辑电路2010.0314.9.1用VHDL语言描述同步计数器有一个同步计数器,它的功能表见表14.27,用VHDL语言描述该计数器。表中各符号前面已经说明,但此处的qd、qc、qb、qa是四个触发器的输出端端的编号。表14.27计数器的功能表输入端输出端clrenclkqdqcqbqa1××000000×不变不变不变不变01计数值加1第14章触发器和时序逻辑电路2010.03LIBRARYIEEE;IEEE库USEIEEE.STD_L
2、OGIC_1164.ALL;使用IEEE中的STD库USEIEEE.STD_LOGIC_UNSIGNED.ALL;使用IEEE中的UNSIGNED库ENTITYcount12enIS计数器count12是一个实体PORT(clk,clr,en:INSTD_LOGIC;输入clk,clr,en是逻辑变量qa,qb,qc,qd:OUTSTD_LOGIC);输出qa,qb,qc,qd是逻辑变量ENDcount12en;描述count12en结束第14章触发器和时序逻辑电路2010.03ENDcount12en;ARCHITECTURErtlOFcount12enIS构造一个12进
3、制计数器SIGNALcount_4:STD_LOGIC-VECTOR(3DOWNTO0)四位计数器位数从3到0BEGINqa<=count_4(0);计数器中的qa是0位qb<=count_4(1);计数器中的qb是1位qc<=count_4(2);计数器中的qc是2位qd<=count_4(3);计数器中的qd是3位PROCESS(clk,clr)BEGIN流程IF(clr=’1’)THENcount_4<=”0000”;如果clr=’1’计数器清零第14章触发器和时序逻辑电路2010.03count_4<=”0000”;计数器清零ELSIF(clk’EVENTANDcl
4、k=”1”)THEN时钟有个事件,且clk=1,即上升沿动作IF(en=’1’)THEN如果使能端EN=1IF(count_4=”1011”)THEN且4位计数器的状态是1011Count_4<=”0000”;那么计数器返回初态0000ELESCount_4<=count_4+”0001”;否则计数器加1ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDrtl;第14章触发器和时序逻辑电路2010.0314.9.2用VHDL语言描述异步计数器LIBRARYIEEE;IEEE库USEIEEE.STD_LOGIC_1164.ALL;使用IEEE中的STD库ENTI
5、TYdffrISdff是一个实体PORT(clk,clr,d:INSTD_LOGIC;输入clk,clr,d是逻辑变量q,qb:OUTSTD_LOGIC);输出q,qb是输出逻辑变量ENDdffr;描述结束ARCHITECTURErtlOFdffrIS构造一个dffSIGNALq_in:STD_LOGIC;BEGIN信号q是逻辑变量第14章触发器和时序逻辑电路2010.03BEGIN接上,相同qb<=NOTq_in;qb是q非q<=q_in;q是qPROCESS(clk,clr)BEGIN流程IF(clr=’1’)THEN如果clr=’1’q_in<=’0’;计数器清零EL
6、SIF(clk’EVENTANDclk=’1’)THEN时钟上升沿来到q_in<=d;d向q敷值ENDIF;ENDPROCESS;ENDrtl;第14章触发器和时序逻辑电路2010.03ENDrtl;LIBRARYIEEE;接上,相同IEEE库USEIEEE.STD_LOGIC_1164.ALL;使用IEEE中的STD库ENTITYrplcontIS异步计数器是实体PORT(clk,clr,:INSTD_LOGIC;count:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDrplcont;描述结束ARCHITECTURErtlOFrplcontIS构造
7、异步计数器SIGNALcount_in_bar:STD_LOGIC_VECTOR(7DOWNTO0);COMPONENTdffrPORT(clk,clr,,d:INSTD_LOGIC;q,qb:OUTSTD_LOGIC);第14章触发器和时序逻辑电路2010.03q,qb:OUTSTD_LOGIC);ENDCOMPONENT;接上,相同BEGINcount_in_bar(0)<=clk;genl:FORiIN0TO7GENERATEU:dffrPORTMAP(clk=>count_in_bar(i),clr=>cl