componet mit port varialbler breite

OP (Firma: www.dossmatik.de) #4558702
Lesenswert?
• ▲
▼
Ich will eine Component schreiben, die unterschiedliche Datenbreite auf 
einen Port haben soll. Da muss ich nicht die Kompenenten für jede 
Pinanzahl einzeln warten.


Ich hatte das mir wie folgt vorgestellt.


in generic will ich die Daten Breite angeben.
1
entity general_IO_16 is
2
  generic(
3
    breite : integer
4

5
    );
6

7
  port(
8
       .....
9
       --Hardwarepins 
10
       OUTPUTS  : out std_logic_vector( platzhalter)
11
       );
12
end;
Gast #4558741
Lesenswert?
• ▲
▼
Und worin liegt jetzt das Problem?!?

Ich würde es so schreiben:
1
entity general_IO_16 is
2
  generic
3
  (
4
    width : natural
5
  );
6
  port
7
  (
8
    ...
9
    --Hardwarepins
10
    OUTPUTS : out std_logic_vector( width-1 downto 0)
11
  );
12
end entity general_IO_16;

Wenn es komplexer wird, sollte man eine Typdefinition draus machen und 
in ein package auslagern.

Duke
OP (Firma: www.dossmatik.de) #4559785
Lesenswert?
• ▲
▼
Das geht mit Vivado.
Ich hatte in Erinnerung, dass ich das schon mal vor längerer Zeit 
ausprobiert hatte. Und irgendwas hatte gemeckert. Ich glaube die breite 
des Vectors ist nicht definiert in der Componente.

Für solche Irrtümer ist zu Glück das Forum da.
Gast #4559853
Lesenswert?
• ▲
▼
René D. schrieb:
> wann wird diese Form überhaupt gebraucht?
Wenn der Breich (range) erst später festgelegt wird.
M.E. ist das eher bei Typdefinitionen sinnvoll:
1
type my_array_t is array( natural range <>) of signed( 15 downto 0);
2
...
3
signal measurement_values : my_array_t( 0 to 3);
4
...
Bei Portbeschreibungen habe ich es noch nicht verwendet.

Duke
Moderator (Firma: Titel) Persönliche Seite #4559876
Lesenswert?
• ▲
▼
René D. schrieb:
> wann wird diese Form überhaupt gebraucht?
Ganz am Anfang der numeric_std... ;-)

Bei Funktionen/Prozeduren ist sowas recht geschickt, weil dann die 
Wortbreite nicht explizit festgelegt sein muss. In der Funktion wird 
dann mit den entsprechenden Attributen auf dem Vektor gearbeitet. Hier 
z.B. die to_integer Funktion aus der numeric_std:
1
function TO_INTEGER(ARG: UNSIGNED) return NATURAL is
2
constant ARG_LEFT:INTEGER:= ARG'length-1;
3
alias XXARG:UNSIGNED(ARG_LEFT downto 0) is ARG;
4
variable XARG:UNSIGNED(ARG_LEFT downto 0); 
5
variable RESULT: NATURAL:= 0;
6
variable w : INTEGER:= 1;  -- weight factor
7
begin
8
  if (ARG'length<1) then
9
    assert NO_WARNING
10
    report "numeric_std.TO_INTEGER: null arg"
11
    severity warning;
12
    return 0;
13
  end if;
14
  XARG:= TO_01(XXARG);
15
  if (XARG(XARG'left)='X') then
16
    assert NO_WARNING
17
    report "numeric_std.TO_INTEGER: metavalue arg set to 0"
18
    severity warning;
19
    return 0;
20
  end if;
21
  for i in XARG'reverse_range loop
22
    if XARG (i) = '1' then  RESULT:= RESULT + w;
23
    end if;
24
    if (i /= XARG'left) then w := w + w;
25
    end if;
26
  end loop;
27
  return RESULT;
28
end TO_INTEGER;
OP (Firma: www.dossmatik.de) #4559972
Lesenswert?
• ▲
▼
Duke Scarring schrieb:
> René D. schrieb:
>> wann wird diese Form überhaupt gebraucht?
> Wenn der Breich (range) erst später festgelegt wird.
> M.E. ist das eher bei Typdefinitionen sinnvoll:
>
1
> type my_array_t is array( natural range <>) of signed( 15 downto 0);
2
> ...
3
> signal measurement_values : my_array_t( 0 to 3);
4
> ...
5
>
> Bei Portbeschreibungen habe ich es noch nicht verwendet.
>
> Duke


Wenn dann wäre es nicht als Typ interessant sondern als signal bzw. 
Portbeschreibung,

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.