реклама на сайте
подробности

 
 
> Синхронная и асинхронная логика, Достоинства, недостатки, сочетания и переходы.
AlphaMil
сообщение Aug 2 2010, 23:56
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 1-01-10
Из: Минск, Беларусь
Пользователь №: 54 588



Насущный вопрос: как несинхронный сигнал, приходящий на вывод ПЛИС сделать синхронным с заданным клоком, но длиной в один период? Исходный сигнал существенно длиннее клокового.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
tema-electric
сообщение Aug 9 2010, 12:50
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 309
Регистрация: 18-04-08
Из: Томск
Пользователь №: 36 887



Цитата(AlphaMil @ Aug 3 2010, 06:56) *
Насущный вопрос: как несинхронный сигнал, приходящий на вывод ПЛИС сделать синхронным с заданным клоком, но длиной в один период? Исходный сигнал существенно длиннее клокового.


Просто и сердито на VHDL пользую обработчик фронта. По крайней мере я его так называю. Эта же конструкция позволяет отслеживать и спад входящих асинхронных длинных сигналов. Идея заключается в том, что входной сигнал сначала проходит триггер, работающий на системной частоте. Дальше полученный "синхронный сигнал" поступает на вход второго триггера задержки. С обоих триггеров сигнал поступает на комбинаторную логику. Если вам нужно реагировать по изменению сигнала, применяем операцию xor, если на фронт или спад, один из сигналов инвертируется. На выходе такой цепочки вы получите импульс длиной в один период вашей системной тактовой частоты.

Код
--------------------------------------------------------------------------------------------------
-- синхронизация длинного по отношению к тактовой частоте системы асинхронного сигнала с системной частотой.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity Synchonizator is
port
(
  Clk                : in std_logic;
  Reset            : in std_logic;
  InSignal            : in std_logic;
  Signal_is_change    : out std_logic; -- изменение сигнала
  Signal_is_fall    : out std_logic; -- фронт сигнала
  Signal_is_rise    : out std_logic  -- спад сигнала
  );
end Synchonizator;

architecture rtl of Synchonizator is

  signal sInput_signal    : std_logic_vector(1 downto 0); -- триггеры задержки

begin

   sInput_signal <= sInput_signal(0)&InSignal when Reset = '1' else
                 sInput_signal(0)&InSignal when rising_edge(Clk);

   Signal_is_change    <= sInput_signal(0) xor sInput_signal(1);    -- изменение сигнала
   Signal_is_rise    <= sInput_signal(0) xor not sInput_signal(1);    -- фронт сигнала
   Signal_is_fall    <= not sInput_signal(0) xor sInput_signal(1);    -- спад сигнала
  
end rtl;

--------------------------------------------------------------------------------------------------


Схема ...
Прикрепленное изображение


Если будете применять данную конструкцию, не забывайте добавлять по 2 триггера для ресинхронизации на остальные линии, например шину данных. А эту конструкцию используйте для управляющих сигналов. Если жалко триггеры, смотрите по ситуации. Если у вас исключена возможность того, что за время обработки сигнала управления данные изменятся, то дерзайте.

ПС: Когда начинал на ПЛИС, мучился тем же вопросом ...

Сообщение отредактировал tema-electric - Aug 9 2010, 13:03


--------------------
Кто сказал МЯУ?
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 9 2010, 13:19
Сообщение #3


я только учусь...
******

Группа: Модераторы
Сообщений: 3 447
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(tema-electric @ Aug 9 2010, 15:50) *

я схему синхронизации ранее предлагал ...
Какая разница?


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
tema-electric
сообщение Aug 9 2010, 13:34
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 309
Регистрация: 18-04-08
Из: Томск
Пользователь №: 36 887



Цитата(Maverick @ Aug 9 2010, 20:19) *
я схему синхронизации ранее предлагал ...
Какая разница?


Да в принципе никакой. Исключение только в наличии детектора change и в правильном сбросе такой цепочки. Пардон что проглядел laughing.gif .

Сообщение отредактировал tema-electric - Aug 9 2010, 13:37


--------------------
Кто сказал МЯУ?
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 18:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016