![]() |
|
|
|
#1 |
|
Hi all,
my objective is to get outpn value when rising_edge of clk and low reset. when i written code , and in simulation result outpn value is comes after one clk cycle after reset goes to low, but my need is to get outpn at the moment reset goes low. here is my code. entity pn is port( clk,reset : in std_logic; outpn : std_logic); end pn; architecture test of pn is type data is array(1 to 6) of std_logic; signal buff : data; begin process(clk,reset) variable input : std_logic; begin if reset = '1' then outpn <= 'X'; elsif clk'event and clk ='1' then input := buff(1) xor buff(6); buff(1) <= input; buff(2) <= buff(1); buff(3) <= buff(2); buff(4) <= buff(3); buff(5) <= buff(4); buff(6) <= buff(5); end if; outpn <= buff(6);] end process; end test; J.Ram |
|
|
|
|
#2 |
|
Posts: n/a
|
J.Ram schrieb: > Hi all, > my objective is to get outpn value when rising_edge of clk and low > reset. > when i written code , and in simulation result outpn value is comes > after one clk > cycle after reset goes to low, but my need is to get outpn at the > moment reset goes low. > here is my code. > entity pn is > port( > clk,reset : in std_logic; > outpn : std_logic); > end pn; > architecture test of pn is > type data is array(1 to 6) of std_logic; > signal buff : data; > begin > process(clk,reset) > variable input : std_logic; > begin > if reset = '1' then > outpn <= 'X'; > elsif clk'event and clk ='1' then > input := buff(1) xor buff(6); > buff(1) <= input; > buff(2) <= buff(1); > buff(3) <= buff(2); > buff(4) <= buff(3); > buff(5) <= buff(4); > buff(6) <= buff(5); > end if; > outpn <= buff(6);] > end process; > end test; is this what do you want: library ieee; use ieee.std_logic_1164.all; entity pn is port ( clk: in std_logic; reset: in std_logic; outpn: out std_logic ); end pn; architecture test of pn is type data is array(1 to 6) of std_logic; signal buff : data; begin process(clk, reset) variable input : std_logic; begin if reset = '1' then outpn <= '0'; elsif( (clk'event and clk ='1') or (reset'event and reset = '0') ) then input := buff(1) xor buff(6); buff(1) <= input; buff(2) <= buff(1); buff(3) <= buff(2); buff(4) <= buff(3); buff(5) <= buff(4); buff(6) <= buff(5); outpn <= buff(6); end if; end process; end test; |
|
|
|
#3 |
|
Posts: n/a
|
uvbaz schrieb: > elsif( (clk'event and clk ='1') or (reset'event and reset = '0') ) You need a very good synthesis tool to synthesis the code in the desired way. (and a technology allowing logic in the clock path). You will further have big trouble with timig analysis of this construct. I guess[1] the real code should be signal PNcount : std_ulogic_vector(5 downto 0); process (clk, Rst) if reset_active then PNcount<= Seed; elsif rising_edge(Clk) then PNcount <= PNcount(4 downto 0) & (PNcount(5) XOR PNCount(0); end if; end process Outpn<=PNcount(5); bye Thomas [1] The OP was a bit confuse for me about what he really wanted |
|