Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🧩 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)

📌 Overview

항목 내용
동작 클럭 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

✨ Features

  • 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 입력과 동일한 제어 경로 공유

🏗️ Architecture

UART+FIFO+SENSOR+Stopwatch_Watch Architecture

  • 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 양쪽에 정상 반영됨을 확인했습니다.

🛠️ Trouble Shooting

문제 원인 해결
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 조합 기준으로 상태 전이를 재정리

👥 Team & Role

이름 담당
최기훈 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 송신 경로 시뮬레이션 보완 필요성 확인

⚙️ Design Environment

  • Language: Verilog HDL
  • FPGA: Basys-3
  • EDA Tool: Vivado / Vivado Simulator
  • Sensor: HC-SR04, DHT11
  • Interface Tool: ComPortMaster

About

UART + FIFO + SR04/DHT11 센서 + Stopwatch/Watch 통합 FPGA 시스템 (Verilog, 팀 프로젝트)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages