Jump to content

    
Sign in to follow this  
jenya7

Два разных клока в одном процесе.

Recommended Posts

44 minutes ago, Flip-fl0p said:

Так чего мы ждем ?! Вкорячить синхронизатор на нужный сигнал и горя не знать. Почему еще не сделали это ?

что то странное происходит. не могу понять что.

я почему выносные модули сделал. если засунуть второй клок в модуль

entity NEW_CHARGE_CONT is
port
(
    CLK_120M       : in std_logic;
    CLK_100M       : in std_logic;
  

ну и так далее, то у меня почему то ломается другой модуль который принимает команды по SPI. причем никакой связи между модулями нет.

Edited by jenya7

Share this post


Link to post
Share on other sites
8 минут назад, jenya7 сказал:

что то странное происходит. не могу понять что.

я почему выносные модули сделал. если засунуть второй клок в модуль


entity NEW_CHARGE_CONT is
port
(
    CLK_120M       : in std_logic;
    CLK_100M       : in std_logic;
  

ну и так далее, то у меня почему то ломается другой модуль который принимает команды по SPI. причем никакой связи между модулями нет.

 

Это Вы так думаете, что связи нет. А она есть. И скорее всего ломается из-за неправильных СDC или ещё где-то.

Share this post


Link to post
Share on other sites
2 minutes ago, Flip-fl0p said:

Это Вы так думаете, что связи нет. А она есть. И скорее всего ломается из-за неправильных СDC или ещё где-то.

как один клок может повлиять на другой. и сигналы все внутренние, не выходят наружу.

rst3 <= not rst2 and rst1;

process (CLK_120M)
variable del : integer := 0;
begin 
	 
   if (rising_edge(CLK_120M)) then	
		
		 if (count_reset = '1') then
		     locked_reset <= '1';
		 end if;
	
	    if (locked_reset = '1') then
	        del := del + 1;
		     if (del = 4) then
			     del := 0;
		        locked_reset <= '0';
		     end if;
	    end if;
	end if;
end process;

process (CLK_100M)
begin 
    if (rising_edge(CLK_100M)) then	
        rst1 <= locked_reset;
	     rst2 <= rst1;
	 end if;	  
end process;


process (CLK_100M)
begin
    if (rising_edge(CLK_100M)) then
	  
	if (count_ena = '1') then
	
	     if (rst3 = '1') then
		      ticks_counter <= (others => '0');
				s_ms_counter <= (others => '0');
		  else
		      
            ticks_counter <= ticks_counter + '1';
            if (ticks_counter = TICKS_FOR_1MS) then
		          ticks_counter <= (others => '0');
		          s_ms_counter <= s_ms_counter + '1';
            end if;
				
        end if;
		  
		 end if;
		  
	 end if;	  
end process;

 

Share this post


Link to post
Share on other sites

У вас неправильно сформирован rst3. В синхронизаторе можно использовать только выход второго триггера. Добавьте третий триггер в цепочку, формируйте rst3 из выходов второго и третьего.

Share this post


Link to post
Share on other sites
3 minutes ago, andrew_b said:

У вас неправильно сформирован rst3. В синхронизаторе можно использовать только выход второго триггера. Добавьте третий триггер в цепочку, формируйте rst3 из выходов второго и третьего.

так?

rst4 <= not rst3 and rst2; 

process (CLK_100M)
begin 
    if (rising_edge(CLK_100M)) then	
        rst1 <= locked_reset;
        rst2 <= rst1;
        rst3 <= rst2;
    end if;	  
end process;

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this