7.3 UBus Top Module
Top Module은 DUT(Design Under Test)와 UVM 기반 테스트벤치를 연결하는 역할을 합니다. 여기서는 SystemVerilog 인터페이스를 사용해 DUT와 테스트벤치 간의 신호를 연결하고, 시뮬레이션을 초기화합니다.
Top Module 예제 (ubus_tb_top.sv)
module ubus_tb_top;
import uvm_pkg::*;
import ubus_pkg::*;
`include "test_lib.sv"
ubus_if vif(); // UBus 인터페이스 인스턴스화
dut_dummy dut(
vif.sig_request[0],
vif.sig_grant[0],
...
vif.sig_reset
);
initial begin
uvm_config_db#(virtual ubus_if)::set(null, "ubus_example_tb0.*", "vif", vif);
run_test();
end
// 클록 생성
always #5 vif.sig_clock = ~vif.sig_clock;
endmodule
주요 특징
- UBus 인터페이스 연결: 인터페이스 ubus_if를 사용하여 DUT와 테스트벤치를 연결합니다.
- run_test 호출: UVM 테스트를 실행하기 위해 run_test를 호출하며, 테스트 이름을 지정합니다.
7.4 The Test
Test 클래스는 특정 UBus 시나리오를 정의하는 최상위 UVM 컴포넌트입니다. 여기에서는 read_modify_write 테스트 시나리오를 구현합니다.
Test 클래스 예제 (test_read_modify_write)
class test_read_modify_write extends ubus_example_base_test;
`uvm_component_utils(test_read_modify_write)
function new(string name = "test_read_modify_write", uvm_component parent = null);
super.new(name, parent);
endfunction
virtual function void build_phase(uvm_phase phase);
uvm_config_db#(uvm_object_wrapper)::set(this,
"ubus_example_tb0.ubus0.masters[0].sequencer.main_phase",
"default_sequence",
read_modify_write_seq::type_id::get()
);
endfunction
endclass
주요 특징
- 환경 설정: uvm_config_db를 사용하여 main_phase에서 실행될 기본 시퀀스를 설정합니다.
- 유연한 테스트 실행: 다양한 테스트 시나리오를 적용할 수 있도록 시퀀스를 설정합니다.
7.5 Testbench Environment
테스트벤치는 ubus_env와 같은 환경 클래스를 포함하며, Master/Slave Agent, Monitor, Scoreboard와 같은 검증 요소를 통합합니다.
Testbench Environment 예제 (ubus_example_tb.sv)
class ubus_example_tb extends uvm_env;
`uvm_component_utils(ubus_example_tb)
ubus_env ubus0;
ubus_example_scoreboard scoreboard0;
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
uvm_config_db#(int)::set(this, ".ubus0", "num_masters", 1);
uvm_config_db#(int)::set(this, ".ubus0", "num_slaves", 1);
ubus0 = ubus_env::type_id::create("ubus0", this);
scoreboard0 = ubus_example_scoreboard::type_id::create("scoreboard0", this);
endfunction
virtual function void connect_phase(uvm_phase phase);
ubus0.slaves[0].monitor.item_collected_port.connect(
scoreboard0.item_collected_export
);
endfunction
endclass
주요 특징
- 환경 설정: Master/Slave Agent 수를 동적으로 설정합니다.
- 데이터 흐름 연결: Monitor에서 Scoreboard로 데이터를 전달해 결과를 검증합니다.
7.6 UBus Environment
UBus Environment는 Agent, Monitor, Scoreboard 등 주요 검증 컴포넌트를 통합하여 검증 환경을 구성합니다.
Environment 주요 구성
- Master/Slave Agent: 동적으로 설정 가능한 Agent 수를 통해 유연성을 제공합니다.
- Bus Monitor: UBus 프로토콜의 준수 여부를 확인하고 커버리지를 수집합니다.
Environment 초기화 예제
class ubus_env extends uvm_env;
`uvm_component_utils(ubus_env)
// 주요 컴포넌트 선언
ubus_bus_monitor bus_monitor;
ubus_master_agent master_agent;
ubus_slave_agent slave_agent;
virtual ubus_if vif; // Virtual Interface
function new(string name = "ubus_env", uvm_component parent = null);
super.new(name, parent);
endfunction
virtual function void build_phase(uvm_phase phase);
super.build_phase(phase);
// Virtual Interface 가져오기
if (!uvm_config_db#(virtual ubus_if)::get(this, "", "vif", vif)) begin
`uvm_fatal("NOVIF", "Virtual interface must be set.");
end
// 각 컴포넌트 생성
bus_monitor = ubus_bus_monitor::type_id::create("bus_monitor", this);
master_agent = ubus_master_agent::type_id::create("master_agent", this);
slave_agent = ubus_slave_agent::type_id::create("slave_agent", this);
endfunction
virtual function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
// Monitor와 에이전트 간 연결
bus_monitor.analysis_port.connect(master_agent.analysis_export);
bus_monitor.analysis_port.connect(slave_agent.analysis_export);
endfunction
endclass
주요 기능
- 에이전트 및 Monitor 생성: 환경 내 에이전트 및 모니터를 생성하여 각 역할을 수행합니다.
- Scoreboard와의 데이터 연결: Monitor가 수집한 데이터를 Scoreboard로 전달하여 검증합니다.
결론
UBus 검증 예제는 UVM 기반 검증 환경을 이해하고 구축하는 데 있어 매우 유용한 사례입니다. 주요 구성 요소는 다음과 같습니다:
- Top Module: DUT와 테스트벤치 간의 연결 및 초기화.
- Test 클래스: 시나리오 정의 및 시퀀스 실행.
- Environment: 검증 환경을 구성하는 Agent, Monitor, Scoreboard의 통합.
이 예제는 UVM의 구성 요소 간 데이터 흐름과 동적 설정을 효과적으로 보여줍니다. 이를 통해 검증 환경의 재사용성을 극대화하고, 다양한 테스트 요구사항을 충족할 수 있습니다.
반응형
'지식 공유 > UVM' 카테고리의 다른 글
[UVM 1.1d] 8. UVM Sequence Library (1) | 2024.12.01 |
---|---|
[UVM 1.1d] 7-3. UBus Verification Example (0) | 2024.12.01 |
[UVM 1.1d] 7-2. UBus Verification Example (0) | 2024.11.26 |
[UVM 1.1d] 6-3. Advanced UVM Topics (UVM CLI) (0) | 2024.11.19 |
[UVM 1.1d] 6-2. Advanced UVM Topics (SEQ_LIB, Layering) (0) | 2024.11.13 |
[UVM 1.1d] 6-1. Advanced UVM Topics (Factory, Callback) (0) | 2024.11.12 |
댓글