보통 쓰기 동작은 예제가 너무 많아서 쉽게 되는데, 되려 read 즉 DUT Interface 에서 데이터를 받아서 Driver 이런 곳에서 확인하는 것에 대한 예제가 잘 안보이네.
우리 AI를 이용해서 열심히 답을 내보니, 좋은 결과를 보여주네. 핵심은
seq_item_port.put_response(item);
예로 살펴보자. AXI 인터페이스를 사용하는 경우, 읽기 트랜잭션에서 데이터를 받아 sequence_item
의 데이터 필드에 넘겨주는 기능을 구현하고자 할 때, 몇 가지 추가적인 단계가 필요합니다. 이 과정은 드라이버가 데이터를 받고 해당 데이터를 관련 sequence_item
에 저장하여, 이후의 검증 단계 또는 점수 계산(scoreboarding)에서 사용할 수 있도록 하는 것을 포함합니다.
읽기 트랜잭션에서 데이터 반환 구현
drive_item
태스크 내에서 읽기 트랜잭션을 처리하는 부분을 수정하여, 인터페이스에서 읽은 데이터를 sequence_item
객체의 데이터 필드에 저장하고, 이를 UVM 테스트벤치의 다른 컴포넌트와 공유할 수 있도록 합니다.
virtual task drive_item(my_sequence_item item);
@(posedge vif.clock);
if (item.read) {
vif.araddr <= item.addr;
vif.arvalid <= 1;
wait (vif.arready);
@(posedge vif.clock);
vif.arvalid <= 0;
wait (vif.rvalid);
@(posedge vif.clock);
item.data = vif.rdata; // Store the read data back to the sequence item
vif.rready <= 1;
@(posedge vif.clock);
`uvm_info("DRIVER", $sformatf("Read addr: %0h, received data: %0h", item.addr, item.data), UVM_HIGH);
vif.rready <= 0;
// Notify the sequencer that the item has been updated with the received data
seq_item_port.put_response(item);
} else {
vif.awaddr <= item.addr;
vif.awvalid <= 1;
wait (vif.awready);
@(posedge vif.clock);
vif.awvalid <= 0;
vif.wdata <= item.data;
vif.wvalid <= 1;
wait (vif.wready);
@(posedge vif.clock);
vif.wvalid <= 0;
// Wait for B channel response
wait (vif.bvalid);
vif.bready <= 1;
@(posedge vif.clock);
`uvm_info("DRIVER", $sformatf("Write complete at addr: %0h, data: %0h", item.addr, item.data), UVM_HIGH);
vif.bready <= 0;
}
endtask: drive_item
변경 사항 설명
- 데이터 저장: 읽기 동작을 수행한 후, 인터페이스에서 반환된 데이터(
rdata
)를sequence_item
의data
필드에 저장합니다. - 응답 처리: 데이터를 받은 후,
sequence_item
을 업데이트하고,put_response()
메서드를 호출하여 이 정보를 시퀀서에 통지합니다. 이는 시퀀스 또는 스코어보드에서 해당 데이터를 사용할 수 있게 합니다.
주의 사항
- 이 구현은
my_sequence_item
에data
필드가 존재하고, 이 필드가 public 또는 수정 가능하다고 가정합니다. put_response()
는 UVM에서 응답 처리를 관리하는 표준 방식입니다. 이를 사용하여 드라이버에서 시퀀스나 스코어보드로 데이터를 전달할 수 있습니다.
이와 같은 수정을 통해 드라이버는 AXI 읽기 트랜잭션에서 받은 데이터를 sequence_item
을 통해 테스트벤치의 다른 부분과 공유할 수 있게 됩니다. 이는 데이터의 흐름을 관리하고, 테스트의 검증 과정에서 필요한 데이터 접근성을 향상시키는 데 도움을 줍니다.
'IT > ASIC | FPGA' 카테고리의 다른 글
UVM sequence - 메인함수는 body task (0) | 2024.05.29 |
---|---|
UVM Factory Pattern - 무슨 디자인 패턴까지.. (0) | 2024.05.29 |
Tessent shell - 이건 머지? SIEMENS DFT (0) | 2024.05.24 |
UVM DPI (Direct Programming Interface) 기능 기초 예제 (0) | 2024.05.23 |
SystemVerilog에서 패키지를 사용하는 장점 (0) | 2024.05.22 |