myq 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Привет, коллеги. Возникла в уменя дискуссия с ASIC'овцем про Async FIFO. Утверждает, что стандартного Async dual clock FIFO c счётчиками Грея и синхронизаторами недостаточно для стабильной работы. Моё мнение - достаточно, а если что, надо брать более длинные синхронизаторы. Что посоветуете, где правда? Речь, разумеется, не идёт про rad grade и всё такое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Приветствую! Привет, коллеги. Возникла в уменя дискуссия с ASIC'овцем про Async FIFO. Утверждает, что стандартного Async dual clock FIFO c счётчиками Грея и синхронизаторами недостаточно для стабильной работы. Моё мнение - достаточно, а если что, надо брать более длинные синхронизаторы. Что посоветуете, ... Посоветую привести аргументы обоих сторон. ... где правда? Точно не в ногах! :) Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Ivan_ 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Михаил, привет! https://habrahabr.ru/post/321674/ вот этот пост интересен, там еще народ в комментариях нашел ошибку у автора и приводит кучу аргументов и ссылок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
myq 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Михаил, привет! https://habrahabr.ru/post/321674/ вот этот пост интересен, там еще народ в комментариях нашел ошибку у автора и приводит кучу аргументов и ссылок Лексика не понравилась. Resync - правильно, Reclock - допустимо, Retact - это уже какой-то язык с Брайтон-Бич ("Вам чиз как - послайсить или целым писом?" - отвратно же). И потом они утонули, обсуждая изобретённый автором велосипед вместо кода Грея. То ли он про него не знает, то ли знает и не применяет, не охото в это погружаться. Это как начать решать систему уравнений и погрязнуть в дискуссиях о формуле дискриминанта. "Запись в FIFO одновременно со сбросом...." - а нафига расставлять себе грабли и потом удивляться... Надо просто аккуратно писать код. p.s. Надо читать знаменитые 2 pdf от Клиффорда Саммингса, вот код на примере его статей: http://subversion.assembla.com/svn/ecpe-29...ll_async_fifo.v Так вот, мой вопрос - этого достаточно для ASIC, или надо что-то ещё. Мой визави утверждает, что _недостаточно_, и надо мониторить FIFO на предмет дублирования и пропадания данных на выходе. Моё короткое мнение - это чушь собачья, т.к. FIFO - это не трёхрегистровый синхронизатор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба И все же, вопрос непонятен. Что значит - достаточно или недостаточно? 1. Для начала, любая память глубоко внутри полностью асинхронна. Компилятор памяти может ее упаковать по Вашему желанию - с триггерами по адресу, триггерами по входу данных, триггеру по выходу данных, либо вообще безо всяких триггеров. Кроме того, память бывает многопортовая. В Вашем случае, речь видимо идет о двупортовой памяти с двумя взаимо-асинхронными синхронными интерфейсами. Итак, когда с памятью стало понятно, следующий вопрос - управление этой памятью 2. Поскольку контроллер записи в память работает на одном клоке, а контроллер чтения на другом, получаем два асинхронных клоковых домена. Для них справедливо правило - ставить два триггера на любой сигнал, пересекающий границу доменов. В общем случае, это статусы FIFO_Full и FIFO_Empty, но в зависимости от реализации могут быть и другие сигналы. Делаю вывод, что вопрос касался пункта 2 - сколько триггеров ставить на пересинхронизацию сигналов управления между клоковым доменом записи, и клоковым доменом чтения. Ответ - в общем случае достаточно 2 триггеров, но если частоты под гигагерц, то лучше ставить 3. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex11 3 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба Без претензии на теорию, мегафункции FIFO от Altera у меня глючили на CYCLONE 3 постоянно - то не успевают, то двоят, занимают вдвое больше памяти, чем требуется, то еще что-нибудь. Пришлось написать свой без претензий на общность, но на тех же принципах - код Грея в счетчиках, пересинхронизация на 2 триггерах - и о чудо - никаких сбоев и все влезает по объему. Так что, вопрос - что имелось ввиду при разговоре о "достаточно". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
myq 0 7 марта, 2017 Опубликовано 7 марта, 2017 · Жалоба И все же, вопрос непонятен. Что значит - достаточно или недостаточно? 1. Для начала, любая память глубоко внутри полностью асинхронна. Компилятор памяти может ее упаковать по Вашему желанию - с триггерами по адресу, триггерами по входу данных, триггеру по выходу данных, либо вообще безо всяких триггеров. Кроме того, память бывает многопортовая. В Вашем случае, речь видимо идет о двупортовой памяти с двумя взаимо-асинхронными синхронными интерфейсами. Итак, когда с памятью стало понятно, следующий вопрос - управление этой памятью 2. Поскольку контроллер записи в память работает на одном клоке, а контроллер чтения на другом, получаем два асинхронных клоковых домена. Для них справедливо правило - ставить два триггера на любой сигнал, пересекающий границу доменов. В общем случае, это статусы FIFO_Full и FIFO_Empty, но в зависимости от реализации могут быть и другие сигналы. Делаю вывод, что вопрос касался пункта 2 - сколько триггеров ставить на пересинхронизацию сигналов управления между клоковым доменом записи, и клоковым доменом чтения. Ответ - в общем случае достаточно 2 триггеров, но если частоты под гигагерц, то лучше ставить 3. Согласен с доводами, считаю ваш ответ -- "достаточно" :) Без претензии на теорию, мегафункции FIFO от Altera у меня глючили на CYCLONE 3 постоянно - то не успевают, то двоят, занимают вдвое больше памяти, чем требуется, то еще что-нибудь. Пришлось написать свой без претензий на общность, но на тех же принципах - код Грея в счетчиках, пересинхронизация на 2 триггерах - и о чудо - никаких сбоев и все влезает по объему. Так что, вопрос - что имелось ввиду при разговоре о "достаточно". В старые и не очень времена у обоих вендоров было много косяков. С DDR-контроллером, PLLями, трансиверами, да бог знает с чем ещё, возможно и с FIFO. Я вот нашёл Sim-Syn mismatch для Xilinx FIFO последних версий (годичной давности). Но в целом я про то, надо ли вводить доп. контроль или нет. Прихожу к выводу, что нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shivers 0 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Несколько лет назад сталкивались с тем, что Quartus вставляет собственную логику в контроллер фифо, после чего фифо перестает работать. Название этой логики не помню, но она блокировала чтение из того же адреса, куда велась запись. О вставке этой логики была соответствующая строка в логе: inferred что там. Проблема вылечилась тем, что в настройках Quartus просто запретили вставлять эту логику. После чего все заработало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба 2. Поскольку контроллер записи в память работает на одном клоке, а контроллер чтения на другом, получаем два асинхронных клоковых домена. Для них справедливо правило - ставить два триггера на любой сигнал, пересекающий границу доменов. В общем случае, это статусы FIFO_Full и FIFO_Empty, но в зависимости от реализации могут быть и другие сигналы. Вопрос: к счетчикам Грея пересекающим домены это тоже относится? И ещё вопрос: нет ли требования на разброс задержек между разрядами счетчика при пересечении доменов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 8 марта, 2017 Опубликовано 8 марта, 2017 · Жалоба Вопрос: к счетчикам Грея пересекающим домены это тоже относится? И ещё вопрос: нет ли требования на разброс задержек между разрядами счетчика при пересечении доменов? Думаю, если взять карандаш и бумагу и немного порисовать, то точно найдутся ответы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvladim 0 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба Думаю, если взять карандаш и бумагу и немного порисовать, то точно найдутся ответы. С вашими карандашом и бумагой какие ответы получаются? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба С вашими карандашом и бумагой какие ответы получаются? 1) да 2) есть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба Async FIFO. Можно узнать что значит Async FIFO? Фифо с независимыми клоками? Вообще же вопрос на уровне "достаточно ли иметь голову и 4 конечности чтобы быть человеком". Фифо это чуть больше чем счётчик грея и синхронизаторы, которые в любом случае есть всегда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
myq 0 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба Можно узнать что значит Async FIFO? Фифо с независимыми клоками? Ответ на 1й вопрос в 1м посте: ... Async dual clock FIFO ... Да, с двумя независимыми клоками. На что это ещё похоже? Вообще же вопрос на уровне "достаточно ли иметь голову и 4 конечности чтобы быть человеком". Не понял, поясните. Фифо это чуть больше чем счётчик грея и синхронизаторы, которые в любом случае есть всегда. Спасибокэп. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dr.Alex 0 9 марта, 2017 Опубликовано 9 марта, 2017 · Жалоба Не понял, поясните. Спасибокэп. Так вы сами себе и ответили. Если очевидно, что фифо это большая конструкция, включающая в себя "синхронизаторы" и "грея" как малые части, то почему родился такой наивный вопрос? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться