Pagina 1 di 1

VHDL, come ottenere dimensione per array da una funzione

Inviato: 12 apr 2016, 12:25
da deltax
Ciao a tutti, sto facendo un progettino al solo scopo didattico in VHDL, sulla suite Vivado. Mi sono trovato ad affrontare un problema che non riesco a risolvere, e non ho trovato ulteriori info su internet. Non so nemmeno si possa fare, quindi magari chiedo qui.

Ho il seguente codice per un package :

Codice: Seleziona tutto

package arrayout_type is
    constant N : integer := 8; -- first member is N bit long
    constant M : integer :=4; -- second member is M bit long
-- declaration of a TYPE of an array of M element, each element is a signal that is the output of the M shifters and the M-1 adders
    type array_out is array (M-1 downto 0) of std_logic_vector(M+N-1 downto 0);
    end package;


Poi in un alto package, che include il primo, scrivo questo:

Codice: Seleziona tutto

package adder_length is

    variable dimension : integer;
    -- function declaration
    function calc_adder_length (N,M : integer) return integer;
   
end adder_length;

package body adder_length is

 -- calcluate the number of internal signal for the adders. Function body.
    function calc_adder_length (N,M : integer) return integer is
    variable number : integer;
    variable accumulator : integer;
    begin
    number := M;
    accumulator :=M;
    while(number > 1) loop
        if(number mod 2 /= 0) then
            number := number/2+1;
        else
            number := number/2;
        end if;
        accumulator := accumulator + number;
    end loop;
    accumulator := accumulator +1; -- finalization.
    return accumulator;
    end calc_adder_length;
end adder_length;


Quello che vorrei fare è la seguente cosa:

Codice: Seleziona tutto

    dimension := calc_adder_length(N;M);
type array_out is array (dimension-1 downto 0) of std_logic_vector(M+N-1 downto 0);


Ho provato a mettere quelle 2 righe in molti posti; nel body del secondo package, nella main architecture...ma tutte mi danno errori, come se io non potessi mettere quelle istruzioni li. Per esempio ho provato a mettere la sola prima istruzione nel secondo pacakge e poi la seconda istruzione nell'architecture (prima del begin) ma anche in quel modo non va.

Secondo voi si può fare?