[Mission]
📌 Project Summary
Project name
: FPGA환경에서 Verilog 언어를 통한 Multi-function Fan 구현
Mission
i) 바람 세기 조절 기능
ii) 1시간, 3시간, 5시간 타이머 기능
iii) 3단 밝기 조절 가능한 LED 무드등
iv) 이외 추가 기능 최소 1가지 구현
프로젝트 기간 및 팀원
기간 : 3 Days
팀원 : 3명
[Result]
📌 Operation
📌 Function & Block Diagram
각 기능별로 총 6가지 Top module을 Instanciation하여 Fan_top을 구성하였다.
블루투스 또는 버튼을 통해 신호가 입력되고
입력된 신호는 DFF를 통해 바운싱 제어, Edge Detector를 통해 시스템 클락과 동기화되며
이후 신호들은 각각의 기능을 제어하는 데 사용된다.
먼저 0번 버튼은 FND-Select 버튼으로 FND로 출력되는 데이터를 선택할 수 있다.
선택 가능한 데이터는 온습도 데이터, 타이머의 잔여 시간이 있다.
다음으로 1번 버튼은 풍속 설정 버튼이다.
풍속은 미풍, 약풍, 강풍 총 3단계로 구성되어 있으며 각 단계에 맞춰 Yellow LED가 점등된다.
2번 버튼은 Auto mode select 버튼으로
토글 시 마다 Manual / Auto mode가 선택되고
Auto mode에서는 혀재 온습도에 따라 풍속이 자동으로 조절된다.
Auto mode 또한 해당 모드가 활성화되면 Green LED가 점등된다.
3번 버튼은 Mood Lamp stage를 컨트롤하는 버튼이며,
3단의 밝기 조절과 Party mode로 총 4단계 Stage로 구성된다.
여기서 Party mode가 활성화되면, RGB LED를 통해 사이키 미러볼 효과,
Party song이 함께 출력되어 Party에 신나는 분위기를 더할 수 있다.
📌 Improve
기능을 완성시키고 막상 Beatstream을 생성해보니,
Mood lamp와 Song module에서 Negative Slack이 어마어마하게 발생하였다.
PWM module 내의 나눗셈 연산이 1 clk 내에 끝나지 않는 것이 원인이었고
해당 원인을 해결하기 위해 약 1㎲ clock의 분주기를 추가하여 나눗셈 연산에 적용시켜주었고
해당 모듈에서 출력값의 Interval은 최소 200㎳이기 때문에 Performance에도 문제없이
Negative Slack을 제거할 수 있었다.
reg [14:0] pwm_temp;
always @(posedge clk_div[7] or posedge rstp) begin
if(rstp) begin
pwm_temp = 0;
end
else begin
pwm_temp = 625000 / pwm_freq;
end
end
📌 Wrap - up
구현한 기능 중에서 가장 시간이 많이 소요된 모듈은 Bluetooth module이다.
AVR이나 ARM 프로젝트에서는 UART 기능을 활성화시켜서 쓰면 됐지만,
FPGA에서는 UART 모듈을 직접 만들어서 써야 되다 보니, 공부해야할 부분도 많고
레지스터와 내부 신호를 하나하나 구현해줘야 하는 점이 참 까다로웠던 것 같다.
이번 프로젝트에서는 Receiver part만 사용한 Simplex Communication을 채택했지만,
다음 프로젝트부터는 Transmitter, I2C까지 추가하여 더욱 더 다채로운 기능들을
구현해보도록 할 것이다.
또한 발표 중 좋은 아이디어가 하나 있었는데,
사람이 가까이 있으면 자동으로 Fan이 동작하고 멀어지면 정지되는
Echo Friendly mode(초음파 센서 활용)라는 기능이 있었는데,
해당 아이디어를 Auto mode에 추가하면 좋을 것 같다는 생각이 들었다.
[Full Code]
프로젝트 관련 코드는 아래 링크 참조
Fin
'# Programming > - FPGA Project' 카테고리의 다른 글
[FPGA Project] CPU 구현 프로젝트(ALU, ACC, PC, MAR, MDR, ROM, Control Block, Data Bus) (2) | 2023.11.08 |
---|---|
[FPGA Project] Multi Function Clock(다기능 시계 구현 프로젝트) (0) | 2023.10.02 |