2012-12-27 4 views
1

나는 VHDL을 처음 사용하고 있으며 인터넷을 검색 한 결과 나에게 도움이되는 자료를 찾지 못했습니다!배열 요소의 합 VHDL

I는 (! 32 개 요소) 배열의 요소를 추가하는 것을 시도하고, 그래서 단지 예들 < = S (0) +는 S (1) +는 (S) (3) ... S 대 물품 캔트 (5) + .... s (32)

어떻게 그런 계산을 일반화 할 수 있습니까 ?? 또는 내가 뭘 잘못하고 있니?

내 코드 (시뮬레이션에서 그 didnt 한 작업은) ...

library IEEE; 
library work; 
library std; 

use IEEE.STD_LOGIC_1164.all; 
use IEEE.STD_LOGIC_UNSIGNED.all; 
use ieee.std_logic_arith.all; 

entity main is Port (
    EIN : in std_logic; 
    AUS_1 : out std_logic_vector(3 downto 0)); 
end main; 

architecture Behaviour of main is 

    type Cosinus is array (0 to 4) of std_logic_vector(3 downto 0); 
    type Sinus is array (0 to 4) of std_logic_vector(3 downto 0); 

    Signal SumSin :std_logic_vector(3 downto 0); 

begin 

    main : process(Ein) 
     variable Cos : Cosinus; 
     variable Sin : Sinus; 
    begin 

     if(Ein='1') then 
      sin(0) := "0011"; 
      sin(1) := "0001"; 
      sin(2) := "1010"; 
      sin(3) := "1111"; 
      sin(4) := "1110"; 

      for n in 0 to 4 loop 
       SumSin <= SumSin + Sin(n);    
      end loop; 
     else 
      sin(0) := "1011"; 
      sin(1) := "0101"; 
      sin(2) := "1000"; 
      sin(3) := "1001"; 
      sin(4) := "1100"; 

      for n in 0 to 4 loop 
       SumSin <= SumSin + Sin(n);       
      end loop; 
     end if; 
    end process; 

    Aus_1 <= SumSin;  
end Behaviour; 

내가 먼저 thanksfull

+1

이 프로그램에는 많은 문제가 있지만 가장 큰 문제는 신호 할당에 대한 오해라고 생각합니다. 신호 할당이 어떻게 작동하는지에 대한 설명은이 게시물을 참조하십시오. http://stackoverflow.com/questions/13954193/is-process-in-vhdl-reentrant 그것에 대해 무엇을 할 것인가? 한 가지 해결책은 SumSin을 변수로 만들고 단일 신호 할당을 통해이를 복사하여 그 과정의 마지막에 Aus. –

답변

2

것 (... 불과 5 elemets에 대한) .. Don't use std_logic_arith.

입니다

그런 다음 합계에 변수를 사용하고 이후에 신호를 할당합니다.

... 
main : process(Ein) 
    variable Cos : Cosinus; 
    variable Sin : Sinus; 
    variable SumSin : signed(3 downto 0); 
begin 
    sumsin := (others => '0'); 
.... 
     for n in Sin'range loop 
      SumSin := SumSin + Sin(n);       
     end loop; 
    end if; 
    Aus_1 <= SumSin;  
    end process;