지노랩 /JinoLab
[UVM] 3.5.5 TLM 기반 드라이버 사용 (Using TLM-Based Drivers) 본문
UVM(Universal Verification Methodology)/3. 재사용 가능한 검증 컴포넌트 개발(Developing Reusabl
[UVM] 3.5.5 TLM 기반 드라이버 사용 (Using TLM-Based Drivers)
지노랩/JinoLab 2025. 3. 14. 13:423.5.5 TLM 기반 드라이버 사용 (Using TLM-Based Drivers)
3.5.5.1 개요
- seq_item_port는 UVM의 uvm_driver 클래스에 내장된 양방향 포트로, 다양한 TLM 메서드를 제공함.
- 일반적으로 seq_item_port를 통해 시퀀서에서 트랜잭션을 요청하고 응답을 제공함.
- 드라이버가 uvm_driver에서 직접 상속되지 않더라도 seq_item_port와 상호작용이 가능.
- TLM 방식의 트랜잭션 요청 및 응답을 처리하는 주요 메서드는 get(), peek(), put()이 있음.
3.5.5.2 주요 TLM 메서드
- peek()
- 블로킹(blocking) 방식의 메서드로, 시퀀서에서 다음 트랜잭션을 미리 확인할 수 있음.
- 트랜잭션을 가져오긴 하지만, 시퀀서를 계속 진행시키지는 않음.
- 예제 코드:
peek(req); // 트랜잭션 req를 확인한 후, 별도 처리를 수행 - 주의점: peek()는 블로킹 방식이므로 새로운 트랜잭션이 올 때까지 실행이 멈출 수 있음.
- get()
- 블로킹(blocking) 방식의 메서드로, 트랜잭션을 가져오면서 시퀀서를 다음 단계로 진행시킴.
- 일반적으로 peek()와 함께 사용됨.
- 예제 코드:
get(req); // 트랜잭션 req를 가져와 실행 - get()을 호출하면 시퀀서가 다음 트랜잭션을 생성할 수 있음.
- put()
- 응답 데이터를 시퀀서로 전달하는 메서드.
- 시퀀서가 get_response()를 호출하여 응답을 받을 수 있도록 함.
- 예제 코드:
seq_item_port.put(rsp); - put()을 호출하면 시퀀서가 해당 응답을 처리할 수 있음.
3.5.5.3 트랜잭션 처리 흐름
- TLM 기반 드라이버에서 트랜잭션을 처리하는 순서:
- 시퀀서에서 트랜잭션을 미리 확인 (peek())
- 트랜잭션을 가져옴 (get())
- DUT에 트랜잭션을 적용하고 응답 생성
- 응답을 시퀀서로 반환 (put())
- 또는 analysis_port를 사용하여 응답 전달 (rsp_port.write(rsp))
3.5.5.4 예제 코드
다음은 TLM 기반 드라이버의 기본적인 동작 예제이다.
class simple_driver extends uvm_component;
`uvm_component_utils(simple_driver)
simple_item req;
simple_item rsp;
virtual dut_if vif;
uvm_seq_item_pull_port #(simple_item) seq_item_port;
function new(string name, uvm_component parent);
super.new(name, parent);
endfunction
task run_phase(uvm_phase phase);
forever begin
// 트랜잭션을 미리 확인
seq_item_port.peek(req);
// 트랜잭션을 가져와 실행
seq_item_port.get(req);
drive_transaction(req);
// 응답 트랜잭션 생성
rsp = new req;
rsp.data = process_data(req.data);
rsp.set_id_info(req);
// 응답을 시퀀서로 반환
seq_item_port.put(rsp);
// 분석 포트를 통해 응답 전달 가능
rsp_port.write(rsp);
end
endtask
endclass
3.5.5.5 주요 특징
- peek(req)를 사용하여 트랜잭션을 미리 확인 가능.
- get(req)를 호출하면 트랜잭션을 가져오면서 시퀀서가 진행됨.
- put(rsp)를 사용하여 응답을 시퀀서로 전달.
- rsp_port.write(rsp)를 사용하면 응답 데이터를 분석 포트를 통해 전달 가능.
- peek()는 블로킹 방식이므로 트랜잭션이 생성될 때까지 실행이 멈출 수 있음.
3.5.5.6 요약
- TLM 기반 드라이버는 seq_item_port를 사용하여 시퀀서와 통신.
- 트랜잭션을 확인(peek()), 가져옴(get()), 응답을 전달(put())하는 방식으로 동작.
- 트랜잭션을 바로 처리하지 않고 대기할 수도 있으며, 분석 포트를 활용할 수도 있음.
- 블로킹 방식의 peek()는 실행이 멈출 수 있으므로 주의해야 함.
- put()를 사용하면 응답을 시퀀서로 전달할 수 있음.
본 내용은
accellera에서 공개한
Universal Verification Methodology
(UVM) 1.2 User's Guide
를 바탕으로 작성된 글입니다.
'UVM(Universal Verification Methodology) > 3. 재사용 가능한 검증 컴포넌트 개발(Developing Reusabl' 카테고리의 다른 글
| [UVM] 3.7 컴포넌트 인스턴스화 (Instantiating Components) (0) | 2025.03.15 |
|---|---|
| [UVM] 3.6 모니터(Monitor) 생성 (0) | 2025.03.15 |
| [UVM] 3.5.4 처리된 데이터 시퀀서로 반환하기 (Sending Processed Data back to the Sequencer) (0) | 2025.03.14 |
| [UVM] 3.5.3 연속적인 난수 트랜잭션 가져오기 (Fetching Consecutive Randomized Items) (0) | 2025.03.13 |
| [UVM] 3.5.2 난수 생성된 아이템 확인 (Querying for the Randomized Item) (0) | 2025.03.13 |