EDA课设-数字钟、音乐播放器和电梯源程序 仿真图

EDA课设-数字钟、音乐播放器和电梯源程序  仿真图
EDA课设-数字钟、音乐播放器和电梯源程序  仿真图

一数字钟设计程序以及波形

1 二选一数据选择器用于时间的矫正

--edaks_mux2.vhd

library ieee;

use ieee.std_logic_1164.all; entity edaks_mux2 is

port(sel: in std_logic;

a,b:in std_logic;

q: out std_logic);

end;

architecture bhv of edaks_mux2 is begin process(sel)

begin

case sel is

when '0'=>q<=a; when '1'=>q<=b; when others=>null; end case;

end process;

end bhv;

2 5分频电路用于分频产生所需时钟

--edaks_div5.vhd

library ieee;

use ieee.std_logic_1164.all;

entity edaks_div5 is

port(clk: in std_logic;

q: out std_logic);

end;

architecture bhv of edaks_div5 is

signal clk_up,clk_down:std_logic; signal count_up,count_down:integer:=0; begin

q<=clk_up and clk_down;

process(clk)

begin

if (clk'event and clk='1') then

if (count_up <4) then

count_up<=count_up + 1;

else count_up<=0;

end if;

end if;

end process;

process(clk)

begin

if(clk'event and clk='0') then

if (count_down <4) then

count_down<=count_down + 1;

else count_down<=0;

end if;

end if;

end process;

process(count_up)

begin

if (count_up<2) then

clk_up <='0';

else clk_up <='1';

end if;

end process;

process(count_down)

begin

if (count_down<2) then

clk_down<='0';

else clk_down<='1';

end if;

end process;

end bhv;

3 60进制计数器

--edaks_count60.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity edaks_count60 is

port(clk: in std_logic;

bcd10,bcd1:buffer std_logic_vector(3 downto 0);

preset:in std_logic;

co: out std_logic);

end;

architecture bhv of edaks_count60 is signal co_1: std_logic;

begin

process(clk,preset)

begin

if preset='0' then

bcd1<="0000";

else

if clk='1'and clk'event then

if bcd1="1001" then

bcd1<="0000";

else

bcd1<=bcd1+'1';

end if;

end if;

end if;

end process;

process(clk,preset,bcd1)

begin

if preset='0' then

bcd10<="0000";

co_1<='0';

else

if clk='1' and clk'event then

if bcd1="1000" and bcd10="0101" then

co_1<='1';

elsif bcd1="1001" and bcd10="0101" then

bcd10<="0000";

co_1<='0';

elsif bcd1="1001" then bcd10<=bcd10+'1';

co_1<='0';

end if;

end if;

end if;

end process;

co<=not co_1;

end bhv;

4 显示模块

--edaks_display

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity edaks_display is

port(din0:in std_logic_vector(3 downto 0);

din1:in std_logic_vector(3 downto 0);

din2:in std_logic_vector(3 downto 0);

din3:in std_logic_vector(3 downto 0);

din4:in std_logic_vector(3 downto 0);

din5:in std_logic_vector(3 downto 0);

clk:in std_logic;

LED_sa:out std_logic;

LED_sb:out std_logic;

LED_sc:out std_logic;

LED_A:out std_logic;

LED_B:out std_logic;

LED_C:out std_logic;

LED_D:out std_logic;

LED_E:out std_logic;

LED_F:out std_logic;

LED_G:out std_logic;

LED_DP:out std_logic);

end edaks_display;

architecture bhv of edaks_display is signal seg:std_logic_vector(6 downto 0); signal sel:std_logic_vector(2 downto 0); signal num:std_logic_vector(3 downto 0); signal s:std_logic_vector(2 downto 0); begin

led_sa<=sel(0);

led_sb<=sel(1);

led_sc<=sel(2);

led_a<=seg(0);

led_b<=seg(1);

led_c<=seg(2);

led_d<=seg(3);

led_e<=seg(4);

led_f<=seg(5);

led_g<=seg(6);

process(clk)

begin

if clk'event and clk='1'then

if s="101" then

s<="000";

else

s<=s+'1';

end if;

end if;

end process;

process(s,din0,din1,din2,din3,din4,din5) begin

if s="000" then

sel<="000";

num<=din0;

led_dp<='0'; elsif s="001" then sel<="001"; num<=din1;

led_dp<='0'; elsif s="010" then sel<="010"; num<=din2;

led_dp<='0'; elsif s="011" then sel<="011"; num<=din3;

led_dp<='0'; elsif s="100" then sel<="100"; num<=din4;

led_dp<='0'; elsif s="101" then sel<="101"; num<=din5;

led_dp<='0'; else

sel<="XXX";

num<="XXXX";

led_dp<='0';

end if;

end process;

seg<="0111111" when num=0 else "0000110" when num=1 else

"1011011" when num=2 else

"1001111" when num=3 else

"1100110" when num=4 else

"1101101" when num=5 else

"1111101" when num=6 else

"0000111" when num=7 else

"1111111" when num=8 else

"1101111" when num=9 else

"1110111" when num=10 else

"1111100" when num=11 else

"0111001" when num=12 else

"1011110" when num=13 else

"1111001" when num=14 else

"1110001" when num=15 else

"0000000";

end bhv;

5 24进制计数器

--edaks_count24.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity edaks_count24 is

port(clk: in std_logic;

bcd1:buffer std_logic_vector(3 downto 0);

bcd10:buffer std_logic_vector(3 downto 0));

end;

architecture bhv of edaks_count24 is

begin process(clk)

begin

if clk'event and clk='1' then if bcd10="0010" then

if bcd1="0011" then

bcd1<="0000";

else bcd1<=bcd1+'1'; end if;

elsif bcd1="1001" then bcd1<="0000";

else

bcd1<=bcd1+'1';

end if;

end if;

end process;

process(clk,bcd1)

begin

if clk='1' and clk'event then

if bcd1="0011" and bcd10="0010" then

bcd10<="0000";

elsif bcd1="1001" then

bcd10<=bcd10+'1';

end if;

end if;

end process;

end bhv;

6 12进制计数器

--edaks_count12.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity edaks_count12 is

port(clk : in std_logic;

bcd1,bcd10:buffer std_logic_vector(3 downto 0));

end;

architecture bhv of edaks_count12 is

begin

process(clk)

begin

if clk'event and clk='1' then

if bcd10="0001" then

if bcd1="0001" then

bcd1<="0000";

else bcd1<= bcd1+'1';

end if;

elsif bcd1="1001" then

bcd1<="0000";

else bcd1<=bcd1+'1';

end if;

end if;

end process;

process(clk,bcd1)

begin

if clk'event and clk='1' then

if bcd1="0001" and bcd10="0001" then bcd10<="0000";

elsif bcd1="1001" then

bcd10<=bcd10+'1';

end if;

end if;

end process;

end bhv;

7…十分频电路设计

--edaks_cnt10.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity edaks_cnt10 is

port( clk: in std_logic;

q: out std_logic);

end;

architecture bhv of edaks_cnt10 is signal tmp:std_logic_vector(3 downto 0); begin

process(clk)

begin

if clk'event and clk='1' then

if tmp="1001" then tmp<="0000";

else tmp<=tmp+'1';

end if;

if tmp<"0101" then q<='0';

else q<='1';

end if;

end if;

end process;

end bhv;

8 报时电路设计

--edaks_bshi.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity edaks_bshi is

port(clk1,clk2: in std_logic;

min1,min10,sin1,sin10:in

std_logic_vector(3 downto 0);

q:out std_logic);

end;

architecture bhv of edaks_bshi is

begin

process(clk1,clk2)

begin

if min1="1001" and min10="0101" then

if (sin10="0101") then

if (sin1="0101")or (sin10="0111") or (sin10="1001")then

q<= clk1;

end if;

end if;

elsif min1="0000" and min10="0000" then

if sin1="0000" and sin10="0000" then

q<=clk2;

end if;

end if;

end process;

end bhv;

9 12_24转换电路设计

--edaks_decoder.vhd

library ieee;

use ieee.std_logic_1164.all;

entity edaks_decoder is

port(a:in std_logic;

m12:in std_logic_vector(3 downto 0);

mm12:in std_logic_vector(3 downto 0);

s24:in std_logic_vector(3 downto 0);

ss24:in std_logic_vector(3 downto 0);

bcd1:buffer std_logic_vector(3 downto 0);

bcd10:buffer std_logic_vector(3 downto 0)); end;

architecture bhv of edaks_decoder is

begin

process(a)

begin

case a is

when '0' => bcd1<=mm12;bcd10<=m12;

when '1' => bcd1<=ss24;bcd10<=s24;

when others => bcd1<="XXXX";bcd10<="XXXX";

end case;

end process;

end bhv;

10 按键防抖电路设计:就是一个D触发器:

--edaks_fangd.vhd

library ieee;

use ieee.std_logic_1164.all; entity edaks_fangd is

port(clk:in std_logic;

d:in std_logic;

q:out std_logic);

end;

architecture bhv of edaks_fangd is signal q1:std_logic; begin

process(clk,q1)

begin

if clk'event and clk='1' then

q1<=d;

end if;

end process;

q<=q1;

end bhv;

11 数字钟设计顶层逻辑图:

二音乐播放电路设计

1 player_rom乐曲节拍及音符发生器模块

--edaks_music_rom.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity edaks_player_rom is

port(clk_1k:in std_logic;

xhuan:in std_logic;

soc:in std_logic;

gnext:in std_logic;

glast:in std_logic;

repeat:in std_logic;

seg: out std_logic_vector(3 downto 0);

index:out std_logic_vector(3 downto 0);

clk_4hz:buffer std_logic);

end; architecture bhv of edaks_player_rom is subtype word is integer range 0 to 15; type memory is array(0 to 804) of word;

signal rom:memory ;

signal clk_cnt:integer range 0 to 249; signal adr:integer range 0 to 804;

signal xuhao:integer range 0 to 2;

begin

divide:process(clk_1k)

begin

if (clk_1k'event and clk_1k='1') then

if clk_cnt=249 then

clk_cnt<=0;clk_4hz<='1';

else

clk_cnt<=clk_cnt+1;clk_4hz<='0';

end if;

end if;

end process;

cnt1:process(clk_4hz)

begin

if soc='0' then

adr<=adr;

xuhao<=xuhao;

elsif (clk_4hz'event and clk_4hz='1') then

if (glast='1' and gnext='0' and repeat='1') then

if adr<138 then adr<=156;xuhao<=1;

elsif (adr>156 and adr<283) then adr<=300;xuhao<=2;

elsif (adr>300 and adr<354) then adr<=0;xuhao<=0;

end if;

elsif(glast='0' and gnext='1' and repeat='1')then

if adr<138 then adr<=300;xuhao<=2;

elsif (adr>156 and adr<283) then adr<=0;xuhao<=0;

elsif (adr>300 and adr<354) then adr<=156;xuhao<=1;

end if;

elsif(glast='1' and gnext='1' and repeat='0') then

if adr<138 then adr<=0;xuhao<=0;

elsif (adr>156 and adr<283) then adr<=156;xuhao<=1;

elsif (adr>300 and adr<354) then adr<=300;xuhao<=2;

end if;

else

if xhuan='0' then

if adr=138 then adr<=0;xuhao<=0;

elsif adr=283 then adr<=156;xuhao<=1;

elsif adr=354 then adr<=300;xuhao<=2;

else adr<=adr+1;

end if;

elsif adr=354 then

adr<=0;

else

adr<=adr+1;

if adr<138 then xuhao<=0;

elsif adr>156 and adr<183 then xuhao<=1;

elsif adr>300 and adr<354 then xuhao<=2;

end if;

end if;

end if;

end if;

seg<=conv_std_logic_vector(xuhao,4);

end process;

index<=conv_std_logic_vector(rom(adr),4); rom(0)<=3;rom(1)<=3;rom(2)<=3;rom(3)<=3; --liang zhu

rom(4)<=5;rom(5)<=5;rom(6)<=5;rom(7)<=6; rom(8)<=8;rom(9)<=8;rom(10)<=8;rom(11)<= 9;

rom(12)<=6;rom(13)<=8;rom(14)<=5;rom(15) <=5;

rom(16)<=12;rom(17)<=12;rom(18)<=12;rom( 19)<=15;

rom(20)<=13;rom(21)<=12;rom(22)<=10;rom( 23)<=12;

rom(24)<=9;rom(25)<=9;rom(26)<=9;rom(27) <=9;

rom(28)<=9;rom(29)<=9;rom(30)<=9;rom(31) <=0;

rom(32)<=9;rom(33)<=9;rom(34)<=9;rom(35) <=10;

rom(36)<=7;rom(37)<=7;rom(38)<=6;rom(39) <=6;

rom(40)<=5;rom(41)<=5;rom(42)<=5;rom(43) <=6;

rom(44)<=8;rom(45)<=8;rom(46)<=9;rom(47) <=9;

rom(48)<=3;rom(49)<=3;rom(50)<=8;rom(51) <=8;

rom(52)<=6;rom(53)<=5;rom(54)<=6;rom(55) <=8;

rom(56)<=5;rom(57)<=5;rom(58)<=5;rom(59) <=5;

rom(60)<=5;rom(61)<=5;rom(62)<=5;rom(63) <=5;

rom(64)<=10;rom(65)<=10;rom(66)<=10;rom(

67)<=12;

rom(68)<=7;rom(69)<=7;rom(70)<=9;rom(71) <=9;

rom(72)<=6;rom(73)<=8;rom(74)<=5;rom(75) <=5;

rom(76)<=5;rom(77)<=5;rom(80)<=5;rom(79) <=5;

rom(80)<=5;rom(81)<=5;rom(82)<=5;rom(83) <=5;

rom(84)<=5;rom(85)<=6;rom(86)<=7;rom(87) <=9;

rom(88)<=6;rom(89)<=6;rom(90)<=6;rom(91) <=6;

rom(92)<=6;rom(93)<=6;rom(94)<=5;rom(95) <=6;

rom(96)<=8;rom(97)<=8;rom(98)<=8;rom(99) <=9;

rom(100)<=12;rom(101)<=12;rom(102)<=12;r om(103)<=10;

rom(104)<=9;rom(105)<=9;rom(106)<=10;ro m(107)<=9;

rom(108)<=8;rom(109)<=8;rom(110)<=6;rom( 111)<=5;

rom(112)<=3;rom(113)<=3;rom(114)<=3;rom( 115)<=3;

rom(116)<=8;rom(117)<=8;rom(118)<=8;rom( 119)<=8;

rom(120)<=6;rom(121)<=8;rom(122)<=6;rom( 123)<=5;

rom(124)<=3;rom(125)<=5;rom(126)<=6;rom( 127)<=8;

rom(128)<=5;rom(129)<=5;rom(130)<=5;rom( 131)<=5;

rom(132)<=5;rom(133)<=5;rom(134)<=5;rom( 135)<=5;

rom(136)<=0;rom(137)<=0;rom(138)<=0;

rom(156)<=6;rom(157)<=6;rom(158)<=6;rom( 159)<=7; --kaqiusa

rom(160)<=8;rom(161)<=8;rom(162)<=8;rom( 163)<=6;

rom(164)<=8;rom(165)<=8;rom(166)<=7;rom( 167)<=6; rom(168)<=7;rom(169)<=7;rom(170)<=3;rom( 171)<=0;

rom(172)<=7;rom(173)<=7;rom(174)<=8;rom( 175)<=8;

rom(176)<=9;rom(177)<=9;rom(178)<=9;rom( 179)<=14;

rom(180)<=9;rom(181)<=9;rom(182)<=8;rom( 183)<=7;

rom(184)<=6;rom(185)<=6;rom(186)<=6;rom( 187)<=6;

rom(188)<=10;rom(189)<=10;rom(190)<=13;r om(191)<=13;

rom(192)<=12;rom(193)<=13;rom(194)<=12;r om(195)<=12;

rom(196)<=11;rom(197)<=11;rom(198)<=10;r om(199)<=9;

rom(200)<=10;rom(201)<=10;rom(202)<=6;ro m(203)<=6;

rom(204)<=11;rom(205)<=11;rom(206)<=9;ro m(207)<=9;

rom(208)<=10;rom(209)<=10;rom(210)<=10;r om(211)<=8;

rom(212)<=7;rom(213)<=3;rom(214)<=8;rom( 215)<=7;

rom(216)<=6;rom(217)<=6;rom(218)<=6;rom( 219)<=6;

rom(220)<=6;rom(221)<=6;rom(222)<=6;rom( 223)<=7;

rom(224)<=8;rom(225)<=8;rom(226)<=8;rom( 227)<=6;

rom(228)<=8;rom(229)<=8;rom(230)<=7;rom( 231)<=6;

rom(232)<=7;rom(233)<=7;rom(234)<=3;rom( 235)<=0;

rom(236)<=7;rom(237)<=7;rom(238)<=8;rom( 239)<=8;

rom(240)<=9;rom(241)<=9;rom(242)<=9;rom( 243)<=14;

rom(244)<=9;rom(245)<=9;rom(246)<=8;rom( 247)<=7;

rom(248)<=6;rom(249)<=6;rom(250)<=6;rom( 251)<=6;

rom(252)<=10;rom(253)<=10;rom(254)<=13;r om(255)<=13;

rom(256)<=12;rom(257)<=13;rom(258)<=12;r om(259)<=12;

rom(260)<=11;rom(261)<=11;rom(262)<=10;r om(263)<=9;

rom(264)<=10;rom(265)<=10;rom(266)<=6;ro m(267)<=6;

rom(268)<=11;rom(269)<=11;rom(270)<=9;ro m(271)<=9;

rom(272)<=10;rom(273)<=10;rom(274)<=10;r om(275)<=8;

rom(276)<=7;rom(277)<=3;rom(278)<=8;rom( 279)<=7;

rom(280)<=6;rom(281)<=6;rom(282)<=6;rom( 283)<=6;

rom(300)<=5;rom(301)<=12;rom(302)<=11;ro m(303)<=10; ---tong hua

rom(304)<=10;rom(305)<=10;rom(306)<=11;r om(307)<=10;

rom(308)<=10;rom(309)<=10;rom(310)<=11;r om(311)<=10;

rom(312)<=11;rom(313)<=10;rom(314)<=9;ro m(315)<=0;

rom(316)<=8;rom(317)<=10;rom(318)<=12;ro m(319)<=13;

rom(320)<=13;rom(321)<=13;rom(322)<=12;r om(323)<=12;

rom(324)<=9;rom(325)<=9;rom(326)<=11;ro m(327)<=10;

rom(328)<=10;rom(329)<=10;rom(330)<=0;ro m(331)<=8;

rom(332)<=10;rom(333)<=12;rom(334)<=13;r om(335)<=13;

rom(336)<=13;rom(337)<=12;rom(338)<=12;r om(339)<=9;

rom(340)<=9;rom(341)<=11;rom(342)<=10;ro m(343)<=11;

rom(344)<=10;rom(345)<=9;rom(346)<=8;ro m(347)<=8;

rom(348)<=9;rom(349)<=10;rom(350)<=6;ro m(351)<=6;

rom(352)<=6;rom(353)<=8;rom(354)<=8; end bhv;

2 音符查表以及简谱产生电路G调产生VHDL程序

--edaks_tone_rom.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity edaks_tone_rom is

port(index:in std_logic_vector(3 downto 0 );

code: out std_logic_vector(3 downto 0);

high1:out std_logic_vector(3 downto 0 );

tone:out std_logic_vector(10 downto 0));

end;

architecture bhv of edaks_tone_rom is signal index1:integer range 0 to 15;

signal tone1:integer range 0 to 16#7ff#; signal code1:integer range 0 to 15;

begin

index1<=conv_integer(index);

tone<=conv_std_logic_vector(tone1,11); code<=conv_std_logic_vector(code1,4); search:process(index)

begin

case index1 is

when 0 => tone1<=2047;code1<=0;high1<="0000";

when 1 => tone1<=773;code1<=1;high1<="0000";

when 2 =>tone1<=912;code1<=2;high1<="0000";

when 3 => tone1<=1036;code1<=3;high1<="0000";

when 4 => tone1<=1092;code1<=4;high1<="0000";

when 5 => tone1<=1197;code1<=5;high1<="0000";

when 6 => tone1<=1290;code1<=6;high1<="0000";

when 7 => tone1<=1372;code1<=7;high1<="0000";

when 8 => tone1<=1410;code1<=1;high1<="0001";

when 9 => tone1<=1480;code1<=2;high1<="0001";

when 10 => tone1<=1542;code1<=3;high1<="0001";

when 11 => tone1<=1570;code1<=4;high1<="0001";

when 12 => tone1<=1622;code1<=5;high1<="0001";

when 13 => tone1<=1669;code1<=6;high1<="0001";

when 14 => tone1<=1710;code1<=7;high1<="0001";

when 15=> tone1<=1729;code1<=1;high1<="0010";

when others=>null;

end case;

end process;

end bhv

;

下面是C调对应的程序:

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity edaks_tone is

port(index:in std_logic_vector(3 downto 0);

code:out std_logic_vector(3 downto 0);

hig: out std_logic_vector(3 downto 0);

tone:out std_logic_vector(10 downto 0) );

end edaks_tone; architecture behav of edaks_tone is signal indexl:integer range 0 to 15;

signal tonel:integer range 0 to 16#7ff#; signal codel:integer range 0 to 15;

begin

indexl<=conv_integer(index);

tone<=conv_std_logic_vector(tonel,11);

code<=conv_std_logic_vector(codel,4); search:process(index)

begin

case indexl is

when 0 => tonel

<=2047;

codel<=0;hig <="0000";

when 1 => tonel <=137; codel<=1;hig <="0000";

when 2 => tonel <=346; codel<=2;hig <="0000";

when 3 => tonel <=531; codel<=3;hig <="0000";

when 4 => tonel <=616; codel<=4;hig <="0000";

when 5 => tonel <=772; codel<=5;hig <="0000";

when 6 => tonel <=912; codel<=6;hig <="0000";

when 7 => tonel <=1036; codel<=7;hig <="0000";

when 8 => tonel <=1092; codel<=1;hig <="0001";

when 9 => tonel <=1197; codel<=2;hig <="0001";

when 10 => tonel <=1290; codel<=3;hig <="0001";

when 11 => tonel <=1332; codel<=4;hig <="0001";

when 12 => tonel <=1410; codel<=5;hig <="0001";

when 13 => tonel <=1480; codel<=6;hig <="0001";

when 14 => tonel <=1542 ; codel<=7;hig <="0001";

when 15 => tonel <=1570; codel<=1;hig <="0010";

when others => null;

end case;

end process;

end behav;

3 发音模块的VHDL程序以及波形

--edaks_speaker.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

entity edaks_speaker is

port(clk: in std_logic;

tone:in std_logic_vector(10 downto 0 );

soc:in std_logic;

spks:out std_logic);

end;

architecture bhv of edaks_speaker is

signal preclk:std_logic;

signal fullspks:std_logic;

signal tone1:integer range 0 to 16#7ff#; begin

tone1<=conv_integer(tone); divideclk:process(clk)

variable count4 :integer range 0 to 15;

begin

preclk<='0';

if count4>=5 then

preclk<='1';

count4:=0;

elsif clk'event and clk='1' then

count4 := count4+1;

end if;

end process;

genspks:process(preclk,tone1)

variable count11:integer range 0 to 16#7ff#;

begin

if preclk'event and preclk='1' then

if count11=16#7ff# then

count11:=tone1;

fullspks<='1';

else count11:=count11+1;

fullspks<='0';

end if;

end if;

end process;

delayspks:process(fullspks,soc)

variable count2:std_logic;

begin

if soc='0' then

spks<='0';

elsif fullspks'event and fullspks='1' then

count2:=not count2;

if count2='1' then

spks<='1'; else spks<='0'; end if;

end if;

end process; end bhv

;

4 时钟信号产生电路:由设计的10分频以及5分频电路产生

该电路输出1Khz以及5Mhz的信号分别用于相应电路

5 音调切换电路就是一个数据选择器其描述如下所示:

--edaks_mux.vhd

library ieee;

use ieee.std_logic_1164.all;

entity edaks_mux is

port( change:in std_logic;

code1:in std_logic_vector(3 downto 0);

code2:in std_logic_vector(3 downto 0);

high1:in std_logic_vector(3 downto 0);

high2:in std_logic_vector(3 downto 0);

tone1:in std_logic_vector(10 downto 0);

tone2:in std_logic_vector(10 downto 0);

code:out std_logic_vector(3 downto 0);

hi:out std_logic_vector(3 downto 0);

tone:out std_logic_vector(10 downto 0));

end;

architecture bhv of edaks_mux is

begin

process(change)

begin

case change is

when '0'=> code<=code1;hi<=high1;tone<=tone1;

when '1'=> code<=code2;hi<=high2;tone<=tone2;

when others=>null;

end case;

end process;

end bhv;

5 乐曲播放器总电量以及仿真波形

三电梯设计

eda课程设计报告多功能数字钟设计大学论文

湖北大学物电学院EDA课程设计报告(论文) 题目:多功能数字钟设计 专业班级: 14微电子科学与工程 姓名:黄山 时间:2016年12月20日 指导教师:万美琳卢仕 完成日期:2015年12月20日

多功能数字钟设计任务书 1.设计目的与要求 了解多功能数字钟的工作原理,加深利用EDA技术实现数字系统的理解 2.设计内容 1,能正常走时,时分秒各占2个数码管,时分秒之间用小时个位和分钟个位所在数码管的小数点隔开; 2,能用按键调时调分; 3,能整点报时,到达整点时,蜂鸣器响一秒; 4,拓展功能:秒表,闹钟,闹钟可调 3.编写设计报告 写出设计的全过程,附上有关资料和图纸,有心得体会。 4.答辩 在规定时间内,完成叙述并回答问题。

目录(四号仿宋_GB2312加粗居中) (空一行) 1 引言 (1) 2 总体设计方案 (1) 2.1 设计思路 (1) 2.2总体设计框图 (2) 3设计原理分析 (3) 3.1分频器 (4) 3.2计时器和时间调节 (4) 3.3秒表模块 (5) 3.4状态机模块 (6) 3.5数码管显示模块 (7) 3.6顶层模块 (8) 3.7管脚绑定和顶层原理图 (9) 4 总结与体会 (11)

多功能电子表 摘要:本EDA课程主要利用QuartusII软件Verilog语言的基本运用设计一个多功能数字钟,进行试验设计和软件仿真调试,分别实现时分秒计时,闹钟闹铃,时分手动较时,时分秒清零,时间保持和整点报时等多种基本功能 关键词:Verilog语言,多功能数字钟,数码管显示; 1 引言 QuartusII是Altera公司的综合性PLD/FPGA开发软件,支持原理图、VHDL、VerilogHDL 以及AHDL(Altera Hardware Description Language)等多种设计输入形式,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程,解决了传统硬件电路连线麻烦,出错率高且不易修改,很难控制成本的缺点。利用软件电路设计连线方便,修改容易;电路结构清楚,功能一目了然 2 总体设计方案 2.1 设计思路 根据系统设计的要求,系统设计采用自顶层向下的设计方法,由时钟分频部分,计时部分,按键调时部分,数码管显示部分,蜂鸣器四部分组成。这些模块在顶层原理图中相互连接作用 3 设计原理分析 3.1 分频器 分频模块:将20Mhz晶振分频为1hz,100hz,1000hz分别用于计数模块,秒表模块,状态机模块 module oclk(CLK,oclk,rst,clk_10,clk_100); input CLK,rst; output oclk,clk_10,clk_100;

基于eda的数字钟程序设计

一、课题要求: (1)技术要求:1、掌握多功能数字钟的工作原理。 2、应用EDA技术,VHDL语言编写程序。 3、层次化设计,设计原理框图。 4,、硬件设计及排版。 (2)功能要求:1、基本功能:能进行正常的时、分、秒计时功能,分别 由6个数码管显示24小时、60分钟、60秒的计数器 显示。 2、扩展功能:(1)能够利用按键实现“校时”“校分” “清零”功能。 (2)能利用扬声器做整点报时,整点前 五秒短声,整点长声。 (3)本人工作:负责软件部分,,编写各部分模块的VHDL程序,并且锁定 引脚,将程序下载到芯片中。 二、设计方案: 原理框图: 数字钟原理框图 一共有11个小模块:分频,片选,按键,小时,分,秒,显示模块,七段显示译码器,报时,扬声,36译码器。 左边第一个是时钟信号输入端,50Mhz到分频模块。第二个为清零按键,第三个为校分按键,第四个为校时按键。 右边第一个为七段显示译码器输出端,第二个为扬声器输出端,第三个为6个数码管输出端。

中间模块为数字钟的核心,有计时,报时,校时功能。 三、单元模块设计 1、分频模块 该模块是将时钟脉冲50Mhz分频到1000、500和1,分别给报时模块和及时模块。

2、秒模块 仿真图

该模块为60进制计数器,有分频模块得到的1hz进行计时,计时输出为秒的数值,在计时到59时进位1到co端。当按下s3时,秒清零。 3.、分模块 仿真图

该模块也为60进制计数器,计时输出为分的数值。在EN信号有效且时钟来时,计数器加1、在s2按下时,EN使能端有效,实现校分功能。 4、时模块 仿真图 该模块为24进制计数器,计时输出为小时的数值,在EN信号到来时,计数器

EDA综合课程设计_数字时钟设计一、题_001

EDA综合课程设计-数字时钟设计 一、题目要求 1、功能 1)具有时、分、秒计数显示功能,以24小时循环计时。 2)时钟计数显示时有LED灯的花样显示。 3)具有调节小时、分钟、秒及清零的功能。 4)具有整点报时功能。 2、总体方框图 3、性能指标及功能设计 1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。 2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的键7和键4进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。 3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。可以根据我们自己任意时间的复位。 4)蜂鸣器在整点时有报时信号产生,蜂鸣器报警。产生“滴答.滴答”的报警声音。 5)LED灯在时钟显示时有花样显示信号产生。即根据进位情况,LED不停的闪烁,从而产生“花样”信号。

