mirror of
https://github.com/MPSU/APS.git
synced 2025-09-16 01:30:10 +00:00
Исправление пунктуационных и орфографических ошибок
В основном вставка пропущенных запятых и удаление лишнего пробела из союза "а также", но были и другие ошибки и опечатки.
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
## Цель
|
||||
|
||||
При выполнении лабораторных работ вы непременно будете сталкиваться с множеством ошибок. И это нормально: **"Не ошибается тот, кто ничего не делает" — © Джейсон Стейтем**.
|
||||
Важно воспитать в себе положительное восприятие обнаружения ошибок (ведь это приводит к улучшению вашего творения). Если относиться к обнаружению ошибок отрицательно, то вы подсознательно будете пытаться найти ошибки спустя рукава, но если вы "в домике", и ошибок не видите — это не значит что их нет.
|
||||
Важно воспитать в себе положительное восприятие обнаружения ошибок (ведь это приводит к улучшению вашего творения). Если относиться к обнаружению ошибок отрицательно, то вы подсознательно будете пытаться найти ошибки спустя рукава, но, если вы "в домике", и ошибок не видите — это не значит, что их нет.
|
||||
|
||||
При должном отношении, поиск ошибок может превратиться в увлекательное детективное расследование, где у вас есть "место преступления" (обнаруженное несоответствие в поведении, обычно это не сама ошибка, а ее следствие, круги на воде) и какой-то "набор улик" (фрагменты лога, исходный код). И вы по чуть-чуть будете разматывать "нераспутываемую паутину лжи", получая все новые улики, ведущие к истинной ошибке.
|
||||
|
||||
@@ -49,7 +49,7 @@
|
||||
|
||||

