2012-09-26 3 views

답변

2

를 인쇄해야

object1.printName() 

를 구현처럼

.

그러나 시스템 작업은 $typename입니다. 그러나 클래스 객체와 어떻게 작동하는지 모르겠습니다. 나는 전에 이것을 필요로하지 않았다.

일반적으로 내가 봤던 것 (그리고 내가하는 일은 유용하다고 느낀다.)은 생성자에 의해 할당 된 클래스에 저장된 문자열을 생성하는 것이다. 이것은 객체의 "이름"이다. 그런 다음 로깅 할 때 사용할 수 있으므로 다른 메시지의 출처를 알 수 있습니다. 물론 이것은 유용한 이름을 가진 새로운 변수를 만드는 것에 달려 있습니다.

+0

이것은 내가 본 것입니다. 그러나 할당 된 문자열은 객체를 인스턴스화하는 데 사용 된 문자열과 일치 할 필요가 없습니다. – Jean

+0

@Jean 맞아요, 당신이 원하는대로 지정할 수 있습니다. 그러나 그것은 귀하의 특별한 필요를 충족시키기에 충분할 수 있습니다. –

8

아니요, 아니요, 클래스에 대해이 작업을 수행하는 언어에 메커니즘이 없습니다.

모듈의 경우 계층 이름을 표시하기 위해 %m 형식 지정자를 사용할 수 있습니다. 그러나 클래스의 경우 %m을 사용하는 출력에는 인스턴스 이름이 아닌 클래스 유형 이름이 표시됩니다. (적어도 Incisive 및 Questa에서 관찰 된 동작이었습니다.) 또한 함수 내에서 호출 된 경우 %m에 함수 이름이 포함됩니다.

예 :

module test; 

    // Print %m in a module 
    function void printName(); 
    $display("%m"); 
    endfunction 

    class foo; 

    // Print %m in a class 
    virtual function void printName(); 
     $display("%m"); 
    endfunction 

    endclass 

    foo foo_inst = new; 

endmodule 

module top; 
    test test_inst(); 

    initial begin 
    test_inst.foo_inst.printName(); 
    test_inst.printName(); 
    end 
endmodule 

출력 : %m의 출력이 유용

top.test_inst.foo.printName 
top.test_inst.printName 

경우 $sformatf를 사용하여 문자열을 캡처 한 후 수정 또는 무엇이든 함께 할 수 있습니다.

4

인스턴스에는 이름이 없습니다. someObject의 동일한 인스턴스에

someObject a 
someObject b 

initial begin 
    a = new(); 
    b = a; 
    a.printName(); 
    b.printName(); 
end 

ab 점 :이 코드를 생각해 보자. 우리는 하나만 만들었습니다. 따라서 두 호출은 같은 이름을보고해야하지만 우리가 호출 할 핸들 이름을보고하기를 원합니다. 그건 불가능합니다.


OVM/UVM 개체에는 인스턴스 이름이 들어있는 멤버 변수가 포함되어 있습니다. 시공시 주어진 것이거나 set_name()을 사용하여 설정할 수 있습니다. get_name()을 사용하여 읽을 수 있습니다. 당신이 말하는 객체가 OVM/UVM이 아니더라도 유사한 시스템을 사용할 수 있습니다.

2

OVM/UVM을 사용하는 경우 get_full_name()/get_name()은 테스트 벤치 계층 구조의 구성 요소 이름을 반환합니다.

개체가 동적이므로 개체에 대한 질문이 유효하지 않습니다.

누군가가 객체 이름을 구현하려는 경우 모든 객체의 생성자에 "문자열 이름"을 전달하므로 객체가 new'd 인 경우 부모는 이름이 무엇인지 말할 것입니다. 새로운 (문자열 이름 = "", ovm_component 부모 = NULL)

이가에 기본 클래스에서 사용하는 기능 : 당신이 OVM/UVM의 모든 구성 요소를 보면

, 당신은 생성자 서명을 볼 수 있습니다 구현 get_full_name()/get_name()

관련 문제