🧩 UART + FIFO + SENSOR + Stopwatch/Watch (FPGA, Verilog)
FPGA(Basys-3) 기반 UART 통신 + FIFO 버퍼링 + SR04/DHT11 센서 + Stopwatch/Watch 를 하나의 시스템으로 통합한 프로젝트입니다. 물리 버튼과 UART 명령을 공통 제어 경로로 통합하고, 시간 데이터·센서 데이터를 FND와 UART 양쪽에 동시에 출력하도록 설계했습니다.
온디바이스 AI 시스템반도체설계 2기 프로젝트 (2026.05.01 ~ 2026.05.06)
항목
내용
동작 클럭
100MHz (System Clock)
UART 통신 속도
9600 bps (16x Oversampling)
UART 프레임
1 Start bit + 8 Data bit + 1 Stop bit
FIFO
RX FIFO(수신 버퍼) / TX FIFO(송신 버퍼), Circular Buffer 구조
시간 해상도
msec(0-99) · sec(0-59) · min(0-59) · hour(0-23)
SR04
Trig/Echo 기반 거리 측정, 3-digit 출력
DHT11
단일 데이터라인, 40bit 수신 + checksum 검증, 4-digit 출력
입력
Push Button(btnR/L/U/D), Switch(sw[3:0]), UART 명령(R/L/U/D/M/S)
출력
4-digit FND(Main/Sensor 공용), LED, UART ASCII 상태 출력
FPGA / Tool
Basys-3 / Vivado, Vivado Simulator, ComPortMaster
UART 명령 제어 : R/L/U/D/M/S 문자 명령을 ASCII Decoder가 버튼 입력과 동일한 제어 신호로 변환 → 보드 버튼 없이도 원격 제어 가능
UART 상태 송신 : 현재 모드(Watch/Stopwatch/SR04/DHT11)의 데이터를 ASCII Sender가 문자열로 변환해 UART TX로 송신, PC에서 실시간 확인 가능
FIFO 버퍼링 : RX/TX 각각 독립 FIFO(Circular Buffer)로 송수신 타이밍 차이에 의한 데이터 손실 방지
Stopwatch/Watch : RUN/STOP/CLEAR/Up-Down Count + 시각 자동 증가 및 시/분/초 설정, Record/View 기능
SR04 초음파 센서 : Trig pulse 생성 → Echo pulse width 측정(1us tick) → 거리 환산(distance = width/58)
DHT11 온습도 센서 : tri-state(inout) 제어 + synchronizer로 안정화, 40bit 프레임 수신 후 checksum 검증
공용 FND 출력 : 시간 데이터(Main FND)와 센서 데이터(Sensor FND)를 스위치 선택에 따라 하나의 FND 자원에서 Multiplexing 출력
Button Debounce : Shift Register + Edge Detection으로 채터링 제거, UART 입력과 동일한 제어 경로 공유
top_uart : UART 명령을 해석해 내부 제어 신호를 생성하고, 시스템 상태를 ASCII로 변환해 송신
top_fnd : Stopwatch/Watch, SR04, DHT11, FND 출력을 포함해 실제 데이터 생성/표시 담당
Control Unit FSM : 버튼과 UART 입력을 공통 경로로 받아 sw[3]/sw[1] 조합으로 Watch/Stopwatch/SR04/DHT11 모드 선택, 각 블록에 제어 신호 분배
FND 출력 선택 : sw[3] 기준으로 Main FND(시간)와 Sensor FND(센서) 중 하나만 최종 출력 포트로 전달
파일
설명
top_final.v
최상위 통합 모듈 (top_uart + top_fnd)
top_uart.v
UART 명령 해석 + 상태 ASCII 송신 상위 블록
top_fnd.v
Stopwatch/Watch + Sensor + FND 출력 상위 블록
uart.v
UART Rx/Tx + Baud Tick Generator
fifo.v
RX/TX FIFO (Circular Buffer)
ascii_decoder.v
UART ASCII 명령 → 내부 제어 신호 변환
ascii_sender.v
내부 상태 데이터 → ASCII 문자열 변환 및 송신
control_unit_fsm.v
전체 모드 선택 및 제어 신호 생성 (중앙 제어 FSM)
top_stopwatch_watch.v / stopwatch_datapath.v / watch_datapath.v
Stopwatch/Watch 시간 데이터 생성
sr04_controller.v / TOP_sr04_controller.v
SR04 초음파 센서 제어 (Trig/Echo, 거리 계산)
dht11_controller.v / dht11_top.v
DHT11 온습도 센서 제어 (40bit 수신, checksum)
sensor_fnd.v
SR04/DHT11 데이터 공용 FND 출력 (Mux + Leading zero 제거)
fnd_controller.v
Main(시간) FND 출력 컨트롤러
tick_gen_us.v
센서용 1us 단위 Tick 생성기
button_debounce.v
버튼 Debounce + Edge Detection
🔍 Simulation & Verification (요약)
항목
목표
결과
DHT11 Controller
40bit 수신 후 humidity/temperature/checksum 정상 산출
✅ 달성 (humidity=60, temperature=25, valid=1)
SR04 Controller
Trig 출력, Echo pulse width 기반 거리 계산
✅ 달성 (echo 1160us → distance=20)
top_fnd 모드 선택
sw 조합에 따라 Watch/Stopwatch/SR04/DHT11 FND 출력 선택
✅ 달성
Watch 설정 모드 전이
WATCH→HOUR→MIN→SEC 및 역방향 전이, blink 표시
✅ 달성
UART RX 명령 해석
R/L/U/D/M/S 문자 → 대응 제어 신호(uart_R 등) 생성
✅ 달성
UART TX 상태 송신
select에 따라 watch/stopwatch/SR04/DHT11 데이터를 ASCII로 송신
✅ 달성
FPGA(Basys-3) + ComPortMaster 환경에서도 DHT11(temp/humidity:24/51 등)과 SR04(DISTANCE:167 등) 데이터가 FND·UART 양쪽에 정상 반영됨을 확인했습니다.
문제
원인
해결
SR04 실보드에서 거리값이 갱신되지 않음
사용 중이던 초음파 센서 자체의 HW 불량
RTL/FSM은 정상 확인, 센서 모듈 교체로 해결 — simulation만으로는 판단 불가함을 확인
ASCII Decoder 출력이 한 사이클 늦게 나옴
FSM(순차 논리)으로 설계되어 즉시성이 떨어짐
조합 논리 디코더로 변경하여 입력 즉시 one-hot 출력되도록 수정
FIFO_TX에서 empty 상태 pop 오동작, 포인터 미복구
데이터 폭([31:0])과 FIFO 접근 범위([20:0])가 불일치
전송 완료 후 포인터 reset 조건 추가, 데이터 폭과 접근 범위 일치시킴
ASCII_SENDER에서 multiple driven net 발생
문자열 생성과 송신 제어가 한 블록에 혼재
문자열 생성부와 송신 제어부를 분리, 준비-송신 타이밍을 단계적으로 구분
DHT11 FPGA-센서 간 출력 충돌 가능성
단일 데이터선(inout)에서 FPGA와 센서가 동시에 구동
tri-state 구조로 출력 구간 분리
DHT11 응답 신호 비동기 입력 metastability 우려
system clock과 비동기 관계
2-stage synchronizer 추가로 FSM에는 동기화된 신호만 전달
Stopwatch/Watch + Sensor 통합 시 FSM 상태 전이 복잡도 증가
기존 FSM이 Stopwatch/Watch 중심 구조
SR04/DHT11 상태를 추가하고 sw 조합 기준으로 상태 전이를 재정리
이름
담당
최기훈
UART RX/TX 설계, FIFO 설계, ASCII Decoder/Sender 설계
최민영
DHT11 Sensor 설계, Watch/Stopwatch 설계, FND Controller 설계
조성재
SR04 Sensor 설계, UART/Sensor ASM·FSM 설계, 발표 자료 구조화
공동
Testbench 및 Simulation, 시스템 통합 및 디버깅
날짜
내용
05.01
DHT11 온습도 센서 인터페이스 모듈 RTL 설계, tri-state/synchronizer 적용, 단독 시뮬레이션
05.02
SR04·DHT11을 상위 control_unit_fsm에 통합, FPGA 보드 동작 확인
05.03
sensor_fnd 모듈 설계 (SR04/DHT11 공용 FND 출력, leading zero 제거)
05.04
sensor_fnd 단독 시뮬레이션으로 출력 경로 검증
05.05
top_fnd 통합 (Stopwatch/Watch + Sensor FND), UART 버튼 입력 연동
05.06
최종 발표, FIFO TX 송신 경로 시뮬레이션 보완 필요성 확인
Language: Verilog HDL
FPGA: Basys-3
EDA Tool: Vivado / Vivado Simulator
Sensor: HC-SR04, DHT11
Interface Tool: ComPortMaster