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

Q13.1, Cyclone IV: MemoryCompiler/FIFO

Пытаюсь сделать FIFO с двумя клоками.

Есть проект со своим тактовым сигналом и есть данные от АЦП, сопровождаемые одним клоком (формируемым из проектного клока). Пытаюсь ввести между ними FIFO данных (dual clock) для исключения возможных неоднозначностей при взаимном джиттере этих тактовых сигналов - FIFO, содержащее не менее двух и не более восьми слов. Клок от АЦП может пропадать, эта ситуация (мусор на выходе FIFO) просто игнорируется.

Кроме того, это будет необходимо при возможном переходе на мультиплексированную шину от АЦП, когда за один период тактового сигнала передается две выборки.

 

КОроче, не получается... Вот кусочек проекта.

Ещё... Кто знает, означает ли примечание (4) в описани ug_fifo.pdf, что сигналы wrempty и rdempty можно использовать только в конфигурациях с разной шириной шин входа и выхода?

 

Для контроля работоспособности проекта используется версия этого блока без FIFO, просто с синхронизатором.

fifo.zip

ug_fifo.pdf

post-28634-1444551799_thumb.png

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

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


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

Любые варианты комбинационной логики с соответствующих выходов (количество занятых слов FIFO) на входы дают неработоспособные варианты схемы. Если "зажать" wrreq и rdreq на VCC - только в этом случае нет помех (шума) - но это не то, что хотелось бы от этой схемы получить (состояние между совеесм пусто и совсем заполнено).

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


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

Попробуйте сделать следующее:

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

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

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

 

При этом двупортовая память организована по принципу видеобуфера, т.е. в одну половину памяти только пишем, с другой половины памяти только читаем...

Можно попробовать сделать на регистрах, вместо использования блочной памяти

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


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

А зачем городить счетчик и кроссдоменную синхронизацию, если в fifo_dc это уже предусмотрено? Или оно на самом деле не работает и надол всё руками?

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


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

А зачем городить счетчик и кроссдоменную синхронизацию, если в fifo_dc это уже предусмотрено? Или оно на самом деле не работает и надол всё руками?

я Вам предложил без фифо.

Двухпортовая память + обвязка

 

PS фифо рабочее

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


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

Насколько понимаю, FIFO (особенно двуклоковые) крайне не любят работать в режиме "пропадания" такта.

Поставьте формирователь, который будет генерить такты из тактов АЦП даже в том случае, когда сами такты пропадают.

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


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

Ну это не пропадание...

Уточню: есть всегда идущий системный клок. Он идет наружу как LVDS, тактирует АЦП. От АЦП может идти либо тот же сигнал (текущая ситуация) либо с половинной частотой (мультиплексированная шина) либо сигнала нет (АЦП с поламперным птореблением с режиме передачи отправили в sleep).

Не очень понял генерить такты из тактов АЦП даже в том случае, когда сами такты пропадают.

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

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


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

Ну это не пропадание...

Уточню: есть всегда идущий системный клок. Он идет наружу как LVDS, тактирует АЦП. От АЦП может идти либо тот же сигнал (текущая ситуация) либо с половинной частотой (мультиплексированная шина) либо сигнала нет (АЦП с поламперным птореблением с режиме передачи отправили в sleep).

Не очень понял генерить такты из тактов АЦП даже в том случае, когда сами такты пропадают.

Если тактовый от АЦП является производным от системного, то зачем двухклоковое ФИФО? Что клоки от АЦП как-то сильно дрожат или сдвинуты?

Может быть действительно, входные данные захватить простым регистром под клоки АЦП, а уже потом их протолкнуть в обычную память с раздельными шинами на запись и на чтение... И работать она будет уже на системной частоте...

Вопрос в том, зачем именно ФИФО, если исходный клок берется от системного?

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


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

Ситуация с мультиплексированием данных - это не повод?

В общем случае и без этого есть (на мой взгляд) ситуация - в случае неизвестной природы внутренних преобразований клока в АЦП можно напороться на ситуацию, когда его клок может как опережать так и опаздывать от клока системного. Для чео мне и захотелось FIFO...

post-28634-1444768938_thumb.png

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

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


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

Любые варианты комбинационной логики с соответствующих выходов (количество занятых слов FIFO) на входы дают неработоспособные варианты схемы. Если "зажать" wrreq и rdreq на VCC - только в этом случае нет помех (шума) - но это не то, что хотелось бы от этой схемы получить (состояние между совеесм пусто и совсем заполнено).

А как с времянками по предустановке wrreq и rdreq перед клоками? И откуда они берутся... Ну, при чтении - понятно. А вот для записи?

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


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

Берутся с выходов состояния (количества слов) своей же половины FIFO через логическую функцию. сейчас rdreq = 0, если < 2, wrreq = 0, если >= 4.

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


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

Берутся с выходов состояния (количества слов) своей же половины FIFO через логическую функцию. сейчас rdreq = 0, если < 2, wrreq = 0, если >= 4.

Но ведь wrreq - это разрешение записи, а оно должно прийти ДО фронта входного клока. А если Вы формируете wrreq из сигналов на выходе, то они могут и не попасть ДО... Видимо поэтому, когда даете "всегда готов" для записи, то оно и работает...

 

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


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

Я понимаю, что wrreq снявшееся после того как 4 слова окажется в FIFO - это уже состояние "заполнившейся совсем" очереди. ДО начала записи оно и так яформировано. Там (вне FIFO) просто логика, без триггеров.

post-28634-1444770501_thumb.png

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

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


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

Я понимаю, что wrreq снявшееся после того как 4 слова окажется в FIFO - это уже состояние "заполнившейся совсем" очереди. ДО начала записи оно и так яформировано. Там (вне FIFO) просто логика, без триггеров.

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

 

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


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

Эти все гонки закончатся к началу следующего импульса - там всго 122 с копейками мегагерца... Обычный синхронный счетчик тоже с этими гонкаи работает.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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