Цитата(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 триггера для ресинхронизации на остальные линии, например шину данных. А эту конструкцию используйте для управляющих сигналов. Если жалко триггеры, смотрите по ситуации. Если у вас исключена возможность того, что за время обработки сигнала управления данные изменятся, то дерзайте.
ПС: Когда начинал на ПЛИС, мучился тем же вопросом ...