www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Null an generisch erzeugten std_vector zuweisen


Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte ein D-Register beliebiger Länge mit asynchronem Reset 
beschreiben. Das heißt, der Ausgang soll damit auf "0000...0" gesetzt 
werden. Nun weiß ich nicht, wie ich diese Zuweisung in der Architecture 
umsetze, wenn ich noch gar nicht weiß, wie lang das Ausgangswort ist.

Gruß Philip

Autor: franz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Philip,

>> ich möchte ein D-Register beliebiger Länge mit asynchronem Reset
>> beschreiben.
Das würde ich lieber nicht machen, wenn dann synchroner Reset

>> Das heißt, der Ausgang soll damit auf "0000...0" gesetzt
>> werden.
AUSGANG <= (others => '0');

>> wenn ich noch gar nicht weiß, wie lang das Ausgangswort ist.
Stichwort: generic

Gruß
franz

Autor: Philip (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das war genau das was ich gesucht habe, danke!

Das mit dem generic war mir schon klar, aber ich kann ja keine Zuweisung

Ausgang <= '00000' machen, wenn Ausgang beliebig lang ist.

Autor: T.M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>> >> ich möchte ein D-Register beliebiger Länge mit asynchronem Reset
>> >> beschreiben.
>> Das würde ich lieber nicht machen, wenn dann synchroner Reset

Es gibts in manchen Fällen auch gute Gründe für einen asynchronen Reset, 
siehe:
http://www.sunburst-design.com/papers/CummingsSNUG...
http://www.sunburst-design.com/papers/CummingsSNUG...

>> Das mit dem generic war mir schon klar, aber ich kann ja keine Zuweisung
>> Ausgang <= '00000' machen, wenn Ausgang beliebig lang ist.

Ausgang <= (others => '0');

funktioniert immer, wenn der Vektor mehr als 1 bit hat.

Autor: NorthernLights (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hei,

hier ein Beispiel für ein Register mit beliebiger Breite und Resetwert.

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;


entity dff_n is
generic(
  dff_width   : positive := 8;
  reset_value : positive := 16#0#); -- Hexwerte : 16#WERT#
port(
  clk : in std_logic;
  rst : in std_logic;

  d   :  in std_logic_vector(dff_width-1 downto 0);
  q   : out std_logic_vector(dff_width-1 downto 0));
end entity dff_n;

architecture dff_n_arch of dff_n is
  signal q_int : std_logic_vector(dff_width-1 downto 0);
begin

DFF_N_REG : process(clk)
begin
  if rising_edge(clk) then
    if rst = '1' then
      q_int <= std_logic_vector(conv_unsigned(reset_value, dff_width));
    else
      q_int <= d;
    end if;
  end if;
end process;

q <= q_int;

end architecture dff_n_arch;

Gruss,
  NL

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.