mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 17:20:10 +00:00
Перенос Implementation steps в Introduction
This commit is contained in:
@@ -1,67 +1,146 @@
|
||||
# Структура папок в проекте Vivado
|
||||
# Окно исходников проекта Vivado
|
||||
|
||||
Вы смотрите на окно `Sources` и ничего не понимаете? Или создали модуль, а он куда–то исчез? Или просто хотите понять, как лучше ориентироваться в созданных модулях? Тогда это для вас.
|
||||
Данный документ расскажет вам об одном из основных окон программы Vivado: `Sources`. Данное оно расположено в левом верхнем углу. Если вы его не видите, данное окно можно активировать через меню: `Window –> Sources`. Окно состоит из следующих вкладок:
|
||||
|
||||
В левом верхнем углу Vivado расположено окно со вкладкой `Sources`. Здесь располагается иерархия модулей вашего проекта. Если у вас нет этой вкладки, открыть её можно так: `Window –> Sources`.
|
||||
1. Hierarchy;
|
||||
2. Libraries;
|
||||
3. Compile Order.
|
||||
|
||||

|
||||
В определенных ситуациях в данном окне может появиться и вкладка `IP Cores`, но в рамках данного курса она нас не интересует.
|
||||
|
||||
Во вкладке `Design Sources` хранятся модули, описывающие ваш дизайн. В `Constrain` лежат файлы, необходимые для работы с конкретной ПЛИС. `Simulation Sources` хранит в себе тестбенчи и обычные модули.
|
||||
Рассмотрим первые три вкладки.
|
||||
|
||||
Допустим, мы создали модуль полного однобитного сумматора `fulladder`, а также создали и планируем описать модуль полного четырехбитного сумматора `fulladder4`, подключив к нему четыре однобитных.
|
||||
## Иерархия модулей проекта
|
||||
|
||||
Итак, раскрываем вкладку `Design Sources` и видим два модуля – `fulladder` и `fulladder4`, которые пока что никак друг с другом не связаны. Двойное нажатие на название модуля приведёт к его открытию.
|
||||
Рассмотрим _рис. 1_.
|
||||
|
||||

|
||||

|
||||
|
||||
Модуль `fulladder4` является модулем верхнего уровня (top-level module), то есть, если мы запустим синтез или имплементацию проекта, именно этот модуль Vivado будет рассматривать. Чтобы сменить модуль верхнего уровня, необходимо нажать на выбранный модуль правой кнопкой мыши, затем на `Set a top`.
|
||||
_Рисунок 1. Окно `Sources`, открытое на вкладке `Hierarchy`._
|
||||
|
||||

|
||||
Данная вкладка состоит из четырех "папок":
|
||||
|
||||
Подключим `fulladder` к `fulladder4` для создания четырехбитного сумматора путём соединения четырех однобитных. Тогда после сохранения окно изменится так:
|
||||
1. Design Sources;
|
||||
2. Constraints;
|
||||
3. Simulation Sources;
|
||||
4. Utility Sources.
|
||||
|
||||

|
||||
В рамках текущего курса лабораторных работ мы будем взаимодействовать только с тремя из них.
|
||||
|
||||
Раскроем вкладку `fulladder4` и увидим 4 подключенных модуля `fulladder`:
|
||||
Помните, что несмотря на использование слова "папка", речь идет не о директориях операционной системы. Папки проекта — это всего лишь удобная абстракция для управления иерархией проекта.
|
||||
|
||||

