# 기능정의 ## 동작 정의 키를 입력하면 해당하는 동작을 하도록 한다. --- ![내 사진](imgs/key4.png) --- | KEY 입력 | LED 동작 | | --------- | -------- | | KEY0 = 1 | LED OFF | | KEY1 = 1 | 느리게 깜빡임 | | KEY2 = 1 | 보통 속도 | | KEY3 = 1 | 빠르게 깜빡임 | | 아무 KEY 없음 | 이전 상태 유지 | 핵심은 LED 상태를 바로 결정하는 것이 아니라, 현재 동작 모드를 레지스터에 저장하는 것입니다. ``` KEY 입력 ↓ 동작 모드 저장 레지스터 ↓ Blink 속도 선택 ↓ Counter ↓ LED 출력 ``` --- ![내 사진](imgs/ledonoff.png) --- ## 모드값 정의 모드에 따른 속도 정의 ``` 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; ```