根据总体方框图及各部分分配的功能可知,本系统可以由秒计数器、分钟计数器、小时计数器、整点报时、分的调整以及小时的调整和一个顶层文件构成。采用自顶向下的设计方法,子模块利用VHDL语言设计,顶层文件用原理图的设计方法。显示:小时采用24进制,而分钟均是采用6进制和10进制的组合。 数字时钟系统顶层原理图

多功能数字时钟的课程设计报告 1、本设计可以实现的功能 1)具有时、分、秒计数显示功能,以24小时循环计时。 2)时钟计数显示时有LED灯的花样显示。 3)具有调节小时、分钟及清零的功能。 4)具有整点报时功能。 2、初步设计的总体方框图 3、性能指标及功能设计 1)时钟计数:完成时、分、秒的正确计时并且显示所计的数字;对秒、分——60进制计数,即从0到59循环计数,时钟——24进制计数,即从0到23循环计数,并且在数码管上显示数值。 2)时间设置:手动调节分钟、小时,可以对所设计的时钟任意调时间,这样使数字钟真正具有使用功能。我们可以通过实验板上的K1-K7进行任意的调整,因为我们用的时钟信号均是1HZ的,所以每LED灯变化一次就来一个脉冲,即计数一次。 3)清零功能:reset为复位键,低电平时实现清零功能,高电平时正常计数。

