基于VHDL的数字时钟设计

所需积分/C币:36 2015-11-08 20:27:39 7.19MB PDF
56
收藏 收藏
举报

这是vhdl设计数字时钟设计,包括如何除去抖动,怎样去设计时钟等等
邵阳学院课程设计 2系统总体方案设计 设计一个基于ⅤHDL的数字时钟,我采用白顶向下分模块的设计。底层为实现 个弄能的嗅块,各模块由whdl语言编程实现:顶层采用原理图形式调用。其中底层 模块包括秒、分、时三个计数器模块、按键去抖动模块、按键拦制模块、时钟分频模 块、数码管显示模块共7个模块。设计框图如下: 匚分频块 显呆模块 统时钟 秒计数块 分计数模块 时计数模块 按键老抖模 按键控常模块 图2.1数字时钟设计框图 由图2.1可以清晰的看到数字钟系统设计中各功能模块间连接关系。系统时钟 50MHZ经过分频后产生1秒的时钟信号,1秒的时钟信号作为秒计数模块的输入信 ,秒计数模块产生的进位信号作为分计数模块的输入信号,分计数模块的进位信号 作为时计数模块的输入信号。秒汁数模块、分计数模块、时计数模块的计数输出分别 送到显示嫫块。由于设计屮要使用按键进行调节时间,而按键的动作过程屮存在产生 得脉冲的不稳定问题,所以就牵扯到按键去抖动的问题,对此系统中设置了按键去抖 动模块,按键去抖动模块产生稳定的脉冲信号送入按键控訇模块,按键控制模块根据 按键的动作对秒、分、时进行调节 邵阳学院课程设计 3VHDL模块电路设计 3.Ⅰ模块实现 山数字钟的顶层设计原理图可知:系统的外部输入即为系统的时钟信号CLK 50MHZ,系统的外部输出有蜂鸣器信号 buzzer,LED显示信号LED[3.1]8和shan 与按键士抖动模垬的σ3相连),数码管显示信号ⅹ lanshi[7.0],数码管位选信号 xuanze.0] 下面将对内韶功能模块进行详细说明,(木设计共包含5个模块): 3.1.1分频模块 pine 对系统的时钟50MHZ进行分频,设置不同长度的计数值,当系统时钟clk有 变化时计数器开始计数,当计数到某个值时输出一个信号,计数值不同输出信号的周 期也就同,从而实现了对系统时钟进行不同的分频,产生不同频率的信号。 由 VHDL语言生成的模块图和程序说明如下: dOC Ik clk2ms clk500ms 丁 clk1s Inst 13 图3.1分频模块 library ieee ocin. com use ieee std logic 1164.all use ieee std logic unsigned. all; entity pinlv is pot( clk in std logic;-系统时钟输入端口 clk2ms: out std logic, clk500ms out std logic, clk1s; out std_logi);-各频率信号的输出端凵 end architecture beh of pily is begin pl: process(clk);-进程pl 邵阳学院课程设计 variable count: integer range 0 to 49999999 egin fclk' event and clk=1') then countI: count1+1;-ck的上升沿计数 if count1<=24999999 then clk1s=0 elsif count<=49999999 then clkIs<=l else count l:=0;-产牛周期为ls的时钟信号 clk500mS<=O' elsif count3<--24999999 then clk 500ms<='1 else count3:=0;-产生周期为500ms的时钟信号 end if end if end process pl;-结束进程pl p2 process(clk);-进程p2 variable count 2: integer range 0 to 99999 ifck' event and clk-) then count2:= count2+1;-在clkl升沿计数 if count2<=49999 then clk2mS<=O' elsif count2<=99999 then clk2ms<'1';-产生周期为2ms的扫描信号 end if end if docin. com end process p2;-结束进程p2 p3: process(clk):-进程p variable count3: integer range 0 to 24999999 begin if( clk'event and clk=") then count3: count3+1;-在clk上升沿计数 if count3<=12499999 then end if end if end process p3 end bel 邵阳学院课程设计 3.1.2按鍵去抖动模块 qudou 本设汁用到FPGA开发板上的四个按键,由于按键有反应时间、抖动的问题, 可能当按键被按一次时而系统感应到几次,造成淏差。所以应该进行按键消抖的处理 让每按一次键系统只感应到一次按键。可以采用软件延时,触发反相器等方式进行消 狳抖动,本设计中采用软什延时的方式。 由ⅤHDL语言生成的模块图和程序说叨如下 图3.2按键去抖动模块 library ieee use ieee std logic 1164. all use ieee std logic unsigned. all entity qudou is port(clk, k1, k2, k3, k4: in std logic m豆丁 o1,o2,o3,04: out std logic);-设置按键输入信号输岀端口 ene architecture beh of qudou is ocin com egin process(clk, k1, k2, k3, k4) variable cantl: Integer; variable cant: integer variable cant: integer; variable cant: integer; gin if clk'eyent and clk='l' then ifkl-l then cantl: =0 end if,-设置计数初值 ifk2-'1' then cant2: =0 邵阳学院课程设计 end if;-1设置计数初值 ifk3=' then cant3:=0;-设置计数初值 end if fk4=l then cant4: =0 end it;-设置计数初值 if cantl>2499999 then o<=o else ol<='1;-延时0.5s end if if cant2>2499999 then 02<=0 else o2<="l;-延时0.5s if cant 322499999 then o3<=0 else o3<=l;-延时0.5s end if∴ if cant>2499999 then 04<=0 else o4<=1';-延时0.5s 豆丁 end if cant1:= cantl+1;-加一计数 cant2:=cant2+1;-加计数 cant3:=cant3+1;-加计数 ocin com cant4:=cant4+1;--加一计数 end if∴ end process end beh 3.1.3按键控制模块Self 设汁屮使用了两个按键进行对时钟的暂停和调秒操作,当Ok2按下时时钟暂 停,再按ok3则进行秒个位的加一计数,每按一次进行加一处理。当调节好时间后, 在按ok2键重新丌始计数。 由ⅤHDL语言生成的模块图和程序说明如下: 邵阳学院课程设计 IN4 图3.3按链控制模 library ieee use ieee std lo gic 1164.all use ieee std logic unsigned. all entity self is c: in std logic ok2: in std logic ok3: in std logic ck: out std logic); end;-设置端口 architecture bea of selfi is in豆丁 signal m: std logic signal t: std logic; be egin pI: process(ok2,ok3,c);-0k2和ok3触发进程 1. com begin ifok2 event and ok2=0 then n<=notm:-出ok2的动作产生m的电平信 end if ifm="l' then ck<-not(ok3);-把按键ok3的脉冲信号给输出 else ck<=C;-否则把正常计数时钟给输出 end if end process pl;结束进程 end bea: 314秒、分六十进制模块 cantsixty 邵阳学院课程设计 本设中秒、分的六「进制是由个位的|进制和|位的六进制进行组合实现的。当 个位记到9时自动向高位进一,同时个位自动清零。当十位记到5并且个位记到9 时,自动产生一个进位脉冲,同时个位和十位分别从零开始重新计数。 由ⅤHDL语言生成的模块图和程序说明如下 1 出 out18 reset eset out2[3. 01 out2[3. e 浏回 」in 1::211:1:2111111----4 1::"::::::::::1::: 图3.4六十进制模块 library ieee use ieee std logic 1164.all use ieee std logic unsigned. all entity cantsixtv is port(clk: in std logi resct: in std logic; 豆丁 outl: out std logic vector(3 downto 0) out2: out std logic vector (3 downto 0) C:out std logic) en d w docin. com architecture beh of cantsixty iS signal ssl, ss2: Std logic vector(3 downto O begin pl process(clk, reset) begin if(reset=0 then ss 1<=0000", Ss2<=0000 elsif(clk'event and clk-1)then if ssI="l00" and ss.2="010l" then c<="1;-当计数到59时产生进位信号 else c<=0;-否则不产生 end if if ss1=1001 then ss1<=0000" 邵阳学院课程设计 ifss2=0101 then ss2<=0000 else ss 2<=ss2+1 if∴ else ss1<=ss1+1;-计数过程 end if: end if end process pl;-结束进程 outl<=ssl;out2<=Ss2;-把信号送输出 end beh 3.1.5时计数模块 hourtwenty 时计数模块是二十四进制相对复杂一点,因为当十位0或着1时个位需要记到9 并产生进位信号,当十位是2时,个位记到3时,就全部从零开始重新计数。即是 在十位为不同值时个位两种计数过程 由VHDL语言生成的模块图和程序说明如下 twenty clk out1[3. 0 ut0订 rset reset out233 01 CUTELT auto,07 inst 图3.5时计数模块 3.1.6秒、分、时组合后的模块 把设汁的秒、分、时模块连接起来,再通过仿真验证,各模块间的进位是否正确 连接后的原理图如下 ::::: t··,::: 计: 1441.44 :”!” ”了:∵时 :::∵ 司 2:司 05 阳03可 面中+二:++1*丽+++ ++! 图3.6秒、分、时组合后原理图

...展开详情
试读 26P 基于VHDL的数字时钟设计
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
基于VHDL的数字时钟设计 36积分/C币 立即下载
1/26
基于VHDL的数字时钟设计第1页
基于VHDL的数字时钟设计第2页
基于VHDL的数字时钟设计第3页
基于VHDL的数字时钟设计第4页
基于VHDL的数字时钟设计第5页
基于VHDL的数字时钟设计第6页

试读结束, 可继续读2页

36积分/C币 立即下载