2014-11-20 3 views
0

Vhdl에 다음 코드 조각이 있습니다.이 신호 S1을 출력 포트로 조건부로 리디렉션하고 싶습니다. 누군가가 이것을 통해 나를 안내 할 수 있으면 도움이 될 것입니다.Vhdl에서 생성 사용

Gen: for index in 0 to 4 generate 

signal s1 : ARRAY_TYPE; --- array of (0 to 7) std_logic_vector (7 downto 0); 
begin 
    process(CLK) 
    begin 
    if (rising_edge (CLK)) then 
     S1(counter_index) <= S_in((index*8+7) downto (index*8)); 
     end if; 
    end if; 
    end process; 
end generate Gen; 

나는 내부 루프를 생성하는 프로세스를 사용할 수 있지만 다른 방법으로도 가능하다는 것을 알고 있습니다! S1을 글로벌 신호로 선언하면 다중 구동 네트에 연결된 신호가 발생합니까? 이게 어떻게 다른가요?

사람을 통해 나를 인도 할 수 있다면 정말 감사합니다이

+2

정확히 무엇을 하려는지 명확하지 않습니다. 문제의 일부는 생성 루프 변수가 아닌'counter_index'를 사용하여'S1'을 인덱싱하는 것일 수 있습니다. – fru1tbat

+0

답장을 보내 주셔서 대단히 감사합니다.필자는 언급 한대로 1Dx1D 배열 형식의 Fifo에 32 비트 입력 데이터를 저장하려고합니다. 이 Counter_index는 상태 머신에 의해 제어되는 write_pointer와 같은 인덱스이다. 알려 주시기 바랍니다. 아직 명확하지 않은 경우 다시 설명하게되어 기쁩니다. – user1107855

+1

만약 타겟이 루프에 국부적이지 않고, 루프 변수에 의해 인덱싱되거나, 루프 변수의 하나의 값에 대해서만 조건부로 설정되는'for ... generate' 루프 안에 무엇인가를 할당하면 ('if index = 0 ... '), 여러 드라이버 문제가 발생합니다. – QuantumRipple

답변

1

귀하에 대한-생성하면, 효율적으로, (밖으로 떠나 끝낼 것을 있도록 정교에서 풀려됩니다 (0 ~ 4) 루프를 간략화를위한 프로세스 번호) 인덱스

= 0

signal s1_1 : ARRAY_TYPE; --- array of (0 to 7) std_logic_vector (7 downto 0); 

s1_1(counter_index) <= S_in(15 downto 8); 
,617 : 인덱스 = 1

signal s1_0 : ARRAY_TYPE; --- array of (0 to 7) std_logic_vector (7 downto 0); 

s1_0(counter_index) <= S_in(7 downto 0); 

생성 루프 내에서 신호를 선언했기 때문에 "블록"을 생성합니다. 각 블록은 생성 블록에서만 사용할 수 있습니다. 당신이 만들려고하면 s1 "글로벌"(다른 의미를 가지고있는, 정말 글로벌하지, 그냥 전체 아키텍처 선언), 당신이 얻을 : 인덱스

= 0 :

인덱스
s1(counter_index) <= S_in(7 downto 0); 

= 1 :

s1(counter_index) <= S_in(15 downto 8); 

거기에 무슨 일이 일어 났습니까? 이러한 명령문은 동시 적이며 같은 비트로 지정됩니다. 그래서 여러 드라이버에 문제가 있습니다.

문제는 counter_index 인 것으로 보입니다. QuantumRipple이 제시 한 것처럼 루프 인덱스와 다른 인덱스를 조합하여 s1을 인덱싱해야하거나 중간 신호 등을 만들어야합니다.

한 번에 한 바이트 씩 32 비트 데이터를 처리하는 경우 이 아닌 0 to 3을 의미 할 수 있습니다. fru1tbat이 문제에 대한 해결책을 다루고 있지만

+0

배열이 루프 내부에 선언 된 것을 알지 못합니다. S1 배열이 루프 밖에서 사용될 수 없기 때문에 처음부터 끝까지 보여 졌기 때문에 원본 코드가 아니라는 느낌이 들었습니다. – QuantumRipple

+0

코드가 불완전하므로 명확하지 않습니다. 나는 게시 된 코드가 아마도 실험이라고 가정했다. 어느 쪽이든 한 프로세스 내에서 루프를 사용하라는 제안은 전반적으로 더 낫습니다. 때때로 다른 프로세스에서 배열의 다른 부분을 할당하는 데 문제가 있다는 것을 기억하는 것 같습니다. 그 이유를 정확히 기억하지 못합니다. – fru1tbat

0

, 나는 다른 질문을 다루 원 : 나는 우리가 내부 프로세스를 사용하여 루프를 생성 할 수 있습니다 알고

을뿐만 아니라 주변 가능 otherway 입니다!

프로세스 문 안에 for ... loop을 사용할 수도 있습니다. 이 함수는 for... generate 문과 비슷하게 전개되지만 프로세스 내부에 전개됩니다. 또한 변수를 사용하거나 할당을 덮어 쓰면 더 복잡한 논리를 구현하는 데에도 사용할 수 있습니다. 여기에 구문 참조가 있습니다 : http://www.ics.uci.edu/~jmoorkan/vhdlref/for_loop.html