Hallo,
ich versuche aktuell, eine Komponente mehrfach zu instanziieren.
Zuerst habe ich dafür folgenden Code verwendet (kommentarzeichen
wegdenken):
[Moderator: Kommentarstriche entfernt und [ vhdl ] Token eingefügt,
nächstesmal bitte selber machen]
1 | reg:
|
2 | FOR i IN 0 TO 4 - 1 GENERATE
|
3 | inst : COMPONENT gen_output_register
|
4 | GENERIC MAP(
|
5 | g_data_width => g_slice_width,
|
6 | g_address_width => ceil_log2(g_slice_count),
|
7 | g_address => i
|
8 | )
|
9 | PORT MAP(
|
10 | demux_in => input_vector,
|
11 | demux_out => output_vector(((i + 1) * g_slice_width) - 1 DOWNTO i * g_slice_width),
|
12 | sel => index,
|
13 | ena => ena,
|
14 | clk => clk
|
15 | );
|
16 | END GENERATE;
|
Diese Code generiert, siehe Bild im Anhang, nur diese eine Instanz.
(Zu wissen ist: g_Slice_width = 64 und g_slice_count = 4)
Als das nicht funktionierte, habe ich Testweise die Schleife ausgerollt:
1 | inst_0 : COMPONENT gen_output_register
|
2 | GENERIC MAP(
|
3 | g_data_width => g_slice_width,
|
4 | g_address_width => ceil_log2(g_slice_count),
|
5 | g_address => 0
|
6 | )
|
7 | PORT MAP(
|
8 | demux_in => input_vector,
|
9 | demux_out => output_vector(((0 + 1) * g_slice_width) - 1 DOWNTO 0 * g_slice_width),
|
10 | sel => index,
|
11 | ena => ena,
|
12 | clk => clk
|
13 | );
|
14 |
|
15 | inst_1 : COMPONENT gen_output_register
|
16 | GENERIC MAP(
|
17 | g_data_width => g_slice_width,
|
18 | g_address_width => ceil_log2(g_slice_count),
|
19 | g_address => 1
|
20 | )
|
21 | PORT MAP(
|
22 | demux_in => input_vector,
|
23 | demux_out => output_vector(((1 + 1) * g_slice_width) - 1 DOWNTO 1 * g_slice_width),
|
24 | sel => index,
|
25 | ena => ena,
|
26 | clk => clk
|
27 | );
|
28 |
|
29 | inst_2 : COMPONENT gen_output_register
|
30 | GENERIC MAP(
|
31 | g_data_width => g_slice_width,
|
32 | g_address_width => ceil_log2(g_slice_count),
|
33 | g_address => 2
|
34 | )
|
35 | PORT MAP(
|
36 | demux_in => input_vector,
|
37 | demux_out => output_vector(((2 + 1) * g_slice_width) - 1 DOWNTO 2 * g_slice_width),
|
38 | sel => index,
|
39 | ena => ena,
|
40 | clk => clk
|
41 | );
|
Allerdings produziert diese Code das selbe Ergebnis (siehe Bild).
Jetzt ist die Frage, was mache ich falsch ?
In der Verhaltenssimulation funktioniert die Schleifenvariante und es
werden 4 Register erzeugt. Diese Variante wurde im Post-Translage
getestet und dort funktioniert sie nicht mehr. Dort wird nur das erste
Register erzeugt (dieses funktioniert aber korrekt).