基于EDA技术的数字时钟设计

电子系统课程设计任务书 设计题目:基于EDA技术的数字时钟设计 设计目的:课程设计是一种复杂的学习实践过程。设计过程采用系统设计的方法,先分析任务,得到系统设计的要求,然后进行总体设计,划分子系统模块,然后进行详细设计,编写各个功能子系统VHDL代码并进行功能仿真,最后进行整个系统总装并仿真。 设计内容:设计一个采用0.5英寸LED数码管显示的数字时钟系统,工作电源5V,它采用24小时制,具有“时”、“分”、“秒”显示,并且可以校正时间显示。 设计要求: 1.由石英晶体多谐振荡器20MHz和分频器产生1Hz标准秒脉冲;(说 明:EDA试验箱中晶振频率20MHz,经试验箱内一系列二分频可将频率降低,但无法直接产生1Hz信号,需要大家根据实际情况编制分频器得到1Hz信号); 2.秒电路、分电路均为60进制计数,时电路为24进制计数; 3.数码管采用动态扫描方式; 4.能动手校时,校时模块功能可以自由发挥。比如可用两个按钮实 现校时,A按钮控制调整项目,B按钮调整数字,B按钮还可以根据按下时间长短实现慢调、快调功能。也可以用三个按钮实现增减两个方向的手动校时。校时用按钮开关不能超过4个; 5.扩展内容:1)进入校时状态后,被调整数字以2Hz闪烁; 2)24/12小时可调,处于12小时制时,要有AM/PM

显示; 3)所有开关加入防抖设计; 4)加入检测外部环境亮度功能,夜间自动降低数码管显示亮度; 5)加入整点报时电路; 6)增加秒表功能; 7)增加报闹功能。 6.以上电路功能除外部环境亮度检测电路外均由VHDL代码实现层次式设计,顶层电路可以采用EDA电路图。 设计成果: 1.课程设计说明书,要求内容完整,图表完备,条理清楚,字迹工 整,程序完整有相应的注解,仿真波形设计合理有必要的分析,引用资料要注明出处。 2.顶层电路原理图,各层电路VHDL代码及仿真波形。

eda数字电子钟

唐山学院 《EDA技术》课程设计 题目数字电子钟设计 系(部) 智能与信息工程学院 班级13电本1班 姓名马建雨 学号4130208144 指导教师郭耀华、王默琦、戴彦 2016年7 月4日至7月8 日共1 周 2016年7 月8日

目录 1 引言 (1) 2 EDA技术简介 (2) 2.1 EDA技术的基本特征 (2) 2.2 硬件描述语言 (2) 3 QuartusII软件简介 (4) 3.1软件介绍 (4) 3.2 QuartusII工作环境介绍 (5) 4 课程设计说明 (8) 4.1设计内容 (8) 4.2设计要求 (8) 4.3设计目的 (8) 4.4设计思路 (8) 4.5 设计具体方案及实现 (9) 4.5.1秒、分、时计时模块 (9) 4.5.2 动态显示模块 (11) 4.5.3 整点报时模块 (13) 4.5.4 校时模块 (14) 4.6 总程序 (16) 5 总结 (17) 参考文献 (18)

