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
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
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.
>> >> 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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.