欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    计数计时器的VHDL设计.ppt

    • 资源ID:6342145       资源大小:256KB        全文页数:31页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    计数计时器的VHDL设计.ppt

    计数/计时器的VHDL设计,本课要解决的问题:,一般计时器的VHDL描述;六十进制计数器和计时器的VHDL设计;二十四进制计时器的VHDL设计;数字钟的VHDL设计。,一、计数器的作用,在时钟的驱动下,对输入脉冲进行计数;如果输入的脉冲为时钟脉冲,就成为计时器。当计数值达到一定数值,计数器产生进位输出,并复位。,二、计数器的设计(P63-67),简单计时器的设计;六十进制计数器和计时器的设计;二十四进制计时器的设计;数字钟的设计。,最简单的计时器,ENTITY CNT4 IS PORT(CLK:IN BIT;Q:BUFFER INTEGER RANGE 15 DOWNTO 0);END;ARCHITECTURE 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.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程序包包含对运算符的重载,定义信号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为进位输出端;,ARCHITECTURE 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清零,检测是否允许计数,允许计数,检测是否小于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:BUFFER 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=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(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;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;END 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;END 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表示再来一个进位输入需要计数,则计数器有进位要输出,六十进制计时器,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 PROCESS;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:BUFFER 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 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分频。,输入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+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 IF;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 clk_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 issignal 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分频,然后将两个分频所得的时钟信号相或得到占空比为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%占空比的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;,

    注意事项

    本文(计数计时器的VHDL设计.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开