|
||||
В папке `Design Sources` строится иерархия проектируемых модулей (реальных схем, которые в будущем могут быть воспроизведены в ПЛИС или заказной микросхеме).
|
||||
|
||||
Папка `Constraints` содержит файлы ограничений, помогающих реализовать проект на конкретной ПЛИС (см. ["Этапы реализации проекта в ПЛИС"](../Introduction/Implementation%20steps.md#implementation)).
|
||||
|
||||
`Simulation Sources` хранит в себе иерархию верификационного окружения, включая модули из папки `Design Sources` — т.е. все модули (как синтезируемые, так и не синтезируемые), которые будут использованы пр моделировании.
|
||||
|
||||
> Обратите внимание на то, вкладка `Hierarchy` не содержит файлов. Здесь отображается иерархия модулей проекта. Один модуль может быть использован несколько раз — и в этом случае он будет столько же раз отображён в иерархии, хотя файл, хранящий описание этого модуля останется один (см. _рис. 5_).
|
||||
|
||||
Допустим, мы создали модуль полного однобитного сумматора `fulladder`, а также создали модуль полного четырехбитного сумматора `fulladder4`, содержимое которого мы только планируем описать, подключив внутри него четыре однобитных сумматора.
|
||||
|
||||
Раскрыв папку `Design Sources` мы увидим два модуля – `fulladder` и `fulladder4`, которые пока что никак друг с другом не связаны. Двойное нажатие на название модуля приведёт к открытию файла, содержащего описание этого модуля.
|
||||
|
||||

|
||||
|
||||
_Рисунок 2. Содержимое папки `Design Sources`._
|
||||
|
||||
Модуль `fulladder4` является модулем верхнего уровня (top-level module). Это значит, что при попытке запуска моделирования или синтеза, Vivado будет работать именно с этим модулем. Чтобы сменить модуль верхнего уровня, необходимо нажать правой кнопкой мыши на интересующий модуль и выбрать `Set a top`.
|
||||
|
||||

|
||||
|
||||
_Рисунок 3. Пример смены модуля верхнего уровня._
|
||||
|
||||
Опишем логику работы четырехбитного сумматора таким образом, чтобы тот содержал четыре однобитных сумматора. После сохранения окно изменится так:
|
||||
|
||||

|
||||
|
||||
_Рисунок 4. Обновленное содержимое папки `Design Sources`._
|
||||
|
||||
После раскрытия ветки `fulladder4` будет отображено 4 подключенных модуля `fulladder`.
|
||||
|
||||

|
||||
|
||||
_Рисунок 5. Иерархия проекта с четырьмя копиями модуля `fulladder`._
|
||||
|
||||
В `Simulation Sources` мы видим один файл тестбенча, к которому что-то подключено, и модуль `fulladder4` с подключенными к нему другими модулями:
|
||||
|
||||

|
||||

|
||||
|
||||
Модули из `Design Sources` автоматически попадают в `Simulation Sources`, так как эти файлы нужны для симуляции. Они не являются копиями модулей, а просто дублируются для удобства. Каждый раз, когда вы меняете что-то в своём дизайне, это отражается как во вкладке `Design Sources`, так и в `Simulation Sources`. Раскроем вкладку с модулем `tb`:
|
||||
_Рисунок 6. Иерархия модулей `Simulation Sources`.
|
||||
|
||||

|
||||
Модули из `Design Sources` автоматически попадают в `Simulation Sources`, так как эти модули используются при моделировании.
|
||||
|
||||
Помните, что здесь отображается иерархия модулей. В реальности модуль `fulladder` описан всего один раз.
|
||||
|
||||
Каждый раз, когда вы меняете что-то в модулях разрабатываемого устройства, это отражается как во вкладке `Design Sources`, так и в `Simulation Sources`. Раскроем вкладку с модулем `tb`:
|
||||
|
||||

|
||||
|
||||
_Рисунок 7. Пример иерархии с отсутствующим модулем._
|
||||
|
||||
Такая картина говорит нам о попытке подключить модуль, которого нет в проекте. Часто это связано с неправильным указанием подключаемого модуля. В данном случае мы хотим подключить модуль `half_adder` и Vivado не может его найти.
|
||||
|
||||
```Verilog
|
||||
```SystemVerilog
|
||||
module tb();
|
||||
...
|
||||
|
||||
//...
|
||||
|
||||
half_adder DUT(
|
||||
.A (a),
|
||||
.B (b),
|
||||
.P (p),
|
||||
.S (s)
|
||||
);
|
||||
...
|
||||
|
||||
// ...
|
||||
|
||||
endmodule
|
||||
```
|
||||
|
||||
Переименуем название подключаемого модуля на `fulladder4` и сохраним.
|
||||
|
||||
```Verilog
|
||||
```SystemVerilog
|
||||
module tb();
|
||||
...
|
||||
|
||||
//...
|
||||
|
||||
fulladder4 DUT(
|
||||
.A (a),
|
||||
.B (b),
|
||||
.P (p),
|
||||
.S (s)
|
||||
);
|
||||
...
|
||||
|
||||
// ...
|
||||
|
||||
endmodule
|
||||
```
|
||||
|
||||
После обновления в окне `Sources` модуль `fulladder4` "спрячется" под `tb`. Если раскрыть вкладку, будет видно, что `fulladder4` подключен к `tb`, а четыре модуля `fulladder` – к `fulladder4`. Также отметим, что `tb` является модулем верхнего уровня, значит, если мы захотим запустить симуляцию, то Vivado выполнит симуляцию именно для модуля `tb`. Изменить модуль верхнего уровня можно так же, как было описано ранее.
|
||||
|
||||

|
||||

|
||||
|
||||
_Рисунок 8. Пример исправленной иерархии верификационного окружения._
|
||||
|
||||
После каждого сохранения файла проекта, иерархия проекта будет какое-то время обновляться. Это можно заметить по надписи `Updating` вверху окна (см. _рис 9_). Во время обновления иерархии не стоит выполнять операции синтеза или моделирования — это приведет к ошибке.
|
||||
|
||||

|
||||
|
||||
_Рисунок 9. Окно `Sources` во время обновления иерархии проекта._
|
||||
|
||||
Одной из частой ошибок студентов бывает прикрепление файла не к той папке. Например, создание модуля проекта в папке `Simulation Sources` (из-за чего тот не появится в папке `Design Sources`), или создание модуля верификационного окружения в папке `Design Sources` (он же наоборот — окажется и в папке `Simulation Sources`, но при этом в папке Design Sources окажется несинтезируемый модуль, который может оказаться еще и модулем верхнего уровня, что приведет к ошибке).
|
||||
|
||||
В случае, если произошла такая ошибка, она может быть легко исправлена нажатием правой кнопкой мыши по неправильно расположеному модулю и выбору кнопки: "Move to Design[или Simulation] sources".
|
||||
|
||||
## Библиотеки проекта
|
||||
|
||||
В данной вкладке находятся файлы проекта, сгруппированные по библиотекам. Обычно данная вкладка практически не используется.
|
||||
|
||||
## Порядок компиляции сущностей проекта
|
||||
|
||||
Обычно Vivado сам определяет порядок компиляции по иерархии проекта. Однако, в некоторых ситуациях он может определить что-то неправильно. На данной вкладке вы можете исправить порядок компиляции (скорее всего, вам может потребоваться эта вкладка, для указания порядка компиляции пакетов SystemVerilog).
|
||||
|
||||
## Дополнительные материалы
|
||||
|
||||
Более подробную информацию по окну `Sources` вы можете найти в руководстве пользователя Vivado: ["Vivado Design Suite User Guide: Using the Vivado IDE (UG893)"](https://docs.xilinx.com/r/en-US/ug893-vivado-ide/Using-the-Sources-Window) (раздел "Using the Sources Window").
|
||||
|
Reference in New Issue
Block a user