1 引言 随着大规模集成电路技术和计算机技术的不断发展,在涉及通信、国防、航天、医学、工业自动化、计算机应用、仪器仪表等领域的电子系统设计工作中,EDA技术的含量正以惊人的速度上升;电子类的高新技术项目的开发也愈益依赖于EDA技术的应用。即使是普通的电子技术的开发,EDA技术常常使一些原来的技术瓶颈得以轻松突破,从而使产品的开发周期大为缩短、、性能价格比大幅提高。不言而喻,EDA技术将迅速成为电子设计领域中的极其重要的组成部分。 EDA技术的设计语言为VHDL(硬件描述语言),实验载体为可编程器件CPLD或者FPGA,进行元件模拟和仿真的目标器件为ASIC/SOC芯片。它是一种自动化设计电子产品的过程。在电子设计仿真的领域里,EDA技术的出现具有非常重要的现实意义。EDA源自于计算机辅助设计、制造、测试以及辅助工程。利用EDA工具,设计者们可以从概念、算法、协议等方面来设计电子系统。值得一提的是,在整个电子系统的设计过程中,设计电路、分析性能、布置IC 和PCB版图等步骤都可以在电脑上自动完成。 时钟是我们日常生活中必备的生活用品之一。而数字时钟的出现更是给人们的生产生活带来了极大的便利。钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、定时启闭电路、定时开关烘箱、通断动力设备,甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,研究数字钟及扩大其应用,有着非常现实的意义。 EDA技术为数字类产品提供了一个非常简便实用的开发平台。随着EDA技术的快速发展,数字时钟的应用越来越广泛,并且它在功能外观方面也有了很大的改善和提高。本文就是基于EDA技术的基础知识,利用Quartus2软件再现一个具有传统时钟功能和自动报时功能的数字时钟。 数字钟采用EDA技术设计,利用硬件描述语言VHDL按模块化方式设计、编程及时序仿真等。该数字钟能实现时、分、秒计数的显示功能,且以24小时循环计时,具有清零的功能,且能够对计时系统的小时、分钟进行调整,具有整点报时功能。整个系统包括传统数字时钟所拥有的计时模块、校时模块、译码显示模块以及整点报时模块。整个系统使用方便,功能齐全,精度高。

EDA课程设计——多功能数字钟

哈尔滨工业大学(威海) 电子学课程设计报告带有整点报时的数字钟设计与制作 姓名: 蒋栋栋 班级: 0802503 学号: 080250331 指导教师: 井岩

目录 一、课程设计的性质、目的和任务 (3) 二、课程设计基本要求 (3) 三、设计课题要求 (3) 四、课程设计所需要仪器 (4) 五、设计步骤 (4) 1、整体设计框图 (4) 2、各个模块的设计与仿真 (4) 2.1分频模块 (4) 2.2计数器模块 (6) 2.3控制模块 (10) 2.4数码管分配 (13) 2.5显示模块 (14) 2.6报时模块 (16) 六、调试中遇到的问题及解决的方法 (18) 七、心得体会 (18)

一、课程设计的性质、目的和任务 创新精神和实践能力二者之中,实践能力是基础和根本。这是由于创新基于实践、源于实践,实践出真知,实践检验真理。实践活动是创新的源泉,也是人才成长的必由之路。 通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。 二、课程设计基本要求 掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。 三、设计课题要求 (1)构造一个24小时制的数字钟。要求能显示时、分、秒。 (2)要求时、分、秒能各自独立的进行调整。 (3)能利用喇叭作整点报时。从59分50秒时开始报时,每隔一秒报时一秒,到达00分00秒时,整点报时。整点报时声的频率应与其它的报时声频有明显区别。 #设计提示(仅供参考): (1)对频率输入的考虑 数字钟内所需的时钟频率有:基准时钟应为周期一秒的标准信号。报时频率可选用1KHz和2KHz左右(两种频率相差八度音,即频率相差一倍)。另外,为防止按键反跳、抖动,微动开关输入应采用寄存器输入形式,其时钟应为几十赫兹。 (2)计时部分计数器设计的考虑 分、秒计数器均为模60计数器。 小时计数为模24计数器,同理可建一个24进制计数器的模块。 (3)校时设计的考虑 数字钟校准有3个控制键:时校准、分校准和秒校准。 微动开关不工作,计数器正常工作。按下微动开关后,计数器以8Hz频率连续计数(若只按一下,则计数器增加一位),可调用元件库中的逻辑门建一个控制按键的模块,即建立开关去抖动电路(见书70页)。 (4)报时设计的考虑

EDA课设数字钟设计

