2012-05-10 7 views
2

struct에서 포인터와 인스턴스의 차이점은 무엇입니까? 구조체에서 인스턴스와 포인터를 어떻게 인스턴스화합니까? 포인터를 어떻게 연결합니까?Specman의 포인터와 인스턴스의 차이점은 무엇입니까?

예를 들어 설명 할 수있는 사람이 있습니까?

+0

[게시 된 항목] (http://www.cadence.com/Community/blogs/fv/archive/2012/05/11/specman-s-memory-management-orientation-guide-or-honey- utc_source = feedburner & utm_medium = feed & utm_campaign = 피드에 % 3A + 케이던스 % 2Fcommunity % 2Fblogs % 2Ffv + % 28Cadence + Functional + Verification + Blogs % 29) GC 엔진에 대해 알려주세요. –

답변

2

유닛 인스턴스은 유닛의 인스턴스를 선언합니다. A 유닛 참조 (유닛 포인터이라고도 함)은 유닛 계층 구조에 이미있는 유닛을 가리키며, 아무 것도 가리 키지 않으면 NULL 값을 갖습니다.

단위는 사전 실행 생성시에만 만들 수있는 정적 항목이며 절대 삭제할 수 없습니다 (참조 해제 후 가비지 수집). 단위는 다른 단위 내에서만 인스턴스화 할 수 있습니다. 따라서 모든 e 프로그램은 루트에 sys (단위가 미리 정의 된 단위)가있는 단위 인스턴스의 트리를 갖습니다. 이것은 테스트 단계에서 언제든지 동적으로 생성 될 수있는 구조체와는 대조적입니다. 부 인스턴스 만 프리 런 생성 동안 생성 할 수 있기 때문에

unit simple_u {}; 

struct example_s { 
    generated_ref : simple_u; 
    generated_inst : simple_u is instance; // Illegal: Instance cannot be in struct 
}; 

, 그들은 DO-하지 않은 생성 연산자를 선언 할 수 없다 (!)

generated_inst : simple_u is instance; 
!nongen_inst : simple_u is instance; // Illegal: Instances must be generated. 

단위 기준은 하나를 생성 할 수 아닙니다. 가 발생하면, 그것은 별도로 선언 단위 인스턴스 또는 NULL에 그 중 하나를 가리키는 제약 조건이 있어야합니다 : 단위 인스턴스에서 세대 액션을 사용하는 것은 불법입니다

!nongen_ref : simple_u; 
generated_ref : simple_u; // Requires a generation constraint (like below) 
keep soft generated_ref == NULL; 
keep  generated_ref == generated_inst; 

. 단위 참조는 언제든지 (즉석)에서 생성 될 수 있지만, 그것은 블록을 유지으로 지정을 기존의 제약이 있거나 있어야합니다

gen generated_inst; // Illegal to explicitly generate an instance 
gen generated_ref; 
gen nongen_ref keeping {it == generated_inst}; 

에 할당 할 법적 절차 적 코드의 단위 참조하지만, 단위 인스턴스를 할당 할 수 없습니다 :

generated_ref = NULL; 
generated_inst = NULL; // Illegal to assign to an instance 
0

그리고 구조체에 대해 - 구조체와

, "포인터"대에는 "예"가 없다. 모든 구조체 필드는 참조입니다.

btw - 디버깅 할 때 구조체에 대한 참조가 포함 된 메시지 (또는 dut 오류)가 표시됩니다. 뭔가처럼 -

[1045] 패킷 - 9 @ : 시작 주입 ...

다음

당신은

(9)이 "인스턴스에 대한 모든 참조를 인쇄 할 @입니다 Specman을 명령 을 실행할 수 있습니다 ". 목록은이 구조체를 참조한 모든 것을 포함하는 꽤 길 수도 있습니다.