VHDL: Signalzuweisung in for-loop

OP #3378983
Lesenswert?

Hallo zusammen,

ich würde in VHDL Signale gern in einer for-loop einander zuweisen. 
Allerdings bekomme ich "Syntax error near loop". Hoffe hier kann mir 
jemand helfen, den Fehler zu finden.
1
entity subproduct_comp is
2
    Port ( a : in  STD_LOGIC;
3
           factor : in  STD_LOGIC_VECTOR (23 downto 0);
4
        subproduct : out STD_LOGIC_VECTOR (23 downto 0));
5
end subproduct_comp;
6

7
architecture Behavioral of subproduct_comp is
8

9
begin
10
    make_subproduct : for i in 0 to 23 loop
11
      subproduct(i) <= a AND factor(i);
12
    end loop make_subproduct;
13

14
end Behavioral;

Die Fehlermeldung ist folgende:
ERROR:HDLCompiler:806 - "K:/subproduct.vhd" Line 41: Syntax error near 
"loop".
ERROR:HDLCompiler:806 - "K:/subproduct.vhd" Line 43: Syntax error near 
"loop".
ERROR:HDLCompiler:841 - "K:/subproduct.vhd" Line 43: Expecting type 
void for <make_subproduct>.
ERROR:HDLCompiler:854 - "K:/subproduct.vhd" Line 38: Unit <behavioral> 
ignored due to previous errors.
VHDL file K:/subproduct.vhd ignored due to errors
Gast #3379106
Lesenswert?

Marten W. schrieb:
> Das deine loop in keinen "Process" ist, brauchst du ein generate:
>
> so sollte es gehen
>
>
1
>    make_subproduct : for i in 0 to 23  generate
2
>       subproduct(i) <= a AND factor(i);
3
>     end generate make_subproduct;
4
>

Das wird nicht gehen weil die typen beim AND nicht passen.

MfG
Gast #3379168
Lesenswert?

Anschlussfrage:

Ich habe:

entity irgendwas is
    Port ( mc_port_out_0 : out STD_LOGIC_VECTOR (7 downto 0);
           mc_port_out_1 : out STD_LOGIC_VECTOR (7 downto 0);
                      ...
           mc_port_out_14 : out STD_LOGIC_VECTOR (7 downto 0);
           mc_port_out_15 : out STD_LOGIC_VECTOR (7 downto 0));
end irgendwas;

also 16 Ports, kann man da was mit FOR bla GENERATE machen um das zu 
verkürzen???
Persönliche Seite #3379286
Lesenswert?

Ich glaube nicht, dass ein Generate in einer Entity funktioniert.
So ein Problem habe ich immer mit einem Package erschlagen (keine Ahnung 
ob das ein guter/richtiger Weg ist).

Package file:
1
package bla_package is
2

3
constant mc_port_count : integer := 16;
4
type mc_ports_t is array(0 to mc_port_count-1) of std_logic_vector(7 downto 0);
5

6
end bla_package;

Dann bei Bedarf benutzen:
1
...
2
...
3
use work.bla_package.all;
4
...
5

6
entity bla is
7
{
8
...
9
mc_ports : out mc_ports_t;
10
...
11
}
12
end entity;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren