Forum: FPGA, VHDL & Co. VHDL08: Integer-Array mit Range als Port


von Dominik N. (dzo_pf)


Lesenswert?

Hallo µCler,
ich möchte als Input und Output einer VHDL-Entity ein Integer-Array 
verwenden, und zwecks Validierung/Verifikation bevorzuge ich es, alle 
Integers mit einer Range zu versehen. Bisher sieht mein Ansatz 
folgendermaßen aus:
1
package types_comp is
2
    type array_integer_t is array (natural range <>) of integer;
3
end package;
4
5
library ieee;
6
use ieee.std_logic_1164.all;
7
use ieee.numeric_std.all;
8
use work.types_comp.all;
9
10
entity cpe is
11
    generic (
12
        MAX_VALUE : positive := 255;
13
        PE_COUNT : positive := 128
14
    );
15
    port (
16
        clk_i : std_ulogic;
17
        reset_i : std_ulogic;
18
19
        s_base_i : in integer range 0 to MAX_VALUE;
20
        s_calc_i : in integer range 0 to MAX_VALUE;
21
        m_cost_o : out array_integer_t (0 to PE_COUNT-1) -- range?
22
    );
23
end cpe;

Wie ihr seht, ist der Output in seiner Range nicht beschränkt. Dadurch, 
dass der Port per Generics definiert ist, sehe ich leider keine 
Möglichkeit, die Range zu definieren, ohne im externen Package bereits 
die Ranges vorzudefinieren. Das Modul wird voraussichtlich mehrfach 
instanziiert, mit unterschiedlichen Generics.

Habt ihr Rat?

Viele Grüße,
dz

von Duke Scarring (Gast)


Lesenswert?

Wie oft ist mehrfach?
Wenn es sich (nur) um zwei oder drei unterschiedliche Instanziierungen 
handelt, würde ich verschieden Array-Type definieren.

Wenn es mehr wird, kann man im Code assertions unterbringen und dort den 
Bereich prüfen:
1
    -- ungetestet:
2
    -- pragma translate_off
3
    check_range_p : process( mcost_o)
4
    begin
5
        for index in range m_cost_o'range loop
6
            assert m_cost_o( index) < MAX_VALUE 
7
                report "overrange" severity failure;
8
        end loop;
9
    end process;
10
    -- pragma translate_on

Duke

von Dominik N. (dzo_pf)


Lesenswert?

Mehrfach ist zurzeit N-fach, ich versuche mich in der Hinsicht nicht 
einzuschränken. Zu Projektstart wurde definiert, dass in den Packages 
keine Konstanten definiert werden, um hier größtmögliche Flexibilität zu 
gewährleisten. Mir persönlich ist auch der Einsatz von Generics lieber, 
da ich mich dadurch sehr leicht in fremden Code hineinversetzen kann.

Das mit den Assertions wird zurzeit bei uns gemacht - ich bevorzuge 
jedoch Code, der ausdrücklich die Ports einschränkt zwecks einfacher 
Lesbarkeit (subjektiv). Naja, vielleicht wird das einfacher, wenn 2027 
VHDL2017 rauskommt, und man dann mit Interfaces seine Ports definieren 
kann...

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.