somma di elementi di un vettore

Sezione dedicata al linguaggio di descrizione hardware per logiche programmabili

somma di elementi di un vettore

Postby alfo84 » 29 Sep 2013, 09:33

Salve a tutti, avrei bisogno si sommare gli elementi di un vettore, ad esempio:

Ho inserito nell'entity il seguente segnale di uscita:
" data_out_FIR1 : buffer signed(num_bit-1 downto 0) "

Invece tra i segnali nell'architettura ho messo:

-- un nuovo tipo --
type matrix is array(0 to num_taps) of signed(num_bit-1 downto 0);

signal t_FIR1 : matrix;

Code: Select all
                     
    ciclo_sum: for i in 0 to num_taps-1 generate
    
       data_out_FIR1 <= data_out_FIR1 +  t_FIR1(i);     -- ho dichiarato giustamente data_out_FIR1 come buffer!!!
      
    end generate ciclo_sum;


Mi dà il seguente errore:

"Error (10028): Can't resolve multiple constant drivers for net "data_out_FIR1[4]" at filtro_FIR1.vhd(119)"

Il problema sta proprio nella somma di elementi di un vettore. Come si fa in vhdl a fare tale somma?
alfo84
 
Posts: 42
Joined: 06 Sep 2013, 12:51

Re: somma di elementi di un vettore

Postby Leonardo » 29 Sep 2013, 10:16

Salve e buona domenica,
Col ciclo for non si ha l'esecuzione sequenziale ma parallela, viene sintetizzata in istruzioni parallele come ad esempio:

Code: Select all
data_out_FIR1 <= data_out_FIR1 +  t_FIR1(0);
   data_out_FIR1 <= data_out_FIR1 +  t_FIR1(1);
   data_out_FIR1 <= data_out_FIR1 +  t_FIR1(2);
   -- ...


Che pongono problemi in quanto data_out_FIR1 è modificato da diverse istruzioni in contemporanea.
Un'esecuzione sequenziale come ad esempio

Code: Select all
   process(data_out_FIR1, t_FIR1)
   begin   
      for i in 0 to 4 loop     
         data_out_FIR1 <= data_out_FIR1 +  t_FIR1(i);

      end loop;      
   end process;


Non pone invece problemi ed è compilata correttamente, per parallelizzare l'algoritmo bisogna seguire altre strade

Saluti
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma

Re: somma di elementi di un vettore

Postby alfo84 » 29 Sep 2013, 10:23

Buona domenica anche a te. Infatti ci avevo pensato anche io di fare un processo, lo avevo intuito, solo che mi sono creato un altro blocco da parte dove mettere questo processo, il problema ora è che nell'entity devo mettere come ingresso un segnale di tipo matrix, e il tipo purtroppo va dichiarato nell'architettura. QUindi per risolvere tale problema ora mi sto creando un package a parte dove dichiararmi questo nuovo tipo in modo da richiamarlo senza problemi!

Grazie come sempre dei tuoi consigli. Ciao Leonardo
alfo84
 
Posts: 42
Joined: 06 Sep 2013, 12:51

Re: somma di elementi di un vettore

Postby Leonardo » 01 Oct 2013, 01:12

Aggiungo che è compilata correttamente ma l'utilizzo dei segnali non la rende adatta a sommare i vettori, una possibile implementazione potrebbe essere tramite le variabili:

Code: Select all
   process(t_FIR1)      
      variable res : integer := 0;
   begin      
      for i in (num_taps-1) downto 0 loop     
        res := res + t_FIR1(i);
      end loop;       
      data_out_FIR1 <= res;
   end process;
Il mio blog di elettronica: http://electro-logic.blogspot.it
User avatar
Leonardo
 
Posts: 502
Joined: 29 May 2013, 22:31
Location: Parma


Return to VHDL x FPGA

Who is online

Users browsing this forum: No registered users and 2 guests

cron