2014-10-07 3 views
0

문자열 대기열을 기반으로 변수 이름을 선언하려면 다음과 같은 구조가 필요합니다. 아래는 컴파일되지 않습니다. 그래서 비슷한 접근법이 Systemverilog에서 가능한지 알고 싶습니다.문자열을 변수 이름으로 변환하는 방법은 무엇입니까?

다음은 실제로 구현하고자하는 단순화 된 버전입니다.

`define declare_int(NAME) int ``NAME`` = 1; 

string str_q[$] = {"a", "b", "c"}; 
foreach (str_q[i]) begin 
    `declare_int(str_q[i]) 
end 

참고 : 나는 `declare_int(a)int a = 1;로 번역하는 것을 알고 있습니다. 그러나 위의 예제에서와 같이이 매크로를 여러 번 호출하려면 foreach 루프가 필요하므로 매크로의 입력은이 경우 string과 같은 일부 데이터 유형이어야합니다. 그 목적은 시간에 따라 대기열이 변경 될 때 자동 선언하는 것입니다.

다른 말로 표현하면 이 int a = 1;으로 변환되도록 `declare_int 매크로를 어떻게 정의 할 수 있습니까?

답변

1

Verilog가 해석되지 않고 시뮬레이션으로 컴파일 되었기 때문에 런타임에 변수를 동적으로 선언하는 방법이 의심 스럽습니다. 그러나 유사한 효과를 얻을 수있는 해결 방법이 있습니다.

나는 당신이 얻을 수있는 가장 가까운 것은 당신의 이름 (a, b, c)과 값을위한 값으로 키를 가진 연관 배열이라고 생각한다. 예를 들어, 대신 코드로, 당신은 할 것 :

int vars[string]; 
string str_q[$] = {"a", "b", "c"}; 
foreach (str_q[i]) begin 
    vars[str_q[i]] = 1; 
end 
... 
// To use the variable, just do: 
vars["a"]; 

를 연관 배열에 대한 자세한 내용은 : http://www.asic-world.com/systemverilog/data_types13.html

관련 문제