课程设计报告 课程名称数字系统与逻辑设计 课题名称数字钟设计 专业通信工程 班级 学号 姓名 指导教师乔汇东胡瑛谭小兰 2013年7月7日

湖南工程学院课程设计任务书 课程名称数字系统与逻辑设计课题数字钟设计 专业班级通信工程1101班 学生姓名 学号 指导老师 审批乔汇东 任务书下达日期2013 年6月29日 任务完成日期2013 年7月7日

《数字系统与逻辑设计》课程设计任务书一、设计目的 全面熟悉、掌握VHDL语言基本知识,掌握利用VHDL语言对常用的的 组合逻辑电路和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试 程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养 使用设计综合电路的能力,养成提供文档资料的习惯和规范编程的思想。 二、设计要求 1、设计正确,方案合理。 2、程序精炼,结构清晰。 3、设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单 及程序框图。 4、上机演示。 5、有详细的文档。文档中包括设计思路、设计仿真程序、仿真结果及相应 的分析与结论。 三、进度安排 第十九周星期一:课题讲解,查阅资料 星期二:总体设计,详细设计 星期三:编程,上机调试、修改程序 星期四:上机调试、完善程序 星期五:答辩 星期六-星期天:撰写课程设计报告 附: 课程设计报告装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现;四、系统调试与仿真;五、总结与体会;六、附件(所有程序的原代码,要求对程序写出必要的注释);七、评分表。

EDA数字时钟课程设计报告

EDA技术及应用课程设计说明书 2013 届电子信息工程专业班级 题目数字时钟 学号 姓名 指导教师 二О一五年月日

一、基本原理 一个完整的时钟应由三部分组成:秒脉冲发生电路、计数显示部分和时钟调整部分。 秒脉冲发生电路原理:一个时钟的准确与否主要取决于秒脉冲的精确度。为了保证计时准确我们对系统时钟48MHz进行了48000000分频,从而得到1Hz的秒脉冲。 计数显示部分原理:显示部分是用数码管LED实现的,这里使用的是共阳极的数码管如图所示8个数码管,其中左边两个数码管用来显示时的个位和十位、中间的显示分的个位和十位、最右边两个显示分的个位和十位。 时钟调整部分原理:校时电路里定义key[0]、key[1]和k2、k3分别用于控制时钟的计时开始、清零和调整功能中的时的加1、分的加1处理,从而完成对现在的时间调整。本实验电路校时电路在此完成了暂停、清零、时调整和分调整。

二、硬件设计 芯片图: 图1 数字时钟原理图 程序的调试工作都是在电脑上完成的,通过程序的输入、原理图的建立、管脚分配、编译、仿真、再下载到芯片进行运行。

电路中采用共阳极连接的七段数码管,通过程序的控制扫描驱动来显示时钟的时-分-秒。

程序中的按键设定为K1暂停、K2清零、K3调时、K4调分元件清单: 三、数字时钟的Verilog实现 管脚的分配: 程序: module clock(clk,s1,,s2,key,dig,seg); //模块名clock input clk,s1,s2; //输入时钟 input[1:0]key; //输入按键 output[7:0]dig; //数码管选择输出引脚

fpga数字钟课程设计报告

f p g a数字钟课程设计报告 Prepared on 24 November 2020

课程设计报告 设计题目:基于FPGA的数字钟设计 班级:电子信息工程1301 姓名:王一丁 指导教师:李世平 设计时间:2016年1月 摘要 EDA(Electronic Design Automation)电子设计自动化,是以大规模可编程器件为设计载体,以硬件描述语言为系统逻辑描述的主要表达方式,通过相关的软件,自动完成软件方式设计得电子系统到硬件系统,最终形成集成电子系统或专用集成芯片。本次课程设计利用Quartus II 为设计软件,VHDL为硬件描述语言,结合所学知识设计一个多功能时钟,具有显示年、月、日、时、分、秒显示,计时,整点报时,设定时间等功能。利用硬件描述语言VHDL 对设计系统的各个子模块进行逻辑描述,采用模块化的思想完成顶层模块的设计,通过软件编译、逻辑化简、逻辑综合优化、逻辑仿真、最终完成本次课程设计的任务。 关键词:EDA VHDL语言数字钟 目录 摘要 1 课程设计目的 2 课程设计内容及要求

设计任务 设计要求 3 VHDL程序设计 方案论证 系统结构框图 设计思路与方法 状态控制模块 时分秒模块 年月日模块 显示模块 扬声器与闹钟模块 RTL整体电路 4 系统仿真与分析 5 课程设计总结,包括.收获、体会和建议 6 参考文献 1 课程设计目的 (1)通过设计数字钟熟练掌握EDA软件(QUARTUS II)的使用方法,熟练进行设计、编译,为以后实际工程问题打下设计基础。 (2)熟悉VHDL 硬件描述语言,提升分析、寻找和排除电子设计中常见故障的能力。 (3)通过课程设计,锻炼书写有理论根据的、实事求是的、文理通顺的课程设计报告。

eda,verilog数字钟设计报告

数字钟 一、任务解析 用Verilog硬件描述语言设计数字钟,实现: 1、具有时、分、秒计数显示功能,以二十四小时循环计时。 2、具有调节小时,分钟的功能,调整时对应的数字闪烁。 3、具有整点报时及闹铃时间可调的功能。 4、数字钟具有四种模式:正常显示、时间调整、闹铃时间调整、秒表。 二、方案论证 没有闹铃功能 三、重难点解析 选择模式:module beii(clr,selin_key,beii_out); input clr,selin_key; output [1:0]beii_out; wire [1:0]beii_out; reg [1:0]selout_key; always@(negedge clr or posedge selin_key) begin if(!clr) selout_key=0; else begin if(selout_key==2) selout_key=0; else selout_key=selout_key+1;end end assign beii_out=selout_key; endmodule

头文件中: module clk_top(clr,clk,upkey,downkey,sel,a,b,c,d,e,f,g,p,clr_key,selin_key); clr:清零clk:50M时钟 upkey:向上调downkey:向下调 clr_key:恢复初始状态selin_key:模式选择 四、硬件资源分配 60进制module mycnt60(clr,clk,upkey,downkey,selout,q,c); input clk,clr,upkey,downkey;//upkey为加按键 input [1:0] selout; output[7:0] q;//60进制输出 output c;//进位溢出位 reg c; reg[7:0] q; wire new_clk1,ckb,ckc,ckd,cko; assign new_clk1=clk|((!selout[0]&selout[1])&(upkey|downkey)); LCELL AA(new_clk1,ckb);//信号延迟 LCELL BB(ckb,ckc); LCELL CC(ckc,ckd); LCELL DD(ckd,cko); initial c=0; always @(posedge cko or negedge clr )begin if(!clr) q=8'h00; else begin if(selout==2) begin if(upkey)begin if(q==8'h59) q=8'h00; else if(q==8'h?9) q=q+4'h7; else q=q+1; end else if(downkey)begin if(q==8'h00) q=8'h59; else if(q==8'h?0) q=q-4'h7; else q=q-1; end

推荐-基于多功能数字钟的课程设计报告 精品

EDA技术课程设计 多功能数字钟 学院:城市学院 专业、班级: 姓名: 指导老师: 20XX年12月

目录 1、设计任务与要求 (2) 2、总体框图 (2) 3、选择器件 (2) 4、功能模块 (3) (1)时钟记数模块 (3) (2)整点报时驱动信号产生模块 (6) (3)八段共阴扫描数码管的片选驱动信号输出模块 (7) (4)驱动八段字形译码输出模块 (8) (5)高3位数和低4位数并置输出模块 (9) 5、总体设计电路图 (10) (1)仿真图 (10) (2)电路图 (10) 6、设计心得体会 (11)

