UART TX 동작 데모
병렬 데이터가 UART 프레임으로 변환되고 수신 측에서 다시 한 바이트로 조립되는 과정을 살펴봅니다.
m01_pure
한 initial 블록에서 DUT를 직접 구동하고 직렬 출력을 직접 샘플링해 확인합니다.
m02_task
반복되는 구동과 수신 코드를 send_byte·recv_byte task로 분리해 첫 역할 경계를 만듭니다.
m03_fork
driver와 monitor를 fork/join으로 동시에 실행해 여러 바이트를 보내면서 직렬 출력을 놓치지 않고 관찰합니다.
m04_scoreboard
monitor는 수신만 담당하고 scoreboard가 expected와 actual의 비교와 결과 집계를 전담합니다.
m05_queue
monitor와 scoreboard 사이에 queue를 두어 actual byte를 순서대로 안전하게 전달합니다.
m06_sequence
sequence가 stimulus를 준비하고 driver는 queue에서 받은 byte만 DUT에 구동합니다.
m07_expected_path
sequence가 stimulus와 expected를 함께 분배해 scoreboard의 payload 직접 참조를 제거합니다.
m08_role_split
m07의 데이터 경로를 유지하면서 test, env, agent 역할을 task 계층으로 묶습니다.
m09_if_seqitem_sequencer
UART TX pin을 interface로 묶고, byte를 sequence item 객체로 만들어 sequencer API로 전달합니다.
m10_uvc_block
UART TX 역할 task를 파일별로 분리해 include 기반 UVC 블록을 구성합니다.
m11_mailbox_channel
직접 관리하던 queue와 event를 typed mailbox로 바꿔 sequence item 객체를 전달합니다.
m12_sv_class_uvc
task 기반 UVC 역할을 plain SystemVerilog class로 전환하고 virtual interface로 DUT에 연결합니다.
m13_sv_seq_item_port
driver와 sequencer 사이에 순수 SystemVerilog seq_item_port bridge를 도입합니다.
m14_sv_analysis_port
monitor와 scoreboard 사이에 순수 SystemVerilog analysis port/imp bridge를 도입합니다.
m15_uvm_minimal
순수 SystemVerilog helper를 실제 UVM object, component, phase와 TLM port로 전환합니다.