목차
시계회로
BCD_TO_FDATA
멀티플렉서6X1
FND_SCAN
WATCH
1초 생성기
BCD_TO_FDATA
멀티플렉서6X1
FND_SCAN
WATCH
1초 생성기
본문내용
LAG <='1'; --카운터가 5가되면 FLAG가 1로 선언된다.
ELSE
FLAG <='0';
END IF;
END PROCESS;
END BEHA;
①COUNT 6
②COUNT10ENTITY COUNT10 IS --COUNT10 의 입출력을 정의해준다.
PORT (
CLK,RST: IN STD_LOGIC;
FLAG:OUT STD_LOGIC;
CNT:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));
END COUNT10;
ARCHITECTURE BEHA OF COUNT10 IS
BEGIN
PROCESS (CLK,RST)
BEGIN
IF RST='1' THEN --RST가 1이면 CNT는 0으로
CNT<="0000";
ELSE
IF CLK'EVENT AND CLK='0'THEN
IF CNT=9 THEN --CNT가 9일 경우 CNT는 다시 0으로 초기화
CNT <="0000";
ELSE
CNT <= CNT+1;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(CNT)
BEGIN
IF CNT=9 THEN
FLAG <='1';
ELSE
FLAG <='0';
END IF;
END PROCESS;
END BEHA;
③WATCH
●FND_SCANentity FND_SCAN is --FND_SCAN 의 입출력을 지정해준다.
port ( ck , rst :in std_logic ;
Scan_Line :out std_logic_vector( 5 downto 0));
end FND_SCAN;
architecture beha of FND_SCAN is
signal q : std_logic_vector(2 downto 0);
begin
count: process(ck,rst)
begin
if rst = '1' then
q <= "000";
else if ck'event and ck = '0' then
if q = 5 then
q <="000";
else
q <=q+1;
end if;
end if;
end if;
if q = 0 then -- q 가 0이면
Scan_Line <= "011111"; --011111 출력
elsif q = 1 then -- q 가 1이면
Scan_Line <= "101111"; --101111 출력
elsif q = 2 then -- q 가 2이면
Scan_Line <= "110111"; --110111 출력
elsif q =3 then -- q 가 3이면
Scan_Line <= "111011"; --111011 출력
elsif q =4 then -- q 가 4이면
Scan_Line <= "111101"; --111101 출력
else -- 그외에는
Scan_Line <= "111110"; --111110 출력
end if;
end process;
end beha;
●멀티플렉서6X1entity MUX_6x1 is --MUX_6X1 의 입출력을 정의해준다
port ( A,B,C,D,E,F :in std_logic_vector(3 downto 0);
Sel : in std_logic_vector( 5 downto 0);
y : out std_logic_vector (3 downto 0));
end MUX_6x1;
architecture beha of Mux_6x1 is
begin
process(a,b,c,d,e,f,sel)
begin
if sel ="011111" then --SEL 값이 011111 이면 출력값은 a
y <= a ;
elsif sel ="101111" then --SEL 값이 101111 이면 출력값은 b
y <= b ;
elsif sel ="110111" then --SEL 값이 110111 이면 출력값은 c
y <= c ;
elsif sel ="111011" then --SEL 값이 111011 이면 출력값은 d
y <= d ;
elsif sel ="111101" then -- SEL 값이 111101 이면 출력값은 e
y <= e ;
else
y <=f; --그외의 경우에 출력값은 f
end if;
end process;
end beha;
●BCD_TO_FDATA
entity BCD_to_Fdata is --BCD_to_Fdata 의 입출력을 설정
port ( Data_in : in std_logic_vector( 3 downto 0);
Data_out: out std_logic_vector ( 7 downto 0));
end BCD_to_Fdata;
architecture beha of BCD_to_Fdata is
begin
process(Data_in)
begin
if Data_in = 0 then -- 0 이 입력되면
Data_out <= "00111111" ; --00111111 출력
elsif Data_in = 1 then -- 1이 입력되면
Data_out <= "00000110" ; --00000110 출력
elsif Data_in = 2 then --2가 입력되면
Data_out <= "01011011" ; --01011011 출력
elsif Data_in = 3 then --3이 입력되면
Data_out <= "01001111" ; --01001111 출력
elsif Data_in = 4 then -- 4가 입력되면
Data_out <= "01100110" ; --01100110출력
elsif Data_in = 5 then -- 5가 입력되면
Data_out <= "01101101" ; --01101101출력
elsif Data_in = 6 then --6이 입력되면
Data_out <= "01111101" ; --01111101 출력
elsif Data_in = 7 then -- 7이 입력되면
Data_out <= "00000111" ; --00000111 출력
elsif Data_in = 8 then --8이 입력되면
Data_out <= "01111111" ; --01111111 출력
else -- 그 외의 경우는
Data_out <= "01100111" ; --01100111 출력
end if;
end process;
end beha;
●시계회로
ELSE
FLAG <='0';
END IF;
END PROCESS;
END BEHA;
①COUNT 6
②COUNT10ENTITY COUNT10 IS --COUNT10 의 입출력을 정의해준다.
PORT (
CLK,RST: IN STD_LOGIC;
FLAG:OUT STD_LOGIC;
CNT:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));
END COUNT10;
ARCHITECTURE BEHA OF COUNT10 IS
BEGIN
PROCESS (CLK,RST)
BEGIN
IF RST='1' THEN --RST가 1이면 CNT는 0으로
CNT<="0000";
ELSE
IF CLK'EVENT AND CLK='0'THEN
IF CNT=9 THEN --CNT가 9일 경우 CNT는 다시 0으로 초기화
CNT <="0000";
ELSE
CNT <= CNT+1;
END IF;
END IF;
END IF;
END PROCESS;
PROCESS(CNT)
BEGIN
IF CNT=9 THEN
FLAG <='1';
ELSE
FLAG <='0';
END IF;
END PROCESS;
END BEHA;
③WATCH
●FND_SCANentity FND_SCAN is --FND_SCAN 의 입출력을 지정해준다.
port ( ck , rst :in std_logic ;
Scan_Line :out std_logic_vector( 5 downto 0));
end FND_SCAN;
architecture beha of FND_SCAN is
signal q : std_logic_vector(2 downto 0);
begin
count: process(ck,rst)
begin
if rst = '1' then
q <= "000";
else if ck'event and ck = '0' then
if q = 5 then
q <="000";
else
q <=q+1;
end if;
end if;
end if;
if q = 0 then -- q 가 0이면
Scan_Line <= "011111"; --011111 출력
elsif q = 1 then -- q 가 1이면
Scan_Line <= "101111"; --101111 출력
elsif q = 2 then -- q 가 2이면
Scan_Line <= "110111"; --110111 출력
elsif q =3 then -- q 가 3이면
Scan_Line <= "111011"; --111011 출력
elsif q =4 then -- q 가 4이면
Scan_Line <= "111101"; --111101 출력
else -- 그외에는
Scan_Line <= "111110"; --111110 출력
end if;
end process;
end beha;
●멀티플렉서6X1entity MUX_6x1 is --MUX_6X1 의 입출력을 정의해준다
port ( A,B,C,D,E,F :in std_logic_vector(3 downto 0);
Sel : in std_logic_vector( 5 downto 0);
y : out std_logic_vector (3 downto 0));
end MUX_6x1;
architecture beha of Mux_6x1 is
begin
process(a,b,c,d,e,f,sel)
begin
if sel ="011111" then --SEL 값이 011111 이면 출력값은 a
y <= a ;
elsif sel ="101111" then --SEL 값이 101111 이면 출력값은 b
y <= b ;
elsif sel ="110111" then --SEL 값이 110111 이면 출력값은 c
y <= c ;
elsif sel ="111011" then --SEL 값이 111011 이면 출력값은 d
y <= d ;
elsif sel ="111101" then -- SEL 값이 111101 이면 출력값은 e
y <= e ;
else
y <=f; --그외의 경우에 출력값은 f
end if;
end process;
end beha;
●BCD_TO_FDATA
entity BCD_to_Fdata is --BCD_to_Fdata 의 입출력을 설정
port ( Data_in : in std_logic_vector( 3 downto 0);
Data_out: out std_logic_vector ( 7 downto 0));
end BCD_to_Fdata;
architecture beha of BCD_to_Fdata is
begin
process(Data_in)
begin
if Data_in = 0 then -- 0 이 입력되면
Data_out <= "00111111" ; --00111111 출력
elsif Data_in = 1 then -- 1이 입력되면
Data_out <= "00000110" ; --00000110 출력
elsif Data_in = 2 then --2가 입력되면
Data_out <= "01011011" ; --01011011 출력
elsif Data_in = 3 then --3이 입력되면
Data_out <= "01001111" ; --01001111 출력
elsif Data_in = 4 then -- 4가 입력되면
Data_out <= "01100110" ; --01100110출력
elsif Data_in = 5 then -- 5가 입력되면
Data_out <= "01101101" ; --01101101출력
elsif Data_in = 6 then --6이 입력되면
Data_out <= "01111101" ; --01111101 출력
elsif Data_in = 7 then -- 7이 입력되면
Data_out <= "00000111" ; --00000111 출력
elsif Data_in = 8 then --8이 입력되면
Data_out <= "01111111" ; --01111111 출력
else -- 그 외의 경우는
Data_out <= "01100111" ; --01100111 출력
end if;
end process;
end beha;
●시계회로