计数计时器的VHDL设计.ppt

上传人:小飞机 文档编号:6342145 上传时间:2023-10-18 格式:PPT 页数:31 大小:256KB
返回 下载 相关 举报
计数计时器的VHDL设计.ppt_第1页
第1页 / 共31页
计数计时器的VHDL设计.ppt_第2页
第2页 / 共31页
计数计时器的VHDL设计.ppt_第3页
第3页 / 共31页
计数计时器的VHDL设计.ppt_第4页
第4页 / 共31页
计数计时器的VHDL设计.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《计数计时器的VHDL设计.ppt》由会员分享,可在线阅读,更多相关《计数计时器的VHDL设计.ppt(31页珍藏版)》请在三一办公上搜索。

1、计数/计时器的VHDL设计,本课要解决的问题:,一般计时器的VHDL描述;六十进制计数器和计时器的VHDL设计;二十四进制计时器的VHDL设计;数字钟的VHDL设计。,一、计数器的作用,在时钟的驱动下,对输入脉冲进行计数;如果输入的脉冲为时钟脉冲,就成为计时器。当计数值达到一定数值,计数器产生进位输出,并复位。,二、计数器的设计(P63-67),简单计时器的设计;六十进制计数器和计时器的设计;二十四进制计时器的设计;数字钟的设计。,最简单的计时器,ENTITY CNT4 IS PORT(CLK:IN BIT;Q:BUFFER INTEGER RANGE 15 DOWNTO 0);END;ARC

2、HITECTURE bhv OF CNT4 IS BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q=Q+1;END IF;END PROCESS;END bhv;,BUFFER模式才可以读取,在时钟CLK信号的驱动下,Q对时钟信号CLK进行计数;由于Q为BUFFER模式,所以可以读取Q的值,【例3-19】,表式Q=Q+1的右项与左项并非处于相同的时刻内,对于时序电路,除了传输延时外,前者的结果出现于当前时钟周期;后者,即左项要获得当前的Q+1,需等待下一个时钟周期。,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164

3、.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT4 IS PORT(CLK:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END;ARCHITECTURE bhv OF CNT4 ISSIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN Q1=Q1+1;END IF;END PROCESS;Q=Q1;END bhv;,【例3-20】,std_logic_unsigned程序包

4、包含对运算符的重载,定义信号Q1,Q1作为内部信号,可以进行改写和读取;,对+进行运算符重载,标准逻辑类型可进行加法,加上异步复位和置位的十进制计时器,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CNT10 IS PORT(CLK,RST,EN:IN STD_LOGIC;CQ:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);COUT:OUT STD_LOGIC);END CNT10;,RST为复位端,EN为使能端;,COUT为进位输出端;,ARCHITECTUR

5、E behav OF CNT10 ISBEGIN PROCESS(CLK,RST,EN)VARIABLE CQI:STD_LOGIC_VECTOR(3 DOWNTO 0);BEGIN IF RST=1 THEN CQI:=(OTHERS=0);ELSIF CLKEVENT AND CLK=1 THEN IF EN=1 THEN IF CQI 0);END IF;END IF;END IF;IF CQI=9 THEN COUT=1;ELSE COUT=0;END IF;CQ=CQI;END PROCESS;END behav;,异步复位,CQI:=(OTHERS=0)为省略赋值方式,对CQI清零

6、,检测是否允许计数,允许计数,检测是否小于9,大于9,计数值清零,计数大于等于9,输出进位信号,将计数值向端口输出,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_unsigned.ALL;ENTITY bcd60count ISPORT(clk,bcd1wr,bcd10wr,cin:IN STD_LOGIC;co:OUT STD_LOGIC;datain:IN STD_LOGIC_VECTOR(3 DOWNTO 0);bcd10n:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0);bcd1n:BUF

