다른 레지스터 유형은 색인 만 다른 거의 동일한 이름을 가지고 있습니다 (예 : timer_load_0
, timer_load_1
등). string
('name'of 그 인덱스가없는 레지스터)와 uint
(레지스터의 인덱스)을 결합하여 "연결된"레지스터 유형의 변수를 반환합니다. 예를 들어 내가 명령하는 것이 싶습니다Specman DAC 매크로 : 다른 유형의 2 개 입력 (uint 및 string)을 정의하는 방법은 무엇입니까?
my_idx : uint = 0;
create_reg "timer_load" my_idx;
변수 timer_load_0
를 반환합니다.
내 매크로 코드 :
define <var_by_idx'action> "create_reg <name'any> <idx'exp>" as computed {
var idx : uint = <idx'exp>.as_a(uint);
result = appendf("%s_%d",<name'any>, idx);
};
컴파일 에러가 나는 얻을 :
Error: Looking for a number but found 'my_idx'
at line 45 in @macros
var idx : uint = <idx'exp>.as_a(uint);
during execution of a define-as-computed macro:
at line 380 in @timer_monitor
create_reg "timer_load" my_idx;
매크로 string
로 .. 어떤 도움 주셔서 감사합니다 my_idx
uint
변수로하지만, 인식하지 못하는 .
이 매크로로 정확히 무엇을 달성하려고하는지 명확하지 않습니다. 일반적으로 DAC 매크로는 (실행시가 아닌) 파싱하는 동안 실행되며, 일반적으로 일부 합법적 인 e 코드를 포함하고 더 파싱되는 문자열을 반환해야합니다. 이 예제에서 매크로는 문자열을 반환하지 않습니다. 정확히 여기서 무엇을하려고합니까? 런타임에 어떤 일이 발생할 것으로 예상됩니까? –
안녕하세요, Yuri 님, 메모에 따라 수정 된 질문으로 수정했습니다. – Halona
이전에 묻고 계신 질문에서 내가하고 싶은 것을 얻을 수 있다고 생각합니다. 두 하위 유형 모두에 동일한 필드가 정의되어있어 액세스 할 수 있도록 캐스트해야합니다. 이 경우 리플렉션을 사용할 수는 있지만 런타임 성능면에서 볼 때 더 비쌉니다. –