Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 

Repository files navigation

🔁 UART Loopback (FPGA, Verilog)

FPGA(Basys-3) 상에서 UART(Universal Asynchronous Receiver/Transmitter) 송수신 구조를 구현하고, Loopback(수신 데이터를 그대로 재전송) 방식을 통해 송수신 기능의 정확성을 검증한 프로젝트입니다. Tx/Rx를 FSM 기반으로 분리 설계하고, 16배 Oversampling으로 수신 안정성을 확보했습니다.

온디바이스 AI 시스템반도체설계 2기 프로젝트 (2026.04.21 ~ 2026.04.27)

📌 Overview

항목 내용
동작 주파수 100MHz (System Clock)
Baud Rate 9600 bps
Oversampling 16x (b_tick 기준)
데이터 프레임 1 Start bit + 8 Data bits + 1 Stop bit
전송 방식 Serial, LSB-first
FPGA / Tool Basys-3 / Vivado, Vivado Simulator, ComPortMaster

✨ Features

  • UART Transmitter / Receiver: FSM 기반(IDLE → START → DATA → STOP) 상태 제어로 송수신 동작 정의
  • Baud Tick Generator: 100MHz 시스템 클럭을 분주해 9600bps 기준 Tick(b_tick) 생성, Tx/Rx가 공통으로 사용
  • 16x Oversampling: 비트 중앙(mid-point)에서 샘플링하여 노이즈·타이밍 오차에 대한 수신 안정성 확보
  • Loopback 구조: rx_donetx_start에 직접 연결해 수신 완료 즉시 동일 데이터를 자동 재전송
  • Shift Register 기반 직렬-병렬 변환: LSB-first 방식으로 데이터 조립/분해

🏗️ Architecture

UART Loopback Architecture

  • UART Receiver (Rx): rx 신호의 High→Low 전이로 Start bit 감지 → b_tick 기반 카운터로 mid-point 샘플링 → 8bit 수신 완료 시 rx_done(1-cycle pulse) 발생
  • UART Transmitter (Tx): tx_start 신호로 동작 시작 → Start bit(0) → 8bit 데이터(LSB-first, shift register) → Stop bit(1) 순서로 출력, 전송 중 tx_busy High 유지
  • Baud Tick Generator: 시스템 클럭을 분주하여 Tx/Rx가 공유하는 공통 타이밍 기준(b_tick, 9600bps × 16) 생성
  • Loopback: rx_done → tx_start 직접 연결로 별도 제어 로직 없이 수신 즉시 재전송되는 구조

📁 구성 파일

파일 설명
uart.v UART Top module — uart_tx, uart_rx, baud_tick_gen 통합
uart_loopback.v Loopback 구조 최상위 모듈 (rx_done → tx_start 연결)

🔍 Simulation & Verification (요약)

항목 목표 결과
UART Loopback 동작 입력 데이터(8'h30)와 동일한 값이 출력됨 ✅ 달성
Tx FSM 상태 전이 IDLE → START → DATA → STOP → IDLE 순서 전이 ✅ 달성
Tx 데이터 전송 순서 LSB-first(bit0→bit7) 방식으로 출력 ✅ 달성
tx_busy 신호 START~STOP 구간 동안 High 유지, 종료 후 Low ✅ 달성
b_tick_cnt_reg / bit_cnt_reg 015 / 07 카운트 후 정상 초기화·전이 ✅ 달성
Rx FSM 상태 전이 IDLE → START → DATA → STOP → IDLE 순서 전이 ✅ 달성
Rx 데이터 샘플링 b_tick 기준 각 bit 구간에서 안정적 샘플링 ✅ 달성
rx_done 신호 수신 완료 시 1-cycle pulse 발생 ✅ 달성

FPGA(Basys-3) + PC 시리얼 통신(ComPortMaster) 환경에서도 PC에서 입력한 문자열이 동일하게 되돌아오는 것을 확인했으며, 반복 실험에서도 데이터 손실·순서 오류 없이 안정적으로 동작함을 검증했습니다.

🛠️ Trouble Shooting

문제 원인 해결
DATA bit 전송 순서가 직관적으로 이해 안 됨 LSB-first 전송 방식 data_reg를 right shift하는 구조로 이해/구현
bit 전송 타이밍이 일정하지 않음 타이밍 기준 미정립 b_tick 기준 16 tick마다 1bit 전송하는 카운터 구조 추가
Start bit 검출 후 샘플링 시점 불명확 노이즈·전이 구간 영향 16x oversampling 중 8번째 tick(mid-point)에서 샘플링
rx_done → tx_start 직접 연결 시 Tx 동작 불안정 rx_done이 1-cycle pulse인지 불명확 Tx FSM이 IDLE 상태에서만 tx_start를 인식하도록 제한
STOP 상태에서도 tx_busy가 계속 유지됨(오동작으로 오인) STOP 상태가 실제 Stop bit를 출력 중인 구간이라 정상 동작 파형 분석으로 정상 동작임을 확인, tx_busy는 전송 완료 시점과 정확히 일치

👥 Team & Role

이름 담당
최민영 UART Tx/Rx FSM 설계, Testbench 작성 및 시뮬레이션 검증, Loopback 구조 System Integration, FPGA Bitstream 생성 및 보드 동작 확인

🗓️ 진행 일지

날짜 내용
04.22 UART 통신 시스템 아키텍처 정의, Tx/Rx/Baud Tick Generator 모듈 분리 설계
04.23 UART Tx 모듈 RTL 설계 및 구현 (FSM 기반 송신 구조)
04.24 UART Rx 모듈 RTL 설계 및 구현 (16x Oversampling 기반 수신 구조)
04.25 Tx/Rx/Baud Tick Generator 통합, Loopback 구조 구현
04.26 Loopback 시스템 Testbench 작성 및 시뮬레이션 검증
04.27 최종 발표, baud_tick_gen 단위 검증 필요성 확인

⚙️ Design Environment

  • Language: Verilog HDL
  • FPGA: Basys-3
  • EDA Tool: Vivado / Vivado Simulator
  • Interface Tool: ComPortMaster

About

UART Tx/Rx 및 Loopback 구조 구현 — 16x Oversampling 기반 FPGA 직렬 통신 (Verilog)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages