146 lines
2.9 KiB
Markdown
146 lines
2.9 KiB
Markdown
|
|
# VHDL 코드
|
|
|
|
HDL Coder 을 이용하여 VHDL 코드를 생성한다.
|
|
|
|
## 생성된 코드
|
|
|
|
|
|
```
|
|
|
|
library ieee;
|
|
use ieee.std_logic_1164.all;
|
|
use ieee.numeric_std.all;
|
|
|
|
entity led_blink is
|
|
port(
|
|
clk : in std_logic;
|
|
rst : in std_logic;
|
|
|
|
key0 : in std_logic;
|
|
key1 : in std_logic;
|
|
key2 : in std_logic;
|
|
key3 : in std_logic;
|
|
|
|
led : out std_logic
|
|
);
|
|
end entity;
|
|
|
|
architecture rtl of led_blink is
|
|
|
|
signal mode : unsigned(1 downto 0) := "00";
|
|
signal cnt : unsigned(31 downto 0) := (others=>'0');
|
|
signal period : unsigned(31 downto 0);
|
|
signal led_state : std_logic := '0';
|
|
|
|
begin
|
|
|
|
------------------------------------------------------------------
|
|
-- period 결정
|
|
------------------------------------------------------------------
|
|
process(mode)
|
|
begin
|
|
|
|
case mode is
|
|
|
|
when "00" =>
|
|
period <= to_unsigned(0,32);
|
|
|
|
when "01" =>
|
|
period <= to_unsigned(50000000,32);
|
|
|
|
when "10" =>
|
|
period <= to_unsigned(25000000,32);
|
|
|
|
when others =>
|
|
period <= to_unsigned(5000000,32);
|
|
|
|
end case;
|
|
|
|
end process;
|
|
|
|
------------------------------------------------------------------
|
|
-- 메인 상태기계
|
|
------------------------------------------------------------------
|
|
process(clk,rst)
|
|
begin
|
|
|
|
if rst='1' then
|
|
|
|
mode <= "00";
|
|
cnt <= (others=>'0');
|
|
led_state <= '0';
|
|
|
|
elsif rising_edge(clk) then
|
|
|
|
----------------------------------------------------------
|
|
-- mode 저장
|
|
----------------------------------------------------------
|
|
if key0='1' then
|
|
mode <= "00";
|
|
|
|
elsif key1='1' then
|
|
mode <= "01";
|
|
|
|
elsif key2='1' then
|
|
mode <= "10";
|
|
|
|
elsif key3='1' then
|
|
mode <= "11";
|
|
end if;
|
|
|
|
----------------------------------------------------------
|
|
-- LED 생성
|
|
----------------------------------------------------------
|
|
if mode = "00" then
|
|
|
|
cnt <= (others=>'0');
|
|
led_state <= '0';
|
|
|
|
else
|
|
|
|
if cnt >= period then
|
|
|
|
cnt <= (others=>'0');
|
|
|
|
led_state <= not led_state;
|
|
|
|
else
|
|
|
|
cnt <= cnt + 1;
|
|
|
|
end if;
|
|
|
|
end if;
|
|
|
|
end if;
|
|
|
|
end process;
|
|
|
|
led <= led_state;
|
|
|
|
end architecture;
|
|
|
|
```
|
|
|
|
## 핀배치
|
|
|
|
|
|
| 핀 번호 | 신호 |
|
|
|---------|------|
|
|
| PIN_T2 | clk |
|
|
| PIN_E4 | rst |
|
|
| PIN_A3 | key0 |
|
|
| PIN_A5 | key1 |
|
|
| PIN_A6 | key2 |
|
|
| PIN_A20 | key3 |
|
|
| PIN_B3 | led |
|
|
|
|
|
|
|
|
## 테스트 진행
|
|
|
|
해당 코드를 Quartus 를 이용하여 컴파일 하고, 동작 과정을 실습한다.
|
|
|
|
|