[UVM 1.1d] UVM Sequence Macro (uvm_do/uvm_do_with)
본문 바로가기
지식 공유/UVM

[UVM 1.1d] UVM Sequence Macro (uvm_do/uvm_do_with)

by 긍수저 2024. 9. 29.
반응형

uvm_do와 uvm_do_with는 UVM에서 자주 사용하는 매크로로, 시퀀스에서 시퀀스 아이템을 생성하고 실행하는 데 사용됩니다. 이 매크로들은 시퀀스를 더 간결하고 명확하게 작성할 수 있도록 도와줍니다. 다음은 uvm_do와 uvm_do_with의 핵심 개념과 사용 방법입니다.

1. uvm_do

uvm_do는 시퀀스 아이템을 생성하고, 시퀀서에 전달하여 실행하는 기본 매크로입니다. 주로 시퀀스의 body 메서드 내에서 사용됩니다.

형식:

  `uvm_do(item)
  • item: 생성하고 실행할 시퀀스 아이템

예시:

task body();
  my_sequence_item req;
  `uvm_do(req); // 시퀀스 아이템 생성 및 실행
endtask

 

 

2. uvm_do_with

uvm_do_with는 시퀀스 아이템을 생성하고 실행하는 동시에, 특정 제약 조건을 추가하여 아이템의 필드를 조건에 맞게 랜덤화할 수 있습니다.

형식:

  `uvm_do_with(item, {constraints})
 
  • item: 생성할 시퀀스 아이템
  • constraints: 시퀀스 아이템에 적용할 제약 조건

예시:

task body();
  my_sequence_item req;
  `uvm_do_with(req, {req.addr == 32'hA000_0000}); // 제약 조건 추가
endtask

 

위 예시에서 uvm_do_with는 req라는 시퀀스 아이템을 생성하고, addr 필드가 32'hA000_0000으로 설정되도록 제약을 추가한 뒤 실행합니다.

uvm_do vs uvm_do_with 차이점

  • uvm_do: 기본적으로 시퀀스 아이템을 생성하고 실행하며, 추가적인 제약 조건이 없을 때 사용.
  • uvm_do_with: 시퀀스 아이템을 생성하면서 특정 필드에 대해 제약 조건을 명시하고 싶을 때 사용.

이 두 매크로는 시퀀스를 간결하게 작성하고, 코드의 가독성을 높이기 위한 유용한 도구입니다.

반응형

댓글