134 lines
1.7 KiB
Markdown
134 lines
1.7 KiB
Markdown
|
|
# 기능정의
|
|
|
|
|
|
## 동작 정의
|
|
|
|
키를 입력하면 해당하는 동작을 하도록 한다.
|
|
|
|
---
|
|
|
|

|
|
|
|
---
|
|
|
|
| KEY 입력 | LED 동작 |
|
|
| --------- | -------- |
|
|
| KEY0 = 1 | LED OFF |
|
|
| KEY1 = 1 | 느리게 깜빡임 |
|
|
| KEY2 = 1 | 보통 속도 |
|
|
| KEY3 = 1 | 빠르게 깜빡임 |
|
|
| 아무 KEY 없음 | 이전 상태 유지 |
|
|
|
|
핵심은 LED 상태를 바로 결정하는 것이 아니라, 현재 동작 모드를 레지스터에 저장하는 것입니다.
|
|
|
|
|
|
```
|
|
|
|
KEY 입력
|
|
↓
|
|
동작 모드 저장 레지스터
|
|
↓
|
|
Blink 속도 선택
|
|
↓
|
|
Counter
|
|
↓
|
|
LED 출력
|
|
|
|
```
|
|
---
|
|
|
|

|
|
|
|
---
|
|
|
|
|
|
## 모드값 정의
|
|
|
|
모드에 따른 속도 정의
|
|
|
|
```
|
|
MODE_OFF = 0
|
|
MODE_SLOW = 1
|
|
MODE_NORMAL = 2
|
|
MODE_FAST = 3
|
|
|
|
```
|
|
|
|
## KEY 처리 논리
|
|
|
|
```
|
|
if KEY0 = 1
|
|
mode = OFF
|
|
elseif KEY1 = 1
|
|
mode = SLOW
|
|
elseif KEY2 = 1
|
|
mode = NORMAL
|
|
elseif KEY3 = 1
|
|
mode = FAST
|
|
else
|
|
mode = mode 유지
|
|
end
|
|
```
|
|
|
|
## Simulink 블록 구성
|
|
|
|
```
|
|
KEY0 ─┐
|
|
KEY1 ─┤
|
|
KEY2 ─┤→ Mode Select Logic → Unit Delay → mode
|
|
KEY3 ─┘
|
|
|
|
mode → Period Select → Counter → Compare → LED
|
|
|
|
```
|
|
|
|
## MTLAB BLOCK 작성
|
|
|
|
필요한 블록은 직접 MATLAB 코드 블록으로 작성하여 추가하도록 한다.
|
|
|
|
```
|
|
|
|
+---------+
|
|
| KEY[3:0]|
|
|
+---------+
|
|
|
|
|
v
|
|
+----------------+
|
|
| MATLAB Function|
|
|
| key_led_blink |
|
|
+----------------+
|
|
|
|
|
v
|
|
+---------+
|
|
| LED |
|
|
+---------+
|
|
|
|
```
|
|
|
|
## Simulink 입출력
|
|
|
|
```
|
|
입력:
|
|
key[4] : Boolean 또는 uint8 벡터
|
|
|
|
출력:
|
|
led : Boolean
|
|
```
|
|
|
|
|
|
## VHDL 코드 생성
|
|
|
|
```
|
|
entity key_led_blink is
|
|
port(
|
|
clk : in std_logic;
|
|
reset : in std_logic;
|
|
key : in std_logic_vector(3 downto 0);
|
|
led : out std_logic
|
|
);
|
|
end entity;
|
|
|
|
```
|
|
|