Forum: FPGA, VHDL & Co. VHDL: Signalzuweisung in for-loop


von Robert B. (rsb89)


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

von Marten W. (goldmomo) Benutzerseite


Lesenswert?

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;

von Leonard Lebewohl (Gast)


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

von Robert B. (rsb89)


Lesenswert?

Danke, wieder etwas gelernt! ;)

von Mario (Gast)


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???

von Marten W. (goldmomo) Benutzerseite


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;

von Mario (Gast)


Lesenswert?

Das verkürzt es schon ganz gut.
Danke

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.