Datentyp initialisieren

OP #7700042
Lesenswert?
• ▲
▼

Hallo,

ich habe ein Projekt von meinem Vorgaenger geerbt. Er hat ein universelles Modul "delay_generic" geschrieben. Fuer die Simulation moechte ich den Wert von data jetzt initialisieren, bzw. auf 0 setzen. Wie kann ich das machen?

Gruss

Max

1
library ieee;
2
use ieee.std_logic_1164.all;
3

4
entity delay_generic is
5
  generic (
6
    type DATA_TYPE;
7
    LATENCY : natural
8
  );
9
  port (
10
    clk  : in  std_logic;
11
    din  : in  DATA_TYPE;
12
    dout : out DATA_TYPE
13
  );
14
end;
15

16
architecture rtl of delay_generic is
17
begin
18
  latency_generate : if (LATENCY = 0) generate
19
    dout <= din;
20
  else generate
21
    delay_block : block is
22
      type data_vector is array (natural range <>) of DATA_TYPE;
23
      signal data : data_vector(0 to LATENCY - 1); --  := (others => '0');
24
    begin
25
      process (clk) is
26
      begin
27
        if rising_edge(clk) then
28
          data <= din & data(data'left to data'right - 1);
29
        end if;
30
      end process;
31
      dout <= data(data'right);
32
    end block;
33
  end generate;
34
end;
Beitrag #7700619 wurde von einem Moderator gelöscht.
#7700805
Lesenswert?
• ▲
▼

Max M. schrieb:

Fuer die Simulation moechte ich den Wert von data jetzt initialisieren, bzw. auf 0 setzen. Wie kann ich das machen?

Nee, willst Du nicht. Du willst den Wert von data auf den Wert initialisieren, der für den gewählten Typ die 0 darstellt. Das ist was anderes. Dazu musst Du den Wert irgendwie zum Elaborationszeitpunkt dahin bringen.

Zum Beispiel über ein zusätzliches Generic:

1
...
2
entity delay_generic is
3
  generic (
4
    type DATA_TYPE;
5
    LATENCY : natural;
6
    init_value : DATA_TYPE
7
  );
8

9
...
10
      signal data : data_vector(0 to LATENCY - 1) := (others => init_value);
11
...

Oder - wenn Du sowohl faul als auch schlau bist (und es dich nicht stört, dass andere den "Trick" erst mal nicht erkennen):

mit dem Wissen, dass (z.B.) uninitialisierte std_logic in der Simulation nicht deswegen den Wert 'U' annimmt, weil sie nicht initialisiert ist (wer euch das beigebracht hat, hat gelogen), sondern weil sie mit 'U' initialisiert wird (weil 'U' der "linkste" mögliche Wert des Typs ist und alle Signale in VHDL in der Simulation mit eben dem initialisiert werden) kannst Du die Initialisierung mit 0 einfach dadurch erzwingen, indem Du einen Datentyp nimmst, der eben 0 als "leftmost" Wert hat.

Also z.B. natural oder bit (oder irgendein anderer, selbst definierter Typ, dessen mögliche "leftmost value" eben 0 entspricht). Dazu musst Du an dem existierenden Code gar nichts ändern (möglicherweise aber aus anderen Gründen, aber da kommst Du noch drauf).

Persönliche Seite #7701320
Lesenswert?
• ▲
▼

Max M. schrieb:

Fuer die Simulation moechte ich den Wert von data jetzt initialisieren, bzw. auf 0 setzen. Wie kann ich das machen?

Ich tendiere bei solchen Fragen immer dazu, das ausdrücklich zu Beginn der Simulation zu tun. Man definiert den Anfangszustand so, wie man ihn in der Simulation voraussetzt. Gfs untersucht man so nämlich unterschiedliche Anfangsszenarien, was ja gerne ausgelassen wird und dann zur Verwunderung führt.

Fest im synthestisierte Initialisierungen machen in der Simulation nur dann Sinn, wenn wirklich garantiert ist, dass die HW hernach auch wirklich so arbeitet. Daher macht an der Stelle ein echter ausdrücklicher Reset auch wieder Sinn.

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.