지식 공유/UVM
[UVM 1.1d] UVM Sequence Macro (uvm_do/uvm_do_with)
긍수저
2024. 9. 29. 19:16
반응형
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: 시퀀스 아이템을 생성하면서 특정 필드에 대해 제약 조건을 명시하고 싶을 때 사용.
이 두 매크로는 시퀀스를 간결하게 작성하고, 코드의 가독성을 높이기 위한 유용한 도구입니다.
반응형