VHDL08: Integer-Array mit Range als Port

OP #5314232
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
Gast #5314324
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
OP #5314360
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...

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.