一、设计任务与要求 1、具有时、分、秒记数显示功能,以24小时循环计时。 2、要求数字钟具有清零、调节小时、分钟功能。 3、具有整点报时,整点报时的同时输出喇叭有音乐响起。 二、总体框图 多功能数字钟总体框图如下图所示。它由时钟记数模块(包括hour、minute、second 三个小模块)、驱动8位八段共阴扫描数码管的片选驱动信号输出模块(seltime)、驱动八段字形译码输出模块(deled)、整点报时驱动信号产生模块(alart)。 系统总体框图 三、选择器件 网络线若干、共阴八段数码管4个、蜂鸣器、hour(24进制记数器)、minute(60进制记数器)、second(60进制记数器)、alert(整点报时驱动信号产生模块)、 seltime(驱动4位八段共阴扫描数码管的片选 驱动信号输出模块)、deled(驱动八段字形译 码输出模块)。

四、功能模块 多功能数字钟中的时钟记数模块、驱动8位八段共阴扫描数码管的片选驱动信号输出模块、驱动八段字形译码输出模块、整点报时驱动信号产生模块。 (1) 时钟记数模块: <1.1>该模块的功能是:在时钟信号(CLK)的作用下可以生成波形;在清零信号(RESET)作用下,即可清零。 VHDL程序如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity hour24 is port( clk: in std_logic; reset:instd_logic; qh:BUFFER STD_LOGIC_VECTOR(2 DOWNTO 0); ql:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); end hour24; architecture behav of hour24 is begin process(reset,clk) begin if reset='1' then qh<="000"; ql<="0000"; elsif(clk'event and clk='1') then if (qh<2) then if (ql=9) then ql<="0000"; qh<=qh + 1; else ql<=ql+1; end if; else if (ql=3) then ql<="0000"; qh<="000"; else ql<=ql+1; end if; end if; end if; end process; end behav; 仿真波形如下:

EDA数字钟设计

EDA数字钟设计报告 姓名: xxx 学号:xxxxxxx 专业:电子与通信工程 日期:2014-11-7 江苏科技大学电信院 2014-11-7

1 引言 数字钟通过数字电路技术实现时、分、秒计时,与机械钟相比具有更高的准确性和直观性,具有更长的使用寿命,已得到广泛的使用。数字钟的设计方法有许多种,例如可用中小规模集成电路组成电子钟,也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟,还可以利用单片机来实现电子钟等等。这些方法都各有其特点,本次电子线路课程设计是在vhdl基础上设计并制作一个可以调控的数字钟。 1.1 实验目的与要求 1.1.1 实验目的 (1)掌握GW48PK2++实验系统的基本用法以及vhdl语言的使用: (2)巩固元件例化、元件调用的基本方法,以及数码管、按键扫描的相关 知识。 1.1.2实验要求 (1)采用元件例化、元件调用实现整体设计; (2)利用按键进行调时; (3)能在实验箱进行仿真验证。 2 系统设计 2.1 原理图设计 数字钟原理图,如图1 图1 数字钟原理图 如图1所示,该系统主要包含六个模块,分为分频器、计数以及显示模块三 大部分,另有按键进行时间控制。

2.2 各模块设计 2.2.1分频器 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity div is port(clk0:in std_logic; clk_1Hz,clk_1kHz:out std_logic); end entity; architecture one of div is signal q1Hz:integer range 0 to 10000000-1 ; signal q1kHz:integer range 0 to 10000-1 ; begin process(clk0) begin if clk0'event and clk0='1'then if q1Hz<5000000-1 then clk_1Hz<='0';q1Hz<=q1Hz+1; elsif q1Hz=10000000-1 then q1Hz<=0; else clk_1Hz<='1';q1Hz<=q1Hz+1; end if; if q1kHz<5000-1 then clk_1kHz<='0';q1kHz<=q1kHz+1; elsif q1kHz=10000-1 then q1kHz<=0; else clk_1kHz<='1';q1kHz<=q1kHz+1; end if; end if; end process; end; 该模块将10MHz的时钟进行分频,产生1S和1mS的信号传递给计数与显示

EDA课程设计 多功能数字钟设计程序清单 数字系统设计与verilog HDL(第四版) 王金明

EDA课程设计 多功能数字钟设计程序清单 数字系统设计与verilog HDL(第四版) 王金明 /*引脚锁定基于DE2一70,芯片为EP2C70F896,信号定义如下: Clk50m: 50MHz 时钟输, mode: 模式选择0:计时模式1:设置闹钟模式 mcheck: 手动调整时间 turn: 手动调整时间,在时、分之间选择 change: 对选中的数据调整 led hourl,led_hour0,led_minul,led_minu0,led_secl,led sec0; alert: 闹钟输出 ld_alert: 是否设置了闹钟 ld_hour,id_min,ld_sec:在调整时,指示选中了时,分还是秒*/ moduleclock(clk50m,mode,turn,change,mreset,led_hour1,led_hour0,led_minu1,led _minu0,led_sec1,led_sec0, alert,ld_alert,ld_check,ld_hour,ld_min,ld_sec); input clk50m; input mode; // key0键 input turn; //keyl键 input change; // key2 键 input mreset; //switch0复位,低电平有效 output alert; //gpioO->IOAO output ld_alert; //ledgO-led19 output ld_check; //ledgl-led22 output ld_hour; //ledr3-led13 output ld_min; //ledr9-led9

EDA实验数字计时器设计

数字计时器设计 一、实验目的 1、掌握常见集成电路的工作原理和使用方法。 2、学会单元电路的设计调试方法。 3、掌握QuartusII软件的基本使用方法及会用其设计调试数字计时器。 二、实验设计要求 1、能进行正常的时、分、秒计时功能; 2、分别由六个数码管显示时分秒的计时; 3、系统有保持、清零、校时、校分功能; 4、使时钟具有整点报时功能(当时钟计到59'53"时开始计时,分别在 59'53",59'55",59'57"报时频率500Hz,在59'59"报时频率1000Hz); 5、闹表设定功能。 三、整体电路的工作原理 原理框图: 脉冲产生电路将硬件上的48MHz脉冲依次分频使其产生1Hz脉冲,输入计时器电路,计时器电路时分秒对应的模24、模60、模60计数器采用同步触发方式实现00:00:00~ 23:59:59计时。

校时校分电路通过校时、校分开关的切换来改变计时器电路时分秒对应的模24、模60、模60计数器CLK 端输入脉冲及使能端的设置实现。 保持电路通过使计时器三个计数器使能端置0的方法来实现。 清零电路通过使计时器三个计数器清零端置0的方法来实现。 整点报时电路通过脉冲产生电路的分频及若干门电路组合实现。 闹表: 先设计一48选24的译码选择电路对计时器电路与闹钟定时电路的输出进行选择,界面显示切换通过设置一开关对译码选择电路的控制实现。 定时定分电路设计原理与上校时校分电路一致。 闹铃的设置是先通过一比较电路判断此时计时器电路的时分与闹钟定时电路是否一致来判断是否响铃,铃声是通过数据选择器及若干门电路来对响铃频率的设定。 最后设置一闹铃开关来实现闹表的开关。 四、各子模块设计原理及仿真波形 1、脉冲发生电路(分频电路) 原理图见附表1 用到了四分频、六分频、八分频和一千分频电路,下面以六分频和一千分频为列说明: A 、六分频电路: 它是应用了三个JK 触发器构成的T 触发器,[1][2][1][0]t q q q =+ [2][2][1][0][1]t q q q q =+ [2][1][0]q q q 依次循环输出:000 001 010 101 110 111;从而输出[2]q 就是将clk 六 分频,且脉宽仍为50% 仿真波形:

EDA课程设计--带有整点报时的数字钟设计与制作

电子学课程设计报告带有整点报时的数字钟设计与制作

目录 一、课程设计的性质、目的和任务 (3) 二、课程设计基本要求 (3) 三、设计课题要求 (3) 四、课程设计所需要仪器 (4) 五、设计步骤 (4) 1、整体设计框图 (4) 2、各个模块的设计与仿真 (4) 2.1分频模块 (4) 2.2计数器模块 (6) 2.3控制模块 (10) 2.4数码管分配 (13) 2.5显示模块 (14) 2.6报时模块 (16) 六、调试中遇到的问题及解决的方法 (18) 七、心得体会 (18)

一、课程设计的性质、目的和任务 创新精神和实践能力二者之中,实践能力是基础和根本。这是由于创新基于实践、源于实践,实践出真知,实践检验真理。实践活动是创新的源泉,也是人才成长的必由之路。 通过课程设计的锻炼,要求学生掌握电路的一般设计方法,具备初步的独立设计能力,提高综合运用所学的理论知识独立分析和解决问题的能力,培养学生的创新精神。 二、课程设计基本要求 掌握现代大规模集成数字逻辑电路的应用设计方法,进一步掌握电子仪器的正确使用方法,以及掌握利用计算机进行电子设计自动化(EDA)的基本方法。 三、设计课题要求 (1)构造一个24小时制的数字钟。要求能显示时、分、秒。 (2)要求时、分、秒能各自独立的进行调整。 (3)能利用喇叭作整点报时。从59分50秒时开始报时,每隔一秒报时一秒,到达00分00秒时,整点报时。整点报时声的频率应与其它的报时声频有明显区别。 #设计提示(仅供参考): (1)对频率输入的考虑 数字钟内所需的时钟频率有:基准时钟应为周期一秒的标准信号。报时频率可选用1KHz和2KHz左右(两种频率相差八度音,即频率相差一倍)。另外,为防止按键反跳、抖动,微动开关输入应采用寄存器输入形式,其时钟应为几十赫兹。 (2)计时部分计数器设计的考虑 分、秒计数器均为模60计数器。 小时计数为模24计数器,同理可建一个24进制计数器的模块。 (3)校时设计的考虑 数字钟校准有3个控制键:时校准、分校准和秒校准。 微动开关不工作,计数器正常工作。按下微动开关后,计数器以8Hz频率连续计数(若只按一下,则计数器增加一位),可调用元件库中的逻辑门建一个控制按键的模块,即建立开关去抖动电路(见书70页)。 (4)报时设计的考虑

eda数字钟程序及波形仿真图

部件一:60进制程序 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CLOCK60 IS PORT( CLK: IN STD_LOGIC; ---时钟信号NRESET: IN STD_LOGIC; ---复位端 LOAD: IN STD_LOGIC; ---置数端 D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); ---输入端 CI:IN STD_LOGIC; ---始能端 CO: OUT STD_LOGIC; ---进位脉冲 QH: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); QL: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0)); END CLOCK60; ARCHITECTURE ARTCLOCK60 OF CLOCK60 IS BEGIN CO<='1'WHEN(QH="0101" AND QL="1001" AND CI='1')ELSE'0';----进位输出PROCESS(CLK,NRESET) BEGIN IF(NRESET='0')THEN -----异步复位 QH<="0000"; QL<="0000"; ELSIF(CLK'EVENT AND CLK='1')THEN------同步置数 IF(LOAD='1')THEN QH<=D(7 DOWNTO 4); QL<=D(3 DOWNTO 0); ELSIF(CI='1')THEN IF(QL=9)THEN QL<="0000"; IF(QH=5)THEN QH<="0000"; ELSE QH<=QH+1; END IF; ELSE QL<=QL+1; END IF; END IF; END IF; END PROCESS; END ARTCLOCK60; 60进制波形图如下:

EDA课程设计报告(电子钟VHDL 设计)

EDA课程设计报告(电子钟VHDL 设计) 作者:dang168 时间:2008-10-05 E D A课程设计报告 -----电子钟VHDL 设计 一设计要求 设计一个电子钟,要求可以显示时、分、秒,用户可以设置时间. 二.实验目的 1. 掌握多位计数器相连的设计方法。 2. 掌握十六进制,二十四进制,六十进制计数器的设计方法。 3. 掌握CPLD技术的层次化设计方法。 4. 了解软件的元件管理含义以及模块元件之间的连接概念。 5. 掌握电子电路一般的设计方法,并了解电子产品的研制开发过程,基本掌握电子电路安装和调试的方法。 6. 培养独立分析问题,解决问题的能力。 三.硬件要求 1.8位8段扫描共阴极数码显示管。 2. 三个按键开关(清零,调小时,调分钟)。 四.设计原理 数字钟是一个将“时”“分”“秒”显示于人的视觉器官的计时装置。它的计时周期为24小时;显示满刻度为23时59分59秒,另外具备校时功能和报时功能。因此,一个基本的数字钟电路主要由“时”“分”“秒”计数器校时电路组成。将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累加60秒发送一个“分脉冲”信号,该信号将被送到“时计数

器”。“时计数器”采用24进制计数器,可实现对一天24小时的累计。译码显示电路将“时”“分”“秒”计数器的输出状态六段显示译码器译码。通过六位LED七段显示器显示出来。校时电路器是用来 对“时”“分”“秒”显示数字进行校时调整的。 在同一CPLD芯片口集成如下电路模块: 1.电子钟计数采用层次化设计,将设计任务分成若干个模块。规定每一模块的功能和各模块之间的接口。 (1)second(秒) 60进制BCD码计数 (2)minute(分) 60进制BCD码计数 (3)hour (时) 24进制BCD码计数 (4)clock top 顶层设计 同时整个计数器有清零,调时,调分功能。 2.端口引脚名称  输入 clk,reset,setmin,sethour  输出 second—daout,minute-daout,hour-daout 五.设计原理图 逻辑功能图: 输入:CLK—时钟脉冲,RESET—复位信号,SETMIN—分加1信号,SETHOUR—秒加1信号 输出:SECOND_DAOUT—秒输出,MINUTE_DAOUT—分输出,

EDA数字钟设计

摘要:应用VHDL语言编程,进行了多功能数字钟的设计,并在MAX PLUSⅡ环境下通过了编译、仿真、调试。 关键词:VHDL;EDA;数字钟;仿真图 0.引言 随着科学技术的迅猛发展,电子工业界经历了巨大的飞跃。集成电路的设计正朝着速度快、性能高、容量大、体积小和微功耗的方向发展。基于这种情况,可编程逻辑器件的出现和发展大大改变了传统的系统设计方法。可编程逻辑器件和相应的设计技术体现在三个主要方面:一是可编程逻辑器件的芯片技术;二是适用于可逻辑编程器件的硬件编程技术,三是可编程逻辑器件设计的EDA开发工具,它主要用来进行可编程逻辑器件应用的具体实现。在本实验中采用了集成度较高的FPGA 可编程逻辑器件, 选用了VHDL硬件描述语言和MAX + p lusⅡ开发软件。VHDL硬件描述语言在电子设计自动化( EDA)中扮演着重要的角色。由于采用了具有多层次描述系统硬件功能的能力的“自顶向下”( Top - Down)和基于库(L ibrary - Based)的全新设计方法,它使设计师们摆脱了大量的辅助设计工作,而把精力集中于创造性的方案与概念构思上,用新的思路来发掘硬件设备的潜力,从而极大地提高了设计效率,缩短 了产品的研制周期。MAX + p lusⅡ是集成了编辑器、仿真工具、检查/分析工具和优化/综合工具的这些所有开发工具的一种集成的开发环境,通过该开发环境能够很方便的检验设计的仿真结果以及建立起与可编程逻辑器件的管脚之间对应的关系。 1. EDA简介 20世纪90年代,国际上电子和计算机技术较先进的国家,一直在积极探索新的电子电路设计方法,并在设计方法、工具等方面进行了彻底的变革,取得了巨大成功。在电子技术设计领域,可编程逻辑器件(如CPLD、FPGA)的应用,已得到广泛的普及,这些器件为数字系统的设计带来了极大的灵活性。这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了传统的数字系统设计方法、设计过程和设计观念,促进了EDA技术的迅速发展。 EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL 完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。 这些器件可以通过软件编程而对其硬件结构和工作方式进行重构,从而使得硬件的设计可以如同软件设计那样方便快捷。这一切极大地改变了

相关文档
最新文档