firstcommit
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
|
||||
# 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 를 이용하여 컴파일 하고, 동작 과정을 실습한다.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user