Design_of_Digital_Clock

Download Report

Transcript Design_of_Digital_Clock

Design of Digital Clock
(디지털 시계의 설계)
정보통신실험||| 3조
황용석
박주남
정진안
개요
1.
2.
3.
4.
Digital Clock 의 이론 및 구성
시계의 VHDL Source Program
Timing Simulation
동작과정 분석, 구현
1. Digital Clock 의 이론 및 구성

1초 발생기(Seconder) ; 1MHz분주기


컴포넌트: sep.vhd




클럭주기가 1MHz인 입력을 받아서 1000000번이
경과되면 1초가 되도록 설계한다.
초의 2자리 수를 각 자리수로 분리한다.
60진 Second_Count, 0~59….s_clk
60진 Minute_Count, 0~59….m_clk
24진 Hour_Count, 0~23…..h_clk
1. Digital Clock 의 이론 및 구성

Digital_Clock Block Diagram
시간
CL
function dis_seg
Second_gen
SECOND_COUNT
sec
s_clk
RST
s_s:SEP
one
SEG1
s1
s10
SEG2
ten
s_m:SEP
MINUTE_COUNT
m_clk
min
one
ten
HOUR_COUNT
h_clk
s_h:SEP
hour
one
ten
m1
SEG3
m10
SEG4
SEG5
h1
h10
o
분
SEG6
초
1.1 표시방법
• 시계의 표시는 총 7개의 7-SEGMENT로 구성 되어 있다.
2. 시계의 VHDL Source Program



1. sep.vhd: 초의 2자리 수를 각 자리수로
분리하는데 사용한다.
2. 1초 발생기 : Seconder.vhd
3. Digital Clock.vhd
2. sep.vhd: 초의 2자리 수를 각 자리수로 분리하는데 사용한다.



















LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SEP IS
PORT(T
:IN INTEGER RANGE 0 TO 59;
TEN , ONE :OUT INTEGER RANGE 0 TO 9);
END SEP;
ARCHITECTURE BEHAV OF SEP IS
BEGIN
PROCESS(T)
BEGIN
IF T <=9
THEN TEN <=0; ONE <=T;
ELSIF T <=19 THEN TEN <=1; ONE <=T-10;
ELSIF T <=29 THEN TEN <=2; ONE <=T-20;
ELSIF T <=39 THEN TEN <=3; ONE <=T-30;
ELSIF T <=49 THEN TEN <=4; ONE <=T-40;
ELSIF T <=59 THEN TEN <=5; ONE <=T-50;
ELSE
TEN <=0; ONE <=0;
END IF;
END PROCESS;
END BEHAV;
3. Sep.vhd 의 타이밍 시뮬레이션결과
10자리부분
일자리 부분
6bit = 0~63
2. 1초 발생기 : Seconder.vhd





















LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SECONDER IS
PORT(CL, RST : IN STD_LOGIC;
SEG5,SEG6 : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END SECONDER;
ARCHITECTURE MIXED OF SECONDER IS
FUNCTION DIS_SEG(CNT : INTEGER RANGE 0 TO 15) RETURN STD_LOGIC_VECTOR IS
VARIABLE SEG_DEC : STD_LOGIC_VECTOR (7 DOWNTO 0);
BEGIN
CASE CNT IS
when 0 => seg_dec := "11000000";
when 1 => seg_dec := "11111001";
when 2 => seg_dec := "10100100";
when 3 => seg_dec := "10110000";
when 4 => seg_dec := "10011001";
when 5 => seg_dec := "10010010";
when 6 => seg_dec := "10000010";
when 7 => seg_dec := "11011000";
when 8 => seg_dec := "10000000";
when 9 => seg_dec := "10011000";
when others => seg_dec := "11111111";
END CASE;
2. 1초 발생기 : Seconder.vhd






RETURN(SEG_DEC);
END DIS_SEG;
SIGNAL
SIGNAL
SIGNAL
SIGNAL
SEC
: INTEGER RANGE 0 TO 59;
S10,S1 : INTEGER RANGE 0 TO 9;
CNTS : INTEGER RANGE 0 TO 499999;
S_CLK : STD_LOGIC;

COMPONENT SEP
PORT(T
: IN INTEGER RANGE 0 TO 59;
TEN,ONE : OUT INTEGER RANGE 0 TO 9);
END COMPONENT;

BEGIN

SECOND_GEN : PROCESS(CL,RST)
BEGIN
IF (RST ='1')THEN
CNTS <=0; S_CLK <='0';
ELSIF (CL = '1' AND CL'EVENT) THEN
IF (CNTS>=499999) THEN
CNTS <=0; S_CLK <= NOT (S_CLK);
ELSE
CNTS <=CNTS +1;
END IF;
END IF;
END PROCESS SECOND_GEN;











2. 1초 발생기 : Seconder.vhd













SECOND_COUNT : PROCESS(S_CLK, RST)
BEGIN
IF (RST ='1')THEN
SEC <= 0;
ELSIF (S_CLK ='1' AND S_CLK'EVENT)THEN
IF (SEC >= 59)THEN
SEC <= 0;
ELSE
SEC <=SEC+1;
END IF;
END IF;
END PROCESS SECOND_COUNT;
S_S :SEP PORT MAP (SEC,S10,S1);
SEG5 <= DIS_SEG(S10);
SEG6 <= DIS_SEG(S1);
END MIXED;
3. Seconder의 타이밍 시뮬레이션결과
10자리 분 LED 1
LED 9
자리수 분리를 보여준다.
3. Digital Clock






















library ieee; use ieee.std_logic_1164.all;
entity digi_clock is
port(cl, rst : in std_logic;
seg1, seg2, seg3, seg4, seg5, seg6
: out std_logic_vector(7 downto 0));
end digi_clock;
architecture mixed of digi_clock is
function dis_seg(cnt : integer range 0 to 15) return std_logic_vector is
variable seg_dec : std_logic_vector(7 downto 0);
begin
case cnt is
when 0 => seg_dec := "11000000";
when 1 => seg_dec := "11111001";
when 2 => seg_dec := "10100100";
when 3 => seg_dec := "10110000";
when 4 => seg_dec := "10011001";
when 5 => seg_dec := "10010010";
when 6 => seg_dec := "10000010";
when 7 => seg_dec := "11011000";
when 8 => seg_dec := "10000000";
when 9 => seg_dec := "10011000";
when others => seg_dec := "11111111";
end case;
3. Digital Clock










return(seg_dec);
end dis_seg;
signal hour, min, sec
: integer range 0 to 59;
signal h10,h1, m10, m1, s10, s1 : integer range 0 to 9;
signal cnts
: integer range 0 to 499999;
signal s_clk, m_clk, h_clk : std_logic;
component sep
port(t
: in
integer range 0 to 59;
ten, one : out
integer range 0 to 9);
end component;


begin

second_gen : process(cl, rst)
begin
if (rst = '1') then
elsif (cl = '1' and cl'event)then
if (cnts >= 499999) then
else
end if;
end if;
end process second_gen;
end process second_gen;








cnts <= 0;
s_clk <= '0';
cnts <= 0;
s_clk <= not(s_clk);
cnts <= cnts + 1;
3. Digital Clock









second_count : process(s_clk, rst)
begin
if (rst = '1') then
elsif (s_clk = '1' and s_clk'event)then
if (sec = 59) then m_clk <= '1';
else
end if;
end if;
end process second_count;
sec <= 0;
sec <= 0;
sec <= sec+1; m_clk <= '0';










minute_count : process(m_clk, rst)
begin
if (rst = '1') then
elsif (m_clk = '1' and m_clk'event)then
if (min >= 59) then h_clk <='1';
else
end if;
end if;
end process minute_count;
min <= 0;
min <= 0;
min <= min + 1; h_clk <= '0';
3. Digital Clock



















hour_count : process(h_clk, rst)
begin
if (rst = '1') then
elsif (h_clk = '1' and h_clk'event) then
if (hour >= 23) then
else
end if;
end if;
end process hour_count;
s_s : sep port map(sec, s10, s1);
s_m : sep port map(min, m10, m1);
s_h : sep port map(hour, h10, h1);
seg1 <= dis_seg(h10);
seg2 <= dis_seg(h1);
seg3 <= dis_seg(m10);
seg4 <= dis_seg(m1);
seg5 <= dis_seg(s10);
seg6 <= dis_seg(s1);
end mixed;
hour <=0;
hour <=0;
hour <= hour + 1;
3. Digital Clock 타이밍 시뮬레이션 결과
59초가 되자 1분이된다.
3. Digital Clock 타이밍 시뮬레이션 결과
S_CLK 60카운터에서 분증가
4. 디지털 시계의 FPGA구현
VHDL SOURCE ,
PROGRAMING
Assign
=>Pin/Location/chip..
4. 디지털 시계의 FPGA구현
입력
핀번호
출력
CL
91
RST
41
SEG50~
SEG57
SEG60~
SEG67
핀번호
4. 디지털 시계의 FPGA구현
SEG5 : SEG6
10자리초: 1자리초
클럭에 따른 60진
SECOND_COUNT
보여준다.