7、FER STD_LOGIC_VECTOR(3 DOWNTO 0);END bcd60count;,【六十进制计数器】,实体,六十进制计数器的设计,clk:时钟端;bcd1wr,bcd10wr:计数初值的个位和十位允许写入端;datain:计数初值输入端;bcd1n,bcd10n:计数值的个位输出和十位输出;co:计数值进位输出。,结构体,ARCHITECTURE behave OF bcd60count ISBEGINEND behave;,PROCESS(clk,bcd1wr)BEGINIF(bcd1wr=1)THEN bcd1n=datain;ELSIF(clkEVENT AND clk=

8、1)THEN IF(cin=1)THEN IF(bcd1n=“1001”)THEN bcd1n=0000;ELSE bcd1n=bcd1n+1;END IF;END IF;END IF;END PROCESS;,PROCESS(bcd10n,bcd1n,cin)BEGINIF(cin=1 AND bcd1n=“1001”AND bcd10n=“101”)THEN co=1;ELSE co=0;END IF;END PROCESS;,PROCESS(clk,bcd10wr)BEGINIF(bcd10wr=1)THEN bcd10n=datain(2 DOWNTO 0);ELSIF(clkEVEN

9、T AND clk=1)THEN IF(cin=1 AND bcd1n=“1001”)THEN IF(bcd10n=“101”)THEN bcd10n=000;ELSE bcd10n=bcd10n+1;END IF;END IF;END IF;END PROCESS;,PROCESS(clk,bcd1wr)BEGINIF(bcd1wr=1)THEN bcd1n=datain;ELSIF(clkEVENT AND clk=1)THEN IF(cin=1)THEN IF(bcd1n=“1001”)THEN bcd1n=0000;ELSE bcd1n=bcd1n+1;END IF;END IF;EN

10、D IF;END PROCESS;,进程处理个位计数,bcd1wr为1时,对个位bcd1n进行置位,在时钟信号驱动下,当进位输入cin为1时,若bcd1n为9则归零;否则bcd1n加1计数,PROCESS(clk,bcd10wr)BEGINIF(bcd10wr=1)THEN bcd10n=datain(2 DOWNTO 0);ELSIF(clkEVENT AND clk=1)THEN IF(cin=1 AND bcd1n=“1001”)THEN IF(bcd10n=“101”)THEN bcd10n=000;ELSE bcd10n=bcd10n+1;END IF;END IF;END IF;E

11、ND PROCESS;,进程处理十位计数,bcd10wr为1时,对十位bcd10n进行置位,在时钟信号驱动下,当进位输入cin为1时,个位bcd1n为9,若十位bcd10n为5,则bcd10n归零;否则bcd1n加1计数,PROCESS(bcd10n,bcd1n,cin)BEGINIF(cin=1 AND bcd1n=“1001”AND bcd10n=“101”)THEN co=1;ELSE co=0;END IF;END PROCESS;,进程处理进位输出,当个位bcd1n为9,十位bcd10为5,即计数值为59时,若cin为1表示再来一个进位输入需要计数,则计数器有进位要输出,六十进制计时

12、器,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY clk_s ISPORT(clk:IN STD_LOGIC;q1:BUFFER INTEGER RANGE 0 TO 9;qt:BUFFER INTEGER RANGE 0 TO 6;co:OUT STD_LOGIC);END clk_s;,ARCHITECTURE behav OF clk_s ISBEGINPROCESS(clk)BEGINIF(clkEVENT AND clk=1)THEN IF(q1=9)THEN q1=0;ELSE q1=q1+1;END IF;END IF;END P

