2014-10-30 8 views
3

전자의 경우 vr_ad 패키지로 작업하고 있습니다. 나는 vr_ad_reg_file my_reg_file에 레지스터 my_reg을 정의했습니다 :Specman UVM : 레지스터에 직접 액세스하고 read_reg_val()을 사용하는 것의 차이점은 무엇입니까?

reg_def MY_REG MY_REG_FILE 20'h00018 { 
    reg_fld my_reg_field  : uint (bits : 32) : RW : 0x0; 
}; 

내가 레지스터의 값에 액세스하고 싶습니다.

some_var = my_reg_file.my_reg.my_reg_field; 

read_reg_val()를 사용하여 레지스터를 액세스 :

some_var = my_reg_file.my_reg.read_reg_val(); 

여러분의 도움에 감사드립니다 직접 레지스터 접근의 차이는 (있는 경우)이란 무엇입니까.

답변

2

귀하의 경우에는 레지스터에 필드가 하나만 있으므로 아무 것도 없습니다. 그러나 조금 더 깊이 이해하기 위해 레지스터가 다음과 같이 정의 된 경우를 생각해 봅시다 :

reg_def MY_REG MY_REG_FILE 20'h00018 { 
    reg_fld my_reg_field  : uint (bits : 32) : W : 0x0; 
}; 

공지 사항 필자 만 필드를 작성했습니다. 필드가 0x1010_1010 값으로 업데이트되었다고 가정 해 보겠습니다.

my_reg.my_reg_field을 호출하면 0x1010_1010이 반환됩니다.

read_reg_val() 메서드는이 레지스터에 대한 읽기 액세스를 수행 할 때 얻을 수있는 값을 반환합니다. 이 경우 필드를 읽을 수 없으므로 0x0000_0000이됩니다 (이 값은 구성 가능하지만 기본값 당 재설정 값입니다).

레지스터에 저장된 값을 반환하는 (필드의 액세스 정책을 무시하는) 방법도 있습니다 (read_reg_rawval()). 이 경우 필드에 저장된 값인 0x1010_1010을 반환합니다.

read_reg_val()read_reg_rawval()은 레지스터에 여러 필드가 선언되어있을 때 유용합니다.이 메서드는 모든 값을 채우고 스칼라 값 (vr_ad_data_t)을 반환하기 때문입니다.