2017-11-01 34 views
1

generate_directed_packet으로 전화 할 때마다 새 개체가 만들어집니다. 다음 패킷을 만들기 전에 패킷 객체 삭제에 대해 걱정해야합니까? 그렇다면 패킷 객체를 삭제하는 방법은 무엇입니까?시뮬레이션 시간을 절약하기 위해 시스템 Verilog 생성기 모듈에서 생성 된 패킷을 파괴해야합니까?

function void generate_directed_packet(); 
packet = new(); 
void'(packet.randomize()); 
endfunction : generate_directed_packet 

답변

2

SystemVerilog에는 자동 메모리 관리 기능이 있습니다. 즉, 해당 객체에 대한 핸들을 포함하는 클래스 변수가있는 한 객체를 보유하고 있음을 의미합니다. 시뮬레이터는 그 객체에 대한 핸들을 가진 클래스 변수가 더 이상 없으면 객체를 "삭제"합니다. "삭제"는 따옴표 안에 있습니다. 왜냐하면 당신이 객체를 삭제할 때를 알지 못하기 때문입니다. 같은 객체의 또 다른 new()까지 공간을 유지하고 공간을 되 찾을 가능성이 더 큽니다.

UVM을 사용하는 경우 일반적으로 시퀀스에서 패킷을 생성하여 드라이버에 보냅니다. 당신이 정말로하고있는 일은 시퀀스의 새로운 객체에 대한 핸들을 생성 한 다음 시퀀스 내의 변수에서 드라이버의 변수로 핸들을 복사하는 것입니다.

한 변수에서 다른 변수로 핸들을 복사 할 때 이전 객체에 대한 참조가 지워집니다. 따라서 더 많은 객체 핸들을 추가 할 때 증가하는 데이터 구조로 객체에 핸들을 놓는 한 오래된 객체의 공간을 다시 확보 할 수 있습니다.