Null an generisch erzeugten std_vector zuweisen

Gast #658390
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
Gast #658401
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
Gast #658492
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/CummingsSNUG2002SJ_Resets.pdf
http://www.sunburst-design.com/papers/CummingsSNUG2003Boston_Resets.pdf

>> 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.
Gast #660001
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

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.