Я очень новичок в цифровом дизайне (мой опыт работы с программным обеспечением). Я пытаюсь использовать некоторую блочную ОЗУ на Xilinx FPGA и хочу знать, каковы обычные методы настройки сигналов управления ОЗУ относительно часов.
В настоящее время у меня есть одни часы, используемые во всех моих проектах. ОЗУ может выполнять чтение/запись при каждом переднем фронте, и я хочу использовать его с такой скоростью. Конечно, управляющие сигналы должны быть установлены за некоторое время до переднего фронта тактового сигнала. Я предполагаю, что есть несколько способов сделать это:
Какие из них возможны, какие на самом деле хороши или обычно используются, и есть ли какие-то преимущества или недостатки, помогающие выбрать между ними?
Изменить: я использую простой VHDL из соображений переносимости, а не использую CoreGen или примитивы, специфичные для Xilinx. Однако я следую документации Xilinx и пишу VHDL таким образом, чтобы инструменты могли определить правильный тип ОЗУ («Руководство по кодированию RAM HDL в UG687, если кому-то интересно»). Инструменты, похоже, делают это правильно.
Вам не нужно использовать другой фронт или фазовый сдвиг часов.
Просто установите данные по нарастающему фронту, а затем следующий нарастающий фронт запишет их в память (согласно варианту 2).
Запуск статического временного анализа сообщит вам о любых нарушениях удержания/настройки. Но если вы добавите к вашим часам правильные ограничения формы сигнала (т. е. частоту, коэффициент заполнения), установщик сделает все возможное, чтобы выполнить требования по времени.
Это фундаментальная основа синхронного дизайна. Каждый регистр синхронизируется по одному и тому же фронту в одно и то же время, поэтому теоретически данные из последнего цикла на любом входе регистра всегда будут загружаться в текущем цикле. Это достигается в первую очередь с помощью архитектуры часов H-дерева с низким смещением, где расстояние от источника синхронизации до любого регистра почти одинаковой длины с одинаковыми задержками, поэтому теоретически каждый регистр должен синхронизироваться в одно и то же время.
Прибытие данных займет немного больше времени (поскольку у них есть задержка распространения DFF и задержка маршрутизации), прежде чем они попадут в следующий регистр, а это означает, что ввод регистра изменится в какой-то момент после фронта тактового сигнала, который его установил (и надеюсь, до края, который должен его загрузить).
Я, вероятно, не буду отвечать на 5 дополнительных вопросов, но я отвечу на ваш главный вопрос.
Я хочу знать, каковы обычные методы настройки сигналов управления ОЗУ относительно часов.
Обычный метод заключается в том, что у производителя есть довольно подробное примечание к приложению о времени их интерфейса RAM. например, быстрый поиск в Google нашел это примечание к приложению для QDR II SRAM с использованием virtex-5.
Обычно эти интерфейсы создаются с помощью основного редактора. Этот редактор сообщит вам, какие интерфейсы и параметры разрешены. Это могут быть необязательные параметры, такие как размер блока, количество битов данных и т. д. Не менее важно хорошее примечание к приложению, которое расскажет вам об ограничениях ядра.
Похоже, вы хотите сделать это вручную, но при создании экземпляра блока есть несколько преимуществ.
Вы используете знания разработчиков микросхем и прикладных инженеров в компании.
Блок уже позаботится о времени, настройке, удержании, нескольких часах и т. Д., Пока вы остаетесь в рамках его ограничений и не кормите его мусором.
Блок уже знает каждый доступный тип блока в целевом кремнии и будет стараться изо всех сил сохранять небольшую площадь или высокую скорость (иногда это другая настройка).
Я могу делать забавные вещи с временными ограничениями, чтобы настроить сигналы достаточно рано.
если вы новичок в цифровом дизайне, есть много проблем, связанных со временем. Помните, что инструменты тайминга/задержки/настройки/удержания и т. д. помогут вам. Это может не укусить вас сейчас, но может быть проблемой, если дизайн немного изменится, и внезапно ваша LUT будет помещена в другой слайс, потому что вы изменили настройки времени, но не ограничения размещения.
Как и в случае с большинством правил, это правила, если вы действительно не знаете, что делаете, тогда они являются рекомендациями.
Вы всегда работаете синхронно и только по восходящему фронту. Помните, что для записи вы можете использовать одни часы, но для чтения вам нужно как минимум два, один для предоставления адреса, а второй для чтения данных.