|
||||
|
||||
В логе сказано, что в момент времени `5ns`, на дизайн подавались координаты вектора, равные `0` и `0`, модель посчитала, что длина вектора равна нулю, в то время, как дизайн вернул значение `x`.
|
||||
В логе сказано, что в момент времени `5ns`, на дизайн подавались координаты вектора, равные `0` и `0`, модель посчитала, что длина вектора равна нулю, в то время как дизайн вернул значение `x`.
|
||||
|
||||
## Поиск ошибки на временной диаграмме
|
||||
|
||||
@@ -103,7 +103,7 @@ vector_abs dut(
|
||||
|
||||
Вообще говоря, мы уже видим, что выход `abs` (к которому подключен наш провод `res`) находится в X-состоянии, но для отработки навыков, разберемся с добавлением на временную диаграмму. Можно поступить двумя способами:
|
||||
|
||||
1. Добавить все сигналы (то что видно в окне `Objects` на временную диаграмму) из окна `Scope` для этого, либо перетаскиваем нужный нам объект, зажав левую кнопку мыши на временную диаграмму, либо жмем правой кнопкой мыши по нужному объекту, и выбираем `Add to Wave Window`
|
||||
1. Добавить все сигналы (то, что видно в окне `Objects` на временную диаграмму) из окна `Scope` для этого, либо перетаскиваем нужный нам объект, зажав левую кнопку мыши на временную диаграмму, либо жмем правой кнопкой мыши по нужному объекту, и выбираем `Add to Wave Window`
|
||||
2. Добавить отдельные сигналы из окна `Objects`. Для этого выделяем их (возможно множественное выделение через модификаторы `shift` или `ctrl`), и как и в прошлом случае, либо перетаскиваем сигналы левой кнопкой мыши, либо добавляем их через правую кнопку мыши.
|
||||
|
||||

|
||||
@@ -140,7 +140,7 @@ vector_abs dut(
|
||||
|
||||

|
||||
|
||||
Видим два сигнала в Z-состоянии и один сигнал в X-состоянии. Обычно, сигналы с Z-состоянием проще всего исправить, т.к. зачастую это забытое или некорректное подключение провода. Кроме того, сигнал, зависящий от сигнала с Z-состоянием может оказаться в X-состоянии, так что это может быть решением нашей проблемы, поэтому займемся проводами `min` и `min_half`. Сперва займемся сигналом `min` и перейдем к шагу 2 нашего алгоритма (нажимаем правой кнопкой мыши и выбираем `Go To Source Code`):
|
||||
Видим два сигнала в Z-состоянии и один сигнал в X-состоянии. Обычно, сигналы с Z-состоянием проще всего исправить, т.к. зачастую это забытое или некорректное подключение провода. Кроме того, сигнал, зависящий от сигнала с Z-состоянием, может оказаться в X-состоянии, так что это может быть решением нашей проблемы, поэтому займемся проводами `min` и `min_half`. Сперва займемся сигналом `min` и перейдем к шагу 2 нашего алгоритма (нажимаем правой кнопкой мыши и выбираем `Go To Source Code`):
|
||||
|
||||
```SystemVerilog
|
||||
module vector_abs(
|
||||
@@ -182,7 +182,7 @@ vector_abs dut(
|
||||
|
||||

|
||||
|
||||
В логе сообщается о 102 найденных ошибках. Это ровно на одну ошибку меньше, чем было ранее. Это не означает, что в проекте осталось 102 ошибки, только то, что исправив данную ошибку, мы действительно что-то исправили, и теперь один из тестовых сценариев, который ранее завершался ошибкой, теперь завершился без нее.
|
||||
В логе сообщается о 102 найденных ошибках. Это ровно на одну ошибку меньше, чем было ранее. Это не означает, что в проекте осталось 102 ошибки, только то, что, исправив данную ошибку, мы действительно что-то исправили, и теперь один из тестовых сценариев, который ранее завершался ошибкой, теперь завершился без нее.
|
||||
Помните, что если в проекте много ошибок, то часть ошибок может выправлять поведение других ошибок (хоть и не всегда, но иногда минус на минус может выдать плюс контексте ошибок проекта), поэтому надо осторожно полагаться на число найденных ошибок, если их больше нуля.
|
||||
|
||||
Посмотрим на нашу временную диаграмму снова, и выберем дальнейшие действия:
|
||||
@@ -206,7 +206,7 @@ vector_abs dut(
|
||||
1 + 1/2 = 1.5
|
||||
```
|
||||
|
||||
Ни модель ни дизайн не правы?
|
||||
Ни модель, ни дизайн не правы?
|
||||
На самом деле, наше устройство поддерживает только целочисленную арифметику, поэтому результат будет:
|
||||
|
||||
```text
|
||||
@@ -274,7 +274,7 @@ endmodule
|
||||
|
||||

|
||||
|
||||
Мы продвинулись в во времени безошибочного моделирования до `15ns`, начинаем наше расследование с начала:
|
||||
Мы продвинулись во времени безошибочного моделирования до `15ns`, начинаем наше расследование с начала:
|
||||
|
||||
На вход дизайна подаются значения `3` и `4`, дизайн считает, что результатом вычисления `max + min/2` будет `2`, модель считает, что `5`. Посчитаем сами:
|
||||
|
||||
|
@@ -1,6 +1,6 @@
|
||||
# Инструкция по работе с ошибками элаборации
|
||||
|
||||
Итак, вы описали модуль на языке Verilog и хотите открыть логическую схему или запустить симуляцию, чтобы убедиться что описание верно.
|
||||
Итак, вы описали модуль на языке Verilog и хотите открыть логическую схему или запустить симуляцию, чтобы убедиться, что описание верно.
|
||||
|
||||
Однако, в результате какого-то из этих действий появляется окно с сообщением о какой-то непонятной ошибке:
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
Ничего страшного — ошибки, это часть учебного и рабочего процесса.
|
||||
|
||||
Смело нажимаем `OK` не читая сообщения (и поступаем так же, с еще одним открывшимся окном).
|
||||
Смело нажимаем `OK`, не читая сообщения (и поступаем так же, с еще одним открывшимся окном).
|
||||
|
||||
Мы собираемся получить информацию об ошибки из более подробного источника: вкладки `Tcl Console`.
|
||||
|
||||
|
@@ -8,13 +8,13 @@
|
||||
|
||||
Во вкладке `Design Sources` хранятся модули, описывающие ваш дизайн. В `Constrain` лежат файлы, необходимые для работы с конкретной ПЛИС. `Simulation Sources` хранит в себе тестбенчи и обычные модули.
|
||||
|
||||
Допустим, мы создали модуль полного одноботиного сумматора `fulladder`, а также создали и планируем описать модуль полного четырехбитного сумматора `fulladder4`, подключив к нему четыре однобитных.
|
||||
Допустим, мы создали модуль полного однобитного сумматора `fulladder`, а также создали и планируем описать модуль полного четырехбитного сумматора `fulladder4`, подключив к нему четыре однобитных.
|
||||
|
||||
Итак, раскрываем вкладку `Design Sources` и видим два модуля – `fulladder` и `fulladder4`, которые пока что никак друг с другом не связаны. Двойное нажатие на название модуля приведёт к его открытию.
|
||||
|
||||

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

|
||||
|
||||
|
@@ -42,7 +42,7 @@ endmodule
|
||||
|
||||
В левом окне мы видим наш нетлист. В нижней части обозначены узлы графа (элементы **ab_i**, **res_i**, **xabc_i**, которые представляют собой **И**, **мультиплексор** и **Исключающее ИЛИ** соответственно. Имена этих элементов схожи с именами проводов, присваиванием которым мы создавали данные элементы)
|
||||
|
||||
В верхней части обозначены **ребра графа**, соединяющие элементы схемы. Это входы и выходы нашего модуля, а так же созданные нами промежуточные цепи.
|
||||
В верхней части обозначены **ребра графа**, соединяющие элементы схемы. Это входы и выходы нашего модуля, а также созданные нами промежуточные цепи.
|
||||
|
||||
Справа вы видите **схематик** — **графическую схему**, построенную на основе данного **графа** (**нетлиста**).
|
||||
|
||||
@@ -112,7 +112,7 @@ endmodule
|
||||
|
||||
После построения новой схемы, где в качестве элементов используются ресурсы конкретной ПЛИС, происходит расчёт размещения этой схемы внутри ПЛИС: выбираются конкретные логические ячейки, происходит маршрутизация сигнала между этими ячейками. Например, реализация 32-битного сумматора с ускоренным переносом может потребовать 32 LUT-а и 8 примитивов вычисления быстрого переноса (`CARRY4`). Будет неразумно использовать для этого примитивы, разбросанные по всему кристаллу ПЛИС, ведь тогда придется выполнять сложную маршрутизацию сигнала, да и временные характеристики устройства так же пострадают (сигналу идущему от предыдущего разряда к следующему придется проходить больший путь). Вместо этого, САПР будет пытаться разместить схему таким образом, чтобы использовались близлежащие примитивы ПЛИС, для получения оптимальных характеристик.
|
||||
|
||||
Что именно считается "оптимальным" зависит от двух вещей: настроек САПР и **ограничений** (**constraints**), наложенных на имплементацию. Ограничения сужают область возможных решений по размещению примитивов внутри ПЛИС под определенные характеристики (временны́е и физические). Например, можно сказать, внутри ПЛИС схема должна быть размещена таким образом, чтобы время прохождения по **критическому пути** не превышало `20ns`. Это временно́е ограничение. Так же нужно сообщить САПР, к какой ножке ПЛИС необходимо подключить входы и выходы нашей схемы — это физическое ограничение.
|
||||
Что именно считается "оптимальным" зависит от двух вещей: настроек САПР и **ограничений** (**constraints**), наложенных на имплементацию. Ограничения сужают область возможных решений по размещению примитивов внутри ПЛИС под определенные характеристики (временны́е и физические). Например, можно сказать, внутри ПЛИС схема должна быть размещена таким образом, чтобы время прохождения по **критическому пути** не превышало `20ns`. Это временно́е ограничение. Также нужно сообщить САПР, к какой ножке ПЛИС необходимо подключить входы и выходы нашей схемы — это физическое ограничение.
|
||||
|
||||
Ограничения описываются не на языке описания аппаратуры, вместо этого используются текстовые файлы специального формата, зависящего от конкретной САПР.
|
||||
|
||||
|
@@ -12,7 +12,7 @@
|
||||
|
||||

|
||||
|
||||
4. Нажмите кнопку Next, проставьте галочки на всех соглашениях (разумеется желательно прочитав их), снова нажмите Next.
|
||||
4. Нажмите кнопку Next, проставьте галочки на всех соглашениях (разумеется, желательно прочитав их), снова нажмите Next.
|
||||
5. В списке вариантов установок, выбираете "Vivado HL WebPACK".
|
||||
6. В настройках установки, в разделе Devices снимите галочки со всего что можно снять, нажмите Next.
|
||||
|
||||
|
@@ -86,7 +86,7 @@ endmodule
|
||||
5. В окне Sources нажать на кнопку `+`
|
||||
6. В открывшемся окне выбрать `Add or create constraints` → Нажать Next
|
||||
7. Нажать `Create File` → В открывшемся окне ввести название → Нажать `OK` → `Finish`
|
||||
8. В окне `Source` в открывающемся списке `Constraints` найти только что созданный файл и открыть его дя редактирования двойным щелчком
|
||||
8. В окне `Source` в открывающемся списке `Constraints` найти только что созданный файл и открыть его для редактирования двойным щелчком
|
||||
9. Скопировать содержимое файла констрейнов с [официального сайта](https://github.com/Digilent/digilent-xdc) и вставить в только что созданный → Найти строки посвященные SW и LED и раскомментировать их → Сохранить изменения
|
||||
10. `Run Synthesis`
|
||||
11. `Run Implementation`
|
||||
|
Reference in New Issue
Block a user