Добавление testbench'ей на языке Verilog в проект Vivado — различия между версиями

Материал из SRNS
Перейти к: навигация, поиск
(Итоговый скрипт регенерации проекта)
Строка 1: Строка 1:
 
{{TOCright}}
 
{{TOCright}}
  
Пусть у нас есть дизайн для Vivado, проект которого разворачивается в соответствии со статьей [[Vivado и Git]]. Возможно, это конечный дизайн, возможно - сабмодуль для другого дизайна. Процедура добавления test bench'ей (далее TB) отличаться не будет, поэтому дальнейшее рассмотрение продолжим на примере сабмодуля '''imitator'''.  
+
Пусть у нас есть дизайн для Vivado, проект которого разворачивается в соответствии со статьей [[Vivado и Git]]. Это может быть как конечный дизайн, так и чей-то сабмодуль. Процедура добавления test bench'ей (далее TB) отличаться не будет, поэтому рассмотрим всё на примере сабмодуля '''imitator'''.  
  
  
'''Задача''' - добавить TB'и для модулей imitator'а, причем  
+
'''Задача''' - добавить TB'и для модулей дизайна, причем  
 
* они должны храниться в СКВ и быть доступны всем разработчикам,
 
* они должны храниться в СКВ и быть доступны всем разработчикам,
 
* имеются в виду TB'и на языке Verilog для симуляторов типа Vivado Simulator, ModelSim и т.д., а не тесты на языках Си или Matlab для Verilator'а.  
 
* имеются в виду TB'и на языке Verilog для симуляторов типа Vivado Simulator, ModelSim и т.д., а не тесты на языках Си или Matlab для Verilator'а.  
Строка 16: Строка 16:
  
  
Наша конечная цель - правильно написанный скрипт регенерации проекта, включающий раскладывание TB'ей по полочкам, и сами файлы TB'а. Будем считать, что пользователь по-максимуму хочет использовать GUI и по-минимуму консоль и TCL. Тогда вырисовывается следующий workflow:
+
Наша конечная цель - файлы TB'ей и правильно написанный скрипт регенерации проекта, включающий раскладывание TB'ей по полочкам. Будем считать, что пользователь по-максимуму хочет использовать GUI и по-минимуму консоль и TCL. Тогда вырисовывается следующий workflow:
* средствами GUI создать новый набор для моделирования (файлсет, включающий код TB'а, тестируемые модули и прочие файлы),
+
* средствами GUI создать новый набор файлов для моделирования (включающий код TB'а, тестируемые модули и т.п.),
 
* через GUI настроить этот набор,
 
* через GUI настроить этот набор,
 
* через GUI выгрузить код регенерации,
 
* через GUI выгрузить код регенерации,
* подправить наш скрипт регенерации, чтобы TB разворачивался и настраивался вместе с проектом.
+
* подправить существующий скрипт регенерации проекта так, чтобы TB'и разворачивались и настраивался вместе с проектом.
  
  
Строка 27: Строка 27:
 
=== Создание нового набора для симуляции ===
 
=== Создание нового набора для симуляции ===
  
Накидаем через GUI новый TB, а потом перенесем его в tcl-скрипт! Начнем с TB для модуля '''imichnl_synthesizer'''.
+
Создадим через GUI новый TB, а потом перенесем его в tcl-скрипт! Начнем с TB для модуля '''imichnl_synthesizer'''.
  
 
В ''Flow Navigator'' (это панель слева в Vivado) в разделе ''Simulation'' выбираем ''Simulation Settings''
 
В ''Flow Navigator'' (это панель слева в Vivado) в разделе ''Simulation'' выбираем ''Simulation Settings''

Версия 20:24, 4 апреля 2016

Содержание

Пусть у нас есть дизайн для Vivado, проект которого разворачивается в соответствии со статьей Vivado и Git. Это может быть как конечный дизайн, так и чей-то сабмодуль. Процедура добавления test bench'ей (далее TB) отличаться не будет, поэтому рассмотрим всё на примере сабмодуля imitator.


Задача - добавить TB'и для модулей дизайна, причем

  • они должны храниться в СКВ и быть доступны всем разработчикам,
  • имеются в виду TB'и на языке Verilog для симуляторов типа Vivado Simulator, ModelSim и т.д., а не тесты на языках Си или Matlab для Verilator'а.


Подопечные

Для конкретики, будем добавлять в дизайн imitator TB'и для двух модулей:

  • imichnl_synthesizer, отвечающий за фазу несущей,
  • imitator_channel, являющийся топ-модулем для одного канала имитатора и включающий в себя первый модуль.


Наша конечная цель - файлы TB'ей и правильно написанный скрипт регенерации проекта, включающий раскладывание TB'ей по полочкам. Будем считать, что пользователь по-максимуму хочет использовать GUI и по-минимуму консоль и TCL. Тогда вырисовывается следующий workflow:

  • средствами GUI создать новый набор файлов для моделирования (включающий код TB'а, тестируемые модули и т.п.),
  • через GUI настроить этот набор,
  • через GUI выгрузить код регенерации,
  • подправить существующий скрипт регенерации проекта так, чтобы TB'и разворачивались и настраивался вместе с проектом.


Добавление TB через GUI

Создание нового набора для симуляции

Создадим через GUI новый TB, а потом перенесем его в tcl-скрипт! Начнем с TB для модуля imichnl_synthesizer.

В Flow Navigator (это панель слева в Vivado) в разделе Simulation выбираем Simulation Settings

20160404 vivado revolution2.png

В открывшемся окне в разделе Simulation в графе Simulation top modulw name создаем новый файлсет, выбирая Create Simulation Set

20160404 vivado revolution3.png

ВНИМАНИЕ Не занимайте и не удаляйте файлсет sim_1. Vivado его очень любит и будет создавать заново, делая при этим активным. Лучше оставить sim_1 пустым.

Новому файлсету даем осмысленное название, например, sim_imichnl_synthesizer

20160404 vivado revolution7.png

Очищаем графу Simulation top module name, т.к. файл с кодом TB'а у нас ещё не создан.

На вкладке Advanced запрещаем включать в TB все файлы проекта, снимая галку с Include all design sources for simulation. Иначе он добавит все наши файлы в файлсет этого TB'а, что нам не нужно.

20160404 vivado revolution11.png

Закрываем окно, нажимая Ok. Vivado задает вопрос, сделать ли данный TB активным. Можно соглашаться. В итоге в Source проекта появился новый пустой файлсет для симуляции sim_imichnl_synthesizer

20160404 vivado revolution12.png

Добавляем файлы в набор для симуляции

В контекстном меню файлсета sim_imichnl_synthesizer, выпадающем при нажатии правой кнопкой мыши, выбираем добавление новых файлов Add Sources

20160404 vivado revolution13.png

Далее Add or create simulation sources

20160404 vivado revolution4.png

Добавляем новый файл TB'а, нажимая кнопку Create File в открывшемся окне. Даем файлу осмысленное имя с суффиксом _tb, например, imichnl_synthesizer_tb.v и обязательно указываем в качестве пути каталог tb дизайна imitator. Иначе он будет создан в дебрях песочницы (в prj_imitator) и не будет виден системе контроля версий.

20160404 vivado revolution8.png20160404 vivado revolution9.png

С помощью кнопки Add Files добавляем уже существующие файлы, которые потребуются для работы тестируемого модуля. В данном случае это сам модуль imichnl_synthesizer из каталога verilog

20160404 vivado revolution10.png

После добавления требуемых файлов нажимаем кнопку Finish. Открывается окно Define module для нашего TB'а imichnl_synthesizer_tb.v. Порты нам добавлять не нужно, просто нажимаем Ok. Теперь у нас в файлсете sim_imichnl_synthesizer два файла - код исследуемого модуля и код TB'а.

20160404 vivado revolution14.png

Возвращаемся в настройки симуляции (Flow Navigator -> Simulation -> Simulation Settings) и указываем в качестве топового модуль imichnl_synthesizer_tb

20160404 vivado revolution15.png

Код TB'а

Пришло время наполнить imichnl_synthesizer_tb смысловым содержанием. Общий сброс, после чего каждую эпоху PHASE_RATE увеличивается на 2000000:


Моделирование

После того как TB написан, запускаем симуляцию через контекстное меню файлсета:

20160404 vivado revolution16.png

Моделируем, настраиваем wave-форму

20160404 vivado revolution17.png

Cохраняем настройки wave-формы в каталог tb через меню File->Save Waveform Configuration, автоматом получая имя файла типа imichnl_synthesizer_tb_behav.wcfg


Добавление TB'а через скрипт регенерации проекта

Сейчас все настройки TB'а, т.е. файлсета sim_imichnl_synthesizer, хранятся в песочнице, которая у нас не находится под системой контроля версий. Нужно добавить соответствующий код в скрипт регенерации проекта (традиционно его место до объявления настроек синтеза synth_1)


Как я получил этот код? Я просто выгрузил через File -> Write Project Tcl новый скрипт регенерации проекта и вычленил из него блок, отвечающий за наш новый файлсет.

Ниже мы подробнее рассмотрим команды, используемые для регенерации TB'а.

Добавляем второй TB

Проделываем аналогичные действия для второго TB'а, получаем набор для моделирования sim_imitator_channel, включающий, помимо прочего, imitator_channel_tb.v.


А вот что мы добавляем в prj_imitator.tcl, чтобы этот набор для моделирования разворачивался вместе с проектом:


Обсудим команды, которые добавляются в скрипт. В первую очередь создается новый набор для симуляции, ему присваивается название sim_imitator_channel

if {[string equal [get_filesets -quiet sim_imitator_channel] ""]} {
  create_fileset -simset sim_imitator_channel
}


Далее в этот набор добавляются файлы:

set obj [get_filesets sim_imitator_channel]
set files [list \
 "[file normalize "$origin_dir/tb/imitator_channel_tb.v"]"\
 "[file normalize "$origin_dir/verilog/top/global_param.v"]"\
 "[file normalize "$origin_dir/verilog/imitator_channel.v"]"\
 "[file normalize "$origin_dir/verilog/imichnl_synthesizer.v"]"\
 "[file normalize "$origin_dir/verilog/imichnl_sin_table.v"]"\
 "[file normalize "$origin_dir/verilog/imichnl_param.v"]"\
 "[file normalize "$origin_dir/verilog/imichnl_regfile.v"]"\
 "[file normalize "$origin_dir/verilog/imichnl_cos_table.v"]"\
 "[file normalize "$origin_dir/verilog/imichnl_delay_reg.v"]"\
 "[file normalize "$origin_dir/$sub_dir/correlator/verilog/flag_sync.v"]"\
 "[file normalize "$origin_dir/$sub_dir/correlator/verilog/flag_sync_n.v"]"\
 "[file normalize "$origin_dir/$sub_dir/correlator/verilog/time_generator.v"]"\
 "[file normalize "$origin_dir/$sub_dir/correlator/verilog/channel_shift_reg.v"]"\
 "[file normalize "$origin_dir/$sub_dir/sync/verilog/level_sync.v"]"\
 "[file normalize "$origin_dir/$sub_dir/sync/verilog/signal_sync.v"]"\
 "[file normalize "$origin_dir/tb/imitator_channel_tb_behav.wcfg"]"\
]
add_files -norecurse -fileset $obj $files


Далее указываются директории, в которых будет производиться поиск файл, подключенных с помощью директивы `include:

set obj [get_filesets sim_imitator_channel]
set_property "include_dirs" "$origin_dir/verilog $origin_dir/verilog/top" $obj


Указывается топовый модуль для моделирования:

set_property "top" "imitator_channel_tb" $obj


Указывается топовый модуль для моделирования:

set_property "runtime" "3000000ns" $obj
set_property "xsim.simulate.runtime" "3000000ns" $obj


Указывается wave-форма:

set_property "xsim.view" "$origin_dir/tb/imitator_channel_tb_behav.wcfg" $obj


Также в скрипте регенерации мы можем указать, какой набор симуляции считать активным по-умолчанию:

current_fileset -simset [ get_filesets sim_imitator_channel ]


Итоговый скрипт регенерации проекта

Итоговый скрипт регенерации проекта imitator будет выглядеть так:


Добавляем файл регенерации проекта prj_imitator.tcl и файлы в каталоге tb в коммит.

У другого пользователя

Теперь дизайн, включая TB'и, будет храниться в системе контроля версий. При запуске скрипта регенерации будет разворачиваться у нового пользователя и будет готовым для моделирования.

korogodin@Diod:~/Oryx/src/fpga/sub/imitator$ /opt/Xilinx/Vivado/2015.3/bin/vivado -source prj_imitator.tcl
20160404 vivado revolution18.png

Ссылки

Easyelectronics:TestBench на Verilog для новичков

Персональные инструменты
Пространства имён

Варианты
Действия
SRNS Wiki
Рабочие журналы
Приватный файлсервер
QNAP Сервер
Инструменты