2013-06-17 2 views
1

여기 VHDL, 그래서 이것은 모두 가능하지만, 여기에 가면 내가 완전히 확실하지 않다 아주 새로운 :별표가있는 VHDL에서 변수를 선언 할 수 있습니까?

일부 RAM 내 테스트 코드에서, 나는이 8 비트 std_logic_vector 변수 wdata_a_vwdata_b_v 있습니다. 이것이 현재 설정에 필요한 것뿐입니다. 그러나 데이터 길이를 변경하기 위해 읽기/쓰기 비율이 변경되면 wdata_*_v이라는 변수가 더 필요합니다. 나는이 변수들의 어떤 양을 위해 기능 할 수 있도록 코드를 일반적으로 작성하려고 노력하고있다. 그러나 나는 단지 몇 개만 필요할 때 코드에서 26 개를 선언하고 싶지 않다.

과 같이 변수를 선언 할 수있는 방법이 있다면 그것은 좋은 것 : 나는 루프를 작성할 수 있도록

variable wdata_*_v : std_logic_vector (7 downto 0); 

것은, 무대 뒤에서,이 프레임 워크에 맞게 모든 변수를 선언 할 것 변수 부족으로 걱정하지 않아도됩니다.

이 작업을 수행하는 데 함수 또는 프로 시저 등을 작성하는 방법이 있다면, 그것은 우수 할 것입니다.

답변

1

예, 2 차원 배열로 갈 수 조리법 :

entity TestHelper is 
    generic (n: natural range 2 to 255 := 8); 
end TestHelper; 

architecture behavioral of TestHelper is 
    type array2d is array (n-1 downto 0) of std_logic_vector(7 downto 0); 
begin 
    process 
    variable a : array2d; 
    begin 
     a(0)(0) := '0'; 
    end process; 
end architecture behavioral; 

편집 : 지금 사용하고 wdata_*_v 각각에 대해 유사한 코드를 만들 수 있습니다 :

process 
    variable wdata_v : array2d; 
begin 
    someLabel: for i in 0 to n-1 generate 
     wdata_v(i)(0) := '0'; 
     x <= y and z; 
     ... 
    end generate; 

    x <= '1'; 
    ... 

    anotherLabel: for i in 1 to n generate 
     ... 
    end generate; 

    ... 
end process; 
+0

내를 모르겠어요를 질문은 100 % 명확했다. 나는 wdata_a_v, wdata_r_v, wdata_z_v 등을 사용할 수있는 무언가를 찾고 있는데, 단지 wdata _ * _ v 또는 비슷한 것을 선언하는 동안이다. 이 2 차원 어레이가 어떻게 이뤄낼 지 모르겠다.하지만 말했듯이, 나는 새롭다. 그래서 나는 뭔가를 놓칠지도 모른다. – Illusion10

+0

나는 편집을 따르지 않을 것이다, 불행히도. wdata_v라는 std_logic_vectors 배열을 선언하고 있지만, 이전 주석과 같이 다른 이름의 변수를 사용할 수있는 것은 아닙니다. 그래도 도움을 주셔서 감사합니다. – Illusion10

+0

@ user2452645 : 'wdata_a_v', 'wdata_b_v', ...가 같은 비즈니스 로직에 의해 구동되는 경우 generate 루프를 사용하여 논리를 한 번 작성하고 알파벳의 각 문자에 대해 카본 카피를 가질 수 있습니다. 다른 이름으로 변수를 참조하려면 'wdata_v (0)','wdata_v (1)', ..을 별명으로 사용할 수 있습니까? –

관련 문제