MicroBlaze V RISC-V 프로세서를 이용하여 UART 통신을 통해 입력을 받고, 7세그먼트 디스플레이로 출력하는 임베디드 SoC 시스템을 구현
Diagram
사용 코드
`timescale 1 ps / 1 ps // 시뮬레이션 시간 단위 및 정밀도 설정
//------------------------------------------------------------------------------
// Top-Level Wrapper Module for MicroBlaze V System
// 이 모듈은 Vivado IP Integrator로 생성된 MicroBlaze V 시스템(mblazeV_fnd)의
// 상위 래퍼로서 외부 핀과 내부 블록 디자인을 연결합니다.
//------------------------------------------------------------------------------
module mblazeV_fnd_wrapper
(
reset, // 외부 리셋 입력 (active-high)
seven_seg_led_an_tri_o, // 7세그먼트 애너드 제어 출력 (4비트)
seven_seg_led_disp_tri_o, // 7세그먼트 디스플레이 제어 출력 (8비트)
sys_clock, // 외부 시스템 클록 입력
usb_uart_rxd, // UART 수신 데이터 (PC -> FPGA)
usb_uart_txd // UART 송신 데이터 (FPGA -> PC)
);
// 포트 선언
input reset;
output [3:0] seven_seg_led_an_tri_o;
output [7:0] seven_seg_led_disp_tri_o;
input sys_clock;
input usb_uart_rxd;
output usb_uart_txd;
// 내부 배선 (포트와 동일 이름을 가진 wire로 연결됨)
wire reset;
wire [3:0] seven_seg_led_an_tri_o;
wire [7:0] seven_seg_led_disp_tri_o;
wire sys_clock;
wire usb_uart_rxd;
wire usb_uart_txd;
//------------------------------------------------------------------------------
// 인스턴스: mblazeV_fnd
// Vivado Block Design으로 생성된 SoC 시스템 블록 인스턴스
// MicroBlaze V 프로세서 및 AXI 기반 주변 장치(GPIO, UART 등)를 포함함
//------------------------------------------------------------------------------
mblazeV_fnd mblazeV_fnd_i (
.reset(reset),
.seven_seg_led_an_tri_o(seven_seg_led_an_tri_o),
.seven_seg_led_disp_tri_o(seven_seg_led_disp_tri_o),
.sys_clock(sys_clock),
.usb_uart_rxd(usb_uart_rxd),
.usb_uart_txd(usb_uart_txd)
);
endmodule
동작 영상
결과
FPGA 보드의 MicroBlaze 시스템이 AXI GPIO를 통해 4자리 7세그먼트 FND를 제어하며, 초기값 7777에서 시작해 약 0.8초 간격으로 1씩 증가하는 것을 확인 할 수 있다.