2장: Transaction-Level Modeling (TLM)
TLM 개요
Transaction-Level Modeling(TLM)은 시스템의 상위 추상화 수준에서 설계 및 검증 작업을 수행하는 기법입니다. TLM은 주로 **데이터 전송(transaction)**을 중심으로 통신을 모델링하며, 설계 검증 시 성능 최적화와 재사용성을 극대화하는 데 도움을 줍니다. TLM 방식은 두 가지 주요 버전인 TLM 1.0과 TLM 2.0으로 나뉘며, 각기 다른 추상화 수준과 활용 방식에서 차이가 있습니다.
TLM 1.0과 TLM 2.0 비교
- TLM 1.0: 메시지 전달 방식(message-passing system)을 기반으로 하며, 타이밍에 대한 명시적 주석이 제공되지 않는 단순한 구조입니다. 주로 이벤트 기반 설계에서 사용되며, 트랜잭션이 실행될 때 별도의 타이밍 제어 없이 데이터를 전송합니다. 이는 최소한의 시간 제어를 제공하지만, 타이밍의 정확한 관리가 요구되지 않는 높은 추상화 수준에서 적합합니다.
- TLM 2.0: TLM 1.0의 단점을 보완한 버전으로, 메모리 매핑 시스템과 같은 복잡한 시스템을 고성능으로 모델링할 수 있도록 설계되었습니다. TLM 2.0에서는 트랜잭션 간의 데이터 전송과 동시에 타이밍 주석이 포함되며, 이를 통해 정확한 시간 동작을 시뮬레이션할 수 있습니다. 이 방식은 높은 성능을 유지하면서도 트랜잭션 간 상호작용의 정확한 타이밍 제어를 가능하게 합니다.
TLM 1.0의 주요 특징
- 메시지 전달 기반: 트랜잭션 객체는 단순히 메시지를 전송하는 역할을 하며, 타이밍 정보는 별도로 관리되지 않습니다.
- 타이밍 비주석 방식: 트랜잭션 수행 시 시간에 대한 명확한 제어 없이 처리되며, 이는 추상적인 수준에서의 빠른 검증에 적합합니다.
TLM 2.0의 주요 특징
- 타이밍 주석 제공: TLM 2.0은 트랜잭션이 일어날 때마다 타이밍 정보를 포함시킴으로써, 정확한 시간 제어가 가능합니다.
- 메모리 매핑 시스템 지원: 고성능 모델링을 위해 메모리 매핑 시스템과의 상호작용을 지원하여, 보다 복잡한 설계에서도 높은 정확도의 검증을 제공합니다.
TLM 1.0 예제 코드
class producer extends uvm_component;
uvm_blocking_put_port #(simple_trans) put_port;
function new(string name, uvm_component parent);
put_port = new("put_port", this);
endfunction
virtual task run();
simple_trans t;
for (int i = 0; i < N; i++) begin
put_port.put(t); // 트랜잭션 전송
end
endtask
endclass
위 코드는 TLM 1.0에서 메시지 전달 방식으로 트랜잭션을 처리하는 예시입니다. put_port.put(t) 명령을 통해 트랜잭션을 소비자에게 전달합니다. 타이밍 정보는 별도로 관리되지 않습니다.
TLM 2.0 예제 코드
class producer extends uvm_component;
uvm_tlm_nb_initiator_socket #(simple_trans) initiator_socket;
function new(string name, uvm_component parent);
initiator_socket = new("initiator_socket", this);
endfunction
virtual task run();
simple_trans t;
uvm_tlm_time delay;
initiator_socket.b_transport(t, delay); // 트랜잭션과 타이밍 전달
endtask
endclass
TLM 2.0에서는 b_transport 메서드를 사용하여 트랜잭션과 함께 타이밍 정보도 전달합니다. 이를 통해 트랜잭션 간의 시간적 순서와 상호작용을 보다 정확히 관리할 수 있습니다.
타이밍 차이
- TLM 1.0에서는 트랜잭션이 타이밍 주석 없이 즉시 전송되므로 비동기적으로 처리됩니다. 이는 빠른 처리 속도를 제공하지만, 타이밍 정확도가 떨어집니다.
- TLM 2.0에서는 트랜잭션 전송 시 타이밍 주석을 포함시켜 동기적으로 처리되며, 보다 세밀한 시간 제어를 제공합니다.
결론
TLM 1.0과 TLM 2.0은 각기 다른 추상화 수준에서 설계 검증을 효율적으로 처리하기 위한 방법론입니다. TLM 1.0은 간단한 메시지 전달 방식으로 빠른 검증을 제공하지만, 타이밍 제어가 제한적입니다. 반면, TLM 2.0은 보다 정교한 타이밍 주석을 통해 고성능의 메모리 매핑 시스템을 처리하며, 복잡한 시스템 설계에서도 정확한 검증을 지원합니다.
이를 통해, 설계 요구 사항에 따라 두 버전을 적절히 선택하여 사용할 수 있습니다.
반응형
'지식 공유 > UVM' 카테고리의 다른 글
[UVM 1.1d] 4-2. Reusable UVM Component (0) | 2024.10.10 |
---|---|
[UVM 1.1d] 4-1. Reusable UVM Component (0) | 2024.09.29 |
[UVM 1.1d] UVM Sequence Macro (uvm_do/uvm_do_with) (0) | 2024.09.29 |
[UVM 1.1d] 3-2. UVM Components (1) | 2024.09.26 |
[UVM 1.1d] 3-1. UVM Components (1) | 2024.09.25 |
[UVM 1.1d] 1. Overview (0) | 2024.09.22 |
댓글