Способы настройки данных RAM перед часами

Я очень новичок в цифровом дизайне (мой опыт работы с программным обеспечением). Я пытаюсь использовать некоторую блочную ОЗУ на Xilinx FPGA и хочу знать, каковы обычные методы настройки сигналов управления ОЗУ относительно часов.

В настоящее время у меня есть одни часы, используемые во всех моих проектах. ОЗУ может выполнять чтение/запись при каждом переднем фронте, и я хочу использовать его с такой скоростью. Конечно, управляющие сигналы должны быть установлены за некоторое время до переднего фронта тактового сигнала. Я предполагаю, что есть несколько способов сделать это:

  1. Установите сигналы на заднем фронте часов.
  2. Установите сигналы на нарастающем фронте. Инструмент синтеза достаточно умен, чтобы знать, чего я хочу, знает необходимое время для настройки и позаботится обо всем.
  3. Установите сигналы на нарастающем фронте. Инструмент синтеза недостаточно умен, но я могу делать забавные вещи с временными ограничениями, чтобы настроить сигналы достаточно рано.
  4. Используйте два тактовых сигнала, слегка сдвинутых по фазе, установите сигналы по переднему фронту ведущего тактового сигнала.
  5. Какие-то другие подходы?

Какие из них возможны, какие на самом деле хороши или обычно используются, и есть ли какие-то преимущества или недостатки, помогающие выбрать между ними?

Изменить: я использую простой VHDL из соображений переносимости, а не использую CoreGen или примитивы, специфичные для Xilinx. Однако я следую документации Xilinx и пишу VHDL таким образом, чтобы инструменты могли определить правильный тип ОЗУ («Руководство по кодированию RAM HDL в UG687, если кому-то интересно»). Инструменты, похоже, делают это правильно.

Ответы (3)

Вам не нужно использовать другой фронт или фазовый сдвиг часов.

Просто установите данные по нарастающему фронту, а затем следующий нарастающий фронт запишет их в память (согласно варианту 2).

Запуск статического временного анализа сообщит вам о любых нарушениях удержания/настройки. Но если вы добавите к вашим часам правильные ограничения формы сигнала (т. е. частоту, коэффициент заполнения), установщик сделает все возможное, чтобы выполнить требования по времени.


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

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

Я, вероятно, не буду отвечать на 5 дополнительных вопросов, но я отвечу на ваш главный вопрос.

Я хочу знать, каковы обычные методы настройки сигналов управления ОЗУ относительно часов.

Обычный метод заключается в том, что у производителя есть довольно подробное примечание к приложению о времени их интерфейса RAM. например, быстрый поиск в Google нашел это примечание к приложению для QDR II SRAM с использованием virtex-5.

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

Похоже, вы хотите сделать это вручную, но при создании экземпляра блока есть несколько преимуществ.

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

  2. Блок уже позаботится о времени, настройке, удержании, нескольких часах и т. Д., Пока вы остаетесь в рамках его ограничений и не кормите его мусором.

  3. Блок уже знает каждый доступный тип блока в целевом кремнии и будет стараться изо всех сил сохранять небольшую площадь или высокую скорость (иногда это другая настройка).

Я могу делать забавные вещи с временными ограничениями, чтобы настроить сигналы достаточно рано.

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

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

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