当前位置:文档之家› EDA课程设计--定时器

EDA课程设计--定时器

电子课程设计——定时器学院:专业:姓名:学号:指导老师:2009年12月目录一.设计任务与要求 (3)二.总体框图 (3)三.功能模块 (4)四.总体设计电路图 (12)五.心得体会 (14)定时器一、设计任务与要求1.设计任务与要求:通过设计,定时器可以整体清零;可以定时最高到99MIN;以秒速度递增至预定时间,以分速度递减至零。

2.设计目的(1)了解并掌握电路的一般设计方法,具备初步的独立设计能力。

(2)进一步熟悉常用电子模块的设计思路和功能,并掌握合理选用的原则。

(3)提高综合运用所学的理论知识。

独立分析和解决问题的能力。

(4)进一步熟悉电子仪器的正确使用方法。

二、总体框图图1设计思路:通过记数器控制中心输入秒信号,并输出两个四位的BCD 码,可分别来表示各位与十位,也可整体复位清零。

通过该记数器实现以秒速度控制计数部分二选一选择器分频器译码器数码管时钟信号递增至清零,该记数器以秒的速度递增至99来实现置位,而以分的速度递减至零以实现定时功能。

通过二选一选择器对个位和十位进行扫描输出,并将输出送到译码器,通过译码器对输入的四位BCD 码进行七段码编译,然后输出到数码管。

三、功能模块1、ctrl 记数模块 模块器件图:ctrlinstcn res clkcout low[3..0]high[3..0]图2模块逻辑功能:ctrl 计数模块是该定时器的核心部分.res 为复位端,用来清零,采用异步复位方式;cn 用于置位,高电平有效。

cout 端将在定时结束时产生高电平。

Low 和high 为四位BCD 码输出端口,可用于显示。

当cn 有效时,clk 脉冲上升沿到来,计数加1;当cn 为低电平时,置位结束,进入计时阶段,每60个时钟周期(相当于一分钟)发出一个脉冲,使输出记数减1,直到记时结束,命名cout 位为高电平为止。

该模块的源程序如下:LIBRARY ieee;USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all;ENTITY ctrl ISPORT(cn,res,clk : IN STD_LOGIC;cout : out STD_LOGIC;low,high: OUT std_logic_vector(3 downto 0));END ctrl;ARCHITECTURE rtl OF ctrl ISSIGNAL displow,disphigh : std_logic_vector(3 downto 0); BEGINa:PROCESS (clk,cn,res)variable cnt: integer range 0 to 59;BEGINIF (res = '0') THENdisplow<="0000";disphigh<="0000";cnt:=0;cout<='0';ELSIF (clk'EVENT AND clk = '1') THENIF cn = '1' THENcnt:=0;if displow<"1001" thendisplow<=displow+'1';ELSEdisplow<="0000";if disphigh<"1001" thendisphigh<=disphigh+'1'; elsedisphigh<="0000";end if;end if;ELSEif cnt<59 thencnt:=cnt+1;elsecnt:=0;if displow>"0000" thendisplow<=displow-'1'; --elsif displow=1 then -- displow<="0000";else displow<="1001";if disphigh>"0000" then disphigh<=disphigh-'1'; elsedisplow<="1001";end if;end if;end if;end if;end if;if disphigh="0000" and displow="0000" thencout<='1';else cout<='0';end if;end process;high<=disphigh;low<=displow;end rtl;该器件的仿真波形如图3图3 通过仿真波形可以看出低位和高位都可以从零变到9,可以说明输出可以从0变到99,且低位为9时,下一时刻将变为0,而高位增1,当高位变成9时会自动清零。

2、sel2二选一选择模块模块器件图:sel2instd1[3..0]d2[3..0]sel xz[7..0]q[3..0]图4模块逻辑功能:二选一选择模块主要是接受由ctrl 输出的四位BCD 码,并通过选择信号sel 进行选择输出。

其源程序如下:library ieee;use ieee.std_logic_1164.all; entity sel2 isport(d1,d2: in std_logic_vector(3 downto 0); sel: in std_logic;xz: out std_logic_vector(7 downto 0); q: out std_logic_vector(3 downto 0)); end sel2;architecture rtl of sel2 is beginq<=d1 when sel='0' else d2;xz<="11111110" when sel='0' else "11111101" ; End rtl;该器件的波形仿真如图5图5从波形仿真可以观察出:若选择信号端为低电平,输入d1为0001,则输出q为0001;反之,若选择信号为高电平,输入d2为0000,则输出q为0000.如此循环,选定信号端的高低电平,给选择器一个输入信号,即可得到相应的输出,这样就验证了此模块实现循环扫描功能的正确性。

3、译码器模块模块器件图:dispd[3..0]q[6..0]inst图6模块逻辑功能:译码器模块disp是对四位BCD码进行七段码译码,其输出Q0~Q6分别接数码管的a~g段,它的操作源程序如下:library ieee;use ieee.std_logic_1164.all;entity disp isport(d: in std_logic_vector(3 downto 0);q: out std_logic_vector(6 downto 0));end disp;architecture rtl of disp isbeginprocess(d)begincase d iswhen"0000"=>q<="0111111";when"0001"=>q<="0000110";when"0010"=>q<="1011011";when"0011"=>q<="1001111";when"0100"=>q<="1100110";when"0101"=>q<="1101101";when"0110"=>q<="1111101";when"0111"=>q<="0100111";when"1000"=>q<="1111111";when"1001"=>q<="1101111";when others=>null;end case;end process;end rtl;该器件的波形仿真如图7图7由波形可以看出:当输入的四位BCD码为0000时,译码器通过对七段码编译为0111111输出到数码管显示0,由此确定了该模块的正确性。

4、分频器模块模块器件图:div_clkclk_in div_outinst图8模块逻辑功能:把50MHZ的频率分为250HZ的频率,其源程序如下:LIBRARY ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;ENTITY div_clk ISPORT(clk_in : IN std_logic;div_out: OUT std_logic);END div_clk;ARCHITECTURE a OF div_clk ISSIGNAL fre_N : integer range 0 to 100000;SIGNAL clk_tmp: std_logic;BEGINdiv_out <= clk_tmp;process(clk_in)beginif falling_edge(clk_in) thenif fre_N >= 99999 thenfre_N <= 0;clk_tmp <= not clk_tmp;elsefre_N <= fre_N + 1;end if;end if;end process;END a;四、总体设计电路图1、总体框图:图9整体工作情况:该电路通过记数器控制中心输入秒信号,并输出两个四位的BCD 码,可分别来表示各位与十位,也可整体复位清零,通过二选一选择器对个位和十位进行扫描输出,并将输出送到译码器,通过译码器对输入的四位BCD码进行七段码编译,然后输出到数码管。

通过分频器来输入适当频率的时钟。

2、总体框图的波形仿真结果:图10观察波形:当cn有效时,clk脉冲上升沿到来计数加1,计数器输出四位BCD码,如,当res = '0',d[3..0]=0000,则输出q[6..0]=0111111,数码管显示0;当d[3..0]=0001,则输出q[6..0]=0000110,一直计数到当d[3..0]=1001,q[6..0]=1101111.随着时钟沿的到来,实现加法计数;相同,当cn为低电平时,置位结束,进入计时阶段,每60个时钟周期发出一个脉冲,使输出记数减1,实现减法计数。

相关主题