Frage

Mit VHDL möchte ich einige Register haben, die jeweils 16 Bit speichern.Ich habe also herausgefunden, dass VHDL über ein integriertes Array verfügt und ich es verwenden möchte, um 16 Bit in jedem Element in iy zu speichern. Daher möchte ich wissen, ob VHDL dieses Array tatsächlichen Registern zuordnet oder nicht.

War es hilfreich?

Lösung

Die kurze Antwort lautet: Nein – der Array-Typ lässt sich keinem Register zuordnen.

Die lange Antwort:

Der Array-Typ in VHDL ist lediglich eine indizierte Sammlung von Elementen desselben Typs.In Ihrem Fall würden Sie wahrscheinlich ein Array als Ausgabe einer Registerbank verwenden.

Angenommen, Sie haben eine Bank mit 8 Registern, die jeweils 16 Bits enthalten.Die Ausgabe dieser Bank wäre ein Array (der Größe 8) von 16-Bit-Vektoren.Die Komponentendeklaration für diese Registerbank würde etwa so aussehen:

 component reg8x16
  port(
   clock: in std_logic;
   reset: in std_logic;
   enable: in std_logic;
   rout : out r_array(0 to 7)
   );
 end component; 

rout ist Ihr Array registrierter Ausgänge aus der Registerbank.Sie können also die Ausgabe von Register 0 von der Bank dereferenzieren rout(0), was vom Typ ist std_logic_vector(15 downto 0).

Vergessen Sie auch nicht, den Array-Typ irgendwo zu deklarieren (normalerweise in einer Paketdatei).Es würde ungefähr so ​​aussehen:

type r_array is array (integer range <>) of std_logic_vector(15 downto 0);

Der (integer range <>) Die Anweisung ist eine Art Platzhalter für den Array-Indexbereich – sie wird später ausgefüllt, wenn der Array-Typ verwendet wird (z. B. in unserer Komponentendeklaration oben).

Ich bin mir nicht sicher, ob dies Ihre Frage beantwortet oder nicht.Ich werde nicht näher auf die Erstellung der reg8x16-Komponente eingehen.Im Grunde erstellen Sie einfach ein 16-Bit-Register, dessen Ausgabe vom Typ ist std_logic_vector(15 downto 0); (Sie können online nachschlagen, wie das geht ... es ist ziemlich einfaches VHDL).Dann instanziieren Sie einfach 8 dieser Register und fügen sie in die genannte Komponente ein reg8x16.

Andere Tipps

Ein Array ist genau wie jede andere Variable oder ein anderes Signal: Wenn Sie ein Verhalten beschreiben, das bedeutet, dass es sich an seinen Zustand von einer Uhr Tick zu einer anderen erinnern muss, werden Fliplops (oder Speicherblöcke, wenn die Bedingungen richtig sind) vom Synthesizer abgeleitet.

Jedes Array mit einem gültigen Bereich würde Drähten in der generierten Netzliste zuordnen. Dies ist ziemlich offensichtlich- Hardware enthält nur Tore und Drähte. Etwas wie ein (3 nach unten) (1 bis 0) würde zu einem 4x2- oder 8-Bit-Größendraht führen. Sie zeichnen jetzt individuelle Zugriffe wie a (3) (1) auf Indizes in diesem 1-dimensionalen Array ab. Ein (3) (1) ist also im Grunde genommen a (7).

überprüfen Dies Seite, überprüfen Sie auch die registrieren VHDL

Grundsätzlich ist es ein Array von std_logic_vector mit den erforderlichen Längen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top