13、ROCESS;PROCESS(clk,q1)BEGINIF(clkEVENT AND clk=1)THEN IF(q1=9)THEN IF(qt=5)THEN qt=0;ELSE qt=qt+1;END IF;END IF;END IF;END PROCESS;,PROCESS(clk,q1,qt)BEGINIF(clkEVENT AND clk=1)THEN IF(qt=5 AND q1=9)THEN co=1;ELSE co=0;END IF;END IF;END PROCESS;END behav;,二十四进制计数器,ENTITY clk_h ISPORT(clk:IN BIT;q1:B

14、UFFER INTEGER RANGE 0 TO 9;qt:BUFFER INTEGER RANGE 0 TO 2;co:OUT BIT);END clk_h;,二十四进制计数器的设计,ARCHITECTURE a_clk_h OF clk_h ISBEGINPROCESS(clk,qt)BEGINIF(clkEVENT AND clk=1)THEN IF(qt=2 and q1=3)THEN q1=0;ELSIF(q1=9)THEN q1=0;ELSE q1=q1+1;END IF;END IF;END PROCESS;,PROCESS(q1,clk)BEGINIF(clkEVENT AND

15、 clk=1)THEN IF(q1=3)THEN IF(qt=2)THEN qt=0;END IF;ELSIF(q1=9)THEN qt=qt+1;END IF;END IF;END PROCESS;PROCESS(q1,qt,clk)BEGINIF(clkEVENT AND clk=1)THEN IF(q1=3 AND qt=2)THEN co=1;ELSE co=0;END IF;END IF;END PROCESS;END a_clk_h;,实验:数字钟的设计,三、分频器,分频器以计数器为基础实现;对输入脉冲进行计数,输入为N个脉冲时,输出为1个脉冲,输出信号即对输入信号进行N分频。,输

16、入N个脉冲,输出1个脉冲,ENTITY CNT4 IS PORT(CLK:IN BIT;Q:BUFFER INTEGER RANGE 15 DOWNTO 0;COUT:OUT BIT);END;ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS(CLK)BEGIN IF CLKEVENT AND CLK=1 THEN IF Q=4 THEN Q=0;ELSE Q=Q+1;END IF;END IF;IF Q=4 THEN COUT=1;ELSE COUT=0;END IF;END PROCESS;END bhv;,分频器还可以设置占空比;占空比为P/Q,其中P+

17、Q=N,输入脉冲数小于等于P,输入脉冲数大于等于P,ENTITY CNT4 IS PORT(CLK:IN BIT;P:IN INTEGER RANGE 15 DOWNTO 0;COUT:OUT BIT);END;ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS(CLK)VARIABLE Q:INTEGER RANGE 15 DOWNTO 0;BEGIN IF CLKEVENT AND CLK=1 THEN IF Q=4 THEN Q:=0;ELSE Q:=Q+1;END IF;END IF;IF QP THEN COUT=1;ELSE COUT=0;END I

18、F;END PROCESS;END bhv;,占空比为50%的偶数倍分频器:方案一:当计数器计数到N/2-1时,输出信号翻转,同时计数器复位;方案二:计数器为0N/2-1时,输出信号为0;计数器为N/2N-1时,输出信号为1。,50%占空比的6分频器,Library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clk_div1 isport(clk_in:in std_logic;clk_out:out std_logic);end cl

19、k_div1;,第一种方案:,architecture a of clk_div1 issignal clk_outQ:std_logic:=0;signal countQ:std_logic_vector(2 downto 0):=“000”;begin process(clk_in)begin if(clk_inevent and clk_in=1)then if(countQ/=2)then countQ0);end if;end if;end process;clk_out=clk_outQ;end a;,第二种方案:,architecture b of clk_div1 issign

20、al countQ:std_logic_vector(2 downto 0);begin process(clk_in)begin if(clk_inevent and clk_in=1)then if(countQ0);end if;end if;end process;process(countQ)begin if(countQ3)then clk_out=0;else clk_out=1;end if;end process;end b;,占空比50%的奇数倍分频器:欲实现占空比为50%的2N+1分频器,则需要对待分频时钟上升沿和下降沿分别进行N分频,然后将两个分频所得的时钟信号相或得到

21、占空比为50%的2N+1分频器。,library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity clk_div3 isport(clk_in:in std_logic;clk_out:out std_logic);end clk_div3;architecture a of clk_div3 issignal cnt1,cnt2:integer range 0 to 6;signal clk1,clk2:std_logic;begin,50

22、%占空比的5分频器:,process(clk_in)-上升沿 begin if(rising_edge(clk_in)then if(cnt16)then cnt1=cnt1+1;else cnt1=0;end if;if(cnt13)then clk1=1;else clk1=0;end if;end if;end process;,process(clk_in)-下降沿 begin if(falling_edge(clk_in)then if(cnt26)then cnt2=cnt2+1;else cnt2=0;end if;if(cnt23)then clk2=1;else clk2=0;end if;end if;end process;clk_out=clk1 or clk2;end a;,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号