Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 (изменено) · Жалоба Всем здравствуйте, подскажите как то можно побороть это явление, детектор фронтов иногда сваливается в неопределенное состояние, от чего все остальное в моем коде криво работает. Входной сигнал синхронизируется в сдвиговом регистре и с этого же регистра сигнал снимается на детектор фронтов. На картинке 2 момента где детектор фронтов выдает неопределенное состояние, симуляция в плис с учетом задержек. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; entity edgedetector is port ( clk : in std_logic; signal_in : in std_logic; all_edge : out std_logic ); end edgedetector; architecture Behavioral of edgedetector is signal shift_reg : std_logic_vector(1 downto 0); begin edge_detector : process(clk) begin if(rising_edge(clk)) then shift_reg <= shift_reg(0) & signal_in; end if; end process edge_detector; all_edge <= shift_reg(0) xor shift_reg(1); end Behavioral; Изменено 14 апреля, 2019 пользователем Nikolas72_91 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 151 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба Увеличьте масштаб до видения тактовой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 2 часа назад, Nikolas72_91 сказал: Описание вполне корректное. Скорее всего задана слишком высокая тактовая частота для симуляции. И поскольку Вы моделируете с учетом задержек, то и результат получается соответствующий. И измените входной синхронизатор до двух триггеров. 2 триггера на синхронизатор. 1 триггер на детектор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 12 минут назад, Plain сказал: Увеличьте масштаб до видения тактовой. Вот увеличил, чтобы видно было, тактовая частота 48 МГц. 4 минуты назад, Flip-fl0p сказал: Описание вполне корректное. Скорее всего задана слишком высокая тактовая частота для симуляции. И поскольку Вы моделируете с учетом задержек, то и результат получается соответствующий. Так а как мне симулировать, если в реальном устройстве так же работает с косяками. Поэтому и проверяю с реальными задержками, тактовая частота у меня 48 МГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 1 час назад, Nikolas72_91 сказал: Вот увеличил, чтобы видно было, тактовая частота 48 МГц. Так а как мне симулировать, если в реальном устройстве так же работает с косяками. Поэтому и проверяю с реальными задержками, тактовая частота у меня 48 МГц. Обычно симуляция с задержками не нужна. Достаточно провести функциональное моделирование. А правильность работы схемы задается констрейнами. Какие ошибки Вам говорит временной анализатор ? P.S. Я предпочитаю синхронизатор держать отдельным модулем, с правильными атрибутами синтеза. Т.е отдельно модуль для синхронизации с клоковым доменом, отдельно модуль детектора фронтов... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Volkov 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 1 hour ago, Nikolas72_91 said: Всем здравствуйте, подскажите как то можно побороть это явление, детектор фронтов иногда сваливается в неопределенное состояние, от чего все остальное в моем коде криво работает. Входной сигнал синхронизируется в сдвиговом регистре и с этого же регистра сигнал снимается на детектор фронтов. На картинке 2 момента где детектор фронтов выдает неопределенное состояние, симуляция в плис с учетом задержек. library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; use ieee.std_logic_unsigned.all; entity edgedetector is port ( clk : in std_logic; signal_in : in std_logic; all_edge : out std_logic ); end edgedetector; architecture Behavioral of edgedetector is signal shift_reg : std_logic_vector(1 downto 0); begin edge_detector : process(clk) begin if(rising_edge(clk)) then shift_reg <= shift_reg(0) & signal_in; end if; end process edge_detector; all_edge <= shift_reg(0) xor shift_reg(1); end Behavioral; shift_reg(1) <= shift_reg(0) & signal_in; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 2 минуты назад, Volkov сказал: shift_reg(1) <= shift_reg(0) & signal_in; Что это даст? Так вписал вообще ошибку выдает. 9 минут назад, Flip-fl0p сказал: Обычно симуляция с задержками не нужна. Достаточно провести функциональное моделирование. А правильность работы схемы задается констрейнами. Какие ошибки Вам говорит временной анализатор ? P.S. Я предпочитаю синхронизатор держать отдельным модулем, с правильными атрибутами синтеза. Т.е отдельно модуль для синхронизации с клоковым доменом, отдельно модуль детектора фронтов... Я так понял это нужно, временного анализатора. А правильность работы схемы задается констрейнами - как это сделать, где прочитать можно про это? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Volkov 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 6 minutes ago, Nikolas72_91 said: Что это даст? Так вписал вообще ошибку выдает. Та да, что то я не так читаю конкатанацию. Определите начальное cостояние регистра signal shift_reg : std_logic_vector(1 downto 0):=(others=>'0'); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 2 минуты назад, Volkov сказал: Та да, что то я не так читаю конкатанацию. Определите начальное cостояние регистра signal shift_reg : std_logic_vector(1 downto 0):=(others=>'0'); Да про начальное состояние я забыл, спасибо, но это не решает проблему с неопределнным состоянием. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 151 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 31 минуту назад, Nikolas72_91 сказал: в реальном устройстве так же работает с косяками Одно с другим не связано, у Вас выход схемы неоднозначный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 1 минуту назад, Plain сказал: Одно с другим не связано, у Вас выход схемы неоднозначный. И что это значит, как быть в этом случае? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 151 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба Синхронизируйте его. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zig 26 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба Увеличьте длину сдвигового регистра (как предлагали выше). Так, чтобы первые минимум два триггера пересаживали входной сигнал на частоту CLK (борьба с метастабильностью), а дальнейшие триггера - ваш выделитель фронта. И не забудьте описать констрейнты по частоте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nikolas72_91 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба 1 минуту назад, Plain сказал: Синхронизируйте его. У меня входной сигнал синхронизируется с клоком с этого же синхронизатора снимаются данные для детектора фронтов. Выход зачем еще синхронизировать то с клоком? Только что, Zig сказал: Увеличьте длину сдвигового регистра (как предлагали выше). Так, чтобы первые минимум два триггера пересаживали входной сигнал на частоту CLK (борьба с метастабильностью), а дальнейшие триггера - ваш выделитель фронта. И не забудьте описать констрейнты по частоте. Скинь пожалуйста где про это можно почитать? Я просто про это вообще не в курсе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 14 апреля, 2019 Опубликовано 14 апреля, 2019 · Жалоба Вот, вообще не понимаю. Схема выделения фронтов, на плис, при постоянной тактовой и постоянном входном сигнале, и при этом 12 фронтов выделяет а 13-й нет!!! Как такое может быть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться