xilinx a jednorazovy hranou spusteny asynchronni reset

Jan Smrz jan.smrz@htc.honeywell.cz
Pátek Červenec 2 09:05:43 CEST 2004


ladmanj@volny.cz wrote:
> Omlouvam se dovolil jsem si vystoupit z puvodniho threadu, protoze
> treba odrazoval od cteni slovem verilog, ktere zde neni zcela na
> miste.
> 
> Mam posuvny registr, a potrebuji jej nulovat pri sestupne hrane,
> ale nesmi byt trvale v resetu pri nizke urovni. Proste reset
> pouze pri sestupne hrane.
> 
> Nemel by nekdo z Vas radu jak na to? Netrvam na verilogu, treba
> si to nejak prelozim. Tisicere diky.
> Jakub Ladman 
> 

    Pokud si pamatuji dobre na Xilinxy (i kdyz osobne mam zkusenost 
spise se starsi radou 4000), tak v kazde bunce muzete mit citlivost na 
hranu pouze na jeden signal (coz budou ve vasem pripade hodiny). Reset 
citlivy na hranu tedy nemuzete implementovat jako asychronni, ale jako 
synchronni.

    Muzete to zkusit treba takhle (VHDL)

library ieee;
use ieee.std_logic_1164.all;

entity shift_reg is
    port
    (
       reset		: in std_logic;
       clk		: in std_logic;
       data_in 		: in std_logic;
       data_out		: out std_logic_vector(20 downto 0)
    );
end shift_reg;


architecture rtl of shift_reg is


    signal reset_l	: std_logic;
    signal data_out_i	: std_logic_vector(20 downto 0);

begin

    shift_reg_P: process (clk)
    begin
       if clk = '1' and clk'event then
          if reset = '0' and reset_l = '1' then
	    data_out_i <= (others => '0');
	 else
	    for n in 20 downto 1 loop
	       data_out_i(n) <= data_out_i(n - 1);
	    end loop;
	    data_out_i(0) <= data_in;
	 end if;
	 reset_l <= reset;
       end if;
    end process;


    data_out <= data_out_i;

end rtl;
	

J.S.



Další informace o konferenci Hw-list