Альтернативная архитектура подмодуля VHDL для моделирования

У меня есть компонент VHDL, который реализует тестовую последовательность DRAM. Он содержит дочерний объект, который является контроллером DRAM.

Я хочу смоделировать (отладить) тестовую последовательность DRAM, но использовать простую фальшивую заглушку для контроллера DRAM, а не настоящую, сложную вещь.

Есть ли способ настроить это, возможно, используя конфигурации VHDL, чтобы использовать простую версию объекта контроллера для моделирования? Я новичок в моделировании и не очень разбираюсь в VHDL в целом.

Это использует Xilinx ISE и ISim, нацеленные на Spartan-6, если это имеет значение.


person blueshift    schedule 11.02.2013    source источник
comment
Есть ли необходимость в меньшем/более быстром контроллере DRAM? Есть ли в симуляторе или озере предел вычислительной мощности? В противном случае я бы не прилагал усилий и/или не рисковал.   -  person vermaete    schedule 11.02.2013
comment
Интересный вопрос: именно для этого и нужны конфигурации! Однако использование их таким образом - или даже вообще - на удивление редко и, следовательно, подвержено странным ошибкам инструментов. Отвечу я или нет, но я с интересом наблюдаю за этим!   -  person user_1818839    schedule 11.02.2013
comment
@Vermaete: если контроллером DDR является Xilinx MIG: он настаивает на том, чтобы последовательность калибровки длилась 50 мкс, прежде чем он позволит вам запустить один полезный цикл моделирования. Объедините это с другим их ядром, которое они (безумно) симулируют только на уровне ворот, и вы будете ждать полчаса на симуляцию. Это может не считаться необходимостью, но это близко!   -  person user_1818839    schedule 11.02.2013
comment
@ Брайан Драммонд: ладно, это уважительная причина. Однако у некоторых из этих IP-адресов есть дженерики для ускорения симуляций за счет пропуска этих фаз.   -  person vermaete    schedule 11.02.2013
comment
указанные тайминги были С этими дженериками!   -  person user_1818839    schedule 11.02.2013
comment
Если вы создаете меньший/быстрый контроллер DRAM. Я бы посоветовал вам, если это возможно, сделать снимок входов-выходов между контроллером и генератором тестовых последовательностей с помощью Chipscope и сравнить их с вашей симуляцией. Вам придется отлаживать не только тестовый секвенсор, но и упрощенный контроллер DRAM.   -  person vermaete    schedule 11.02.2013
comment
Хорошо, даже если есть другие способы сделать это для этого конкретного случая, я хотел бы знать из общих соображений самосовершенствования, как изолировать модуль от его дочерних элементов для тестирования. Например. Я мог бы захотеть написать тестовую версию дочернего модуля, который вводит ошибки или необычные задержки.   -  person blueshift    schedule 11.02.2013


Ответы (2)


Один из способов, который не использует конфигурации:

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

Поэтому вы можете создать экземпляр единицы в своем тестовом стенде как

Controller_1 : entity work.DRAM_controller(simple)
               port map ( ...

or

Controller_2 : entity work.DRAM_controller(rtl)
               port map ( ...

где «простой» и «rtl» — две архитектуры. Для этой цели вам, возможно, придется иметь объект и обе архитектуры в разных файлах; Инструменты Xilinx не очень хорошо справляются с необычными случаями (в свое время мне сказали, что конфигурации не являются единицами проектирования!)

Затем вы можете создать экземпляр контроллера DRAM с любой архитектурой в тестовом стенде.

Как говорит vermaete, вы также должны протестировать упрощенную архитектуру. Один из способов — запустить на нем модульные тесты, создав экземпляры обоих контроллеров в другом тестовом стенде, по одному для каждой архитектуры, и сравнив их выходные данные для каждой операции.

Как ни странно, пример Эшендена для прямого создания объекта (Designer's Guide to VHDL ch 5.4, p.136 в моем издании 1996 года) — это контроллер DRAM!

РЕДАКТИРОВАТЬ: (это был комментарий, но он становится слишком длинным)

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

Что касается системного теста, я не понял, что контроллер DRAM находится внутри проверяемого оборудования (дизайн верхнего уровня) — вам нужен один экземпляр (настоящий) для синтезатора и простых тестов DRAM, а другой (простой) — для полных тестов DRAM. Да, конфигурация - правильный и самый чистый способ сделать это. Создайте экземпляр контроллера ENTITY в проекте верхнего уровня (UUT) и выберите архитектуры в конфигурации.

Однако есть менее чистая альтернатива в качестве резервного плана на случай, если конфигурации не работают. Создайте 2 архитектуры для объекта верхнего уровня; отличаясь ТОЛЬКО аркой, которую они выбирают для контроллера. Вы можете выбрать любую архитектуру при создании экземпляра объекта верхнего уровня в тестовом стенде. Однако это неприятно, потому что вам нужно синхронизировать две версии.

person user_1818839    schedule 11.02.2013
comment
Похоже, что для этого потребуется, чтобы контроллер и мое проверяемое оборудование были дочерними элементами испытательного стенда, верно? На данный момент контроллер DRAM является дочерним элементом проверяемого оборудования (который будет единственным дочерним элементом испытательного стенда). Будет ли работать этот подход? - person blueshift; 11.02.2013

Другой способ без настройки - использовать generate для достижения этой цели:

sim:if in_simulation generate
   Controller_1 : entity work.DRAM_controller(simple)
                  port map ...
else
   Controller_1 : entity work.DRAM_controller(rtl)
                  port map ...
end generate;

Вы можете использовать этот ответ для создания константы in_simulation.

(Если у вас нет инструментов, совместимых с VHDL2008, вы не можете выполнить if...else..end generate, и вместо этого вам придется выполнить пару if in_simulation/if not in_simulation. Поднимите отчет об ошибке :)

person Martin Thompson    schedule 12.02.2013
comment
Хороший улов, я забыл об этом подходе. Я склонен использовать имитирующую функцию, а не постоянную, но та же идея. - person user_1818839; 12.02.2013