Перейти к содержанию
    

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

44 minutes ago, Flip-fl0p said:

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

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

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

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

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

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, jenya7 сказал:

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

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


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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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;

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а если я создам на ПЛЛ клок 160 мега вместо 100, все эти пляски с бубнами не нужны будут?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...