mirror of
https://github.com/MPSU/APS.git
synced 2025-09-15 09:10:10 +00:00
Initial commit
This commit is contained in:
297
Labs/01. Adder/README.md
Normal file
297
Labs/01. Adder/README.md
Normal file
@@ -0,0 +1,297 @@
|
||||
# Лабораторная работа 1 "Сумматор"
|
||||
|
||||
## Цель
|
||||
|
||||
Познакомиться с САПР Vivado и научиться реализовывать в нём простейшие схемотехнические модули с помощью конструкций языка SystemVerilog.
|
||||
|
||||
## Допуск к лабораторной работе
|
||||
|
||||
Изучить [описание модулей на языке SystemVerilog](../../Basic%20Verilog%20structures/Modules.md).
|
||||
|
||||
## Ход работы
|
||||
|
||||
1. [Тренинг по созданию проекта в Vivado](../../Vivado%20Basics/Vivado%20trainer.md);
|
||||
2. Изучение, реализация и проверка полного однобитного сумматора;
|
||||
3. Изучение реализации полного четырехбитного сумматора;
|
||||
4. Реализация полного четырехбитного сумматора;
|
||||
5. Реализация 32-битного сумматора.
|
||||
|
||||
## Теория
|
||||
|
||||
Итогом лабораторной работы будет создание устройства, способного складывать два числа. Но перед тем, как учиться создавать подобное устройство, необходимо немного освоиться в самом процессе складывания чисел.
|
||||
|
||||
Давайте начнем с примера и сложим в столбик какую-нибудь пару чисел, например 42 и 79:
|
||||
|
||||

|
||||
|
||||
```text
|
||||
2 + 9 = 11 ➨ 1 пишем, 1 "в уме"
|
||||
4 + 7 + "1 в уме" = 12 ➨ 2 пишем, 1 "в уме"
|
||||
0 + 0 + "1 в уме" = 1
|
||||
```
|
||||
|
||||
Итого, 121.
|
||||
|
||||
Назовём то, что мы звали "1 в уме", переносом разряда.
|
||||
|
||||
Теперь попробуем сделать то же самое, только в двоичной системе исчисления. К примеру, над числами 3 и 5. Три в двоичной системе записывается как 011. Пять записывается как 101.
|
||||
|
||||

|
||||
|
||||
Поскольку в двоичной системе всего две цифры: 0 и 1, один разряд не может превысить 1. Складывая числа 1 и 1, вы получаете 2, что не умещается в один разряд, поэтому мы пишем 0 и держим 1 "в уме". Это снова перенос разряда. Поскольку в двоичной арифметике разряд называют битом, перенос разряда называют переносом бита, а сам разряд, который перенесли — битом переноса.
|
||||
|
||||
### Полный однобитный сумматор
|
||||
|
||||
Полный однобитный сумматор — это цифровое устройство с тремя входными сигналами: операндами a, b и входным битом переноса, которое складывает их между собой, возвращая два выходных сигнала: однобитный результат суммы и выходной бит переноса. Что такое входной бит переноса? Давайте вспомним второй этап сложения чисел 42 и 79:
|
||||
|
||||
```text
|
||||
4 + 7 + "1 в уме" = 12 ➨ 2 пишем, 1 "в уме"
|
||||
```
|
||||
|
||||
**+ "1 в уме"** — это прибавление разряда, перенесённого с предыдущего этапа сложения.
|
||||
|
||||
Входной бит переноса — это разряд, перенесённый с предыдущего этапа сложения двоичных чисел. Имея этот сигнал, мы можем складывать многоразрядные двоичные числа путём последовательного соединения нескольких однобитных сумматоров: выходной бит переноса сумматора младшего разряда передастся на входной бит переноса сумматора старшего разряда.
|
||||
|
||||
### Реализация одноразрядного сложения
|
||||
|
||||
Можно ли как-то описать сложение двух одноразрядных двоичных чисел с помощью логических операций? Давайте посмотрим на таблицу истинности подобной операции
|
||||
|
||||

|
||||
|
||||
*Таблица истинности одноразрядного сложения*
|
||||
|
||||
`S` — это цифра, записываемая в столбце сложения под числами `a` и `b`. `C` (*carry*, перенос) — это цифра, записываемая левее, если произошел перенос разряда. Как мы видим, перенос разряда происходит только в случае, когда оба числа одновременно равны единице. При этом в этот момент значение `S` обращается в `0`, и результат записывается как `10`, что в двоичной системе означает `2`. Кроме того, `S = 0` и в случае, когда оба операнда одновременно равны нулю. Вы можете заметить, что `S` равно нулю в тех случаях, когда `а` и `b` равны, и не равно нулю в противоположном случае. Подобным свойством обладает логическая операция **Исключающее ИЛИ** (**eXclusive OR**, **XOR**):
|
||||
|
||||

|
||||
|
||||
*Таблица истинности операции Исключающее ИЛИ (XOR)*
|
||||
|
||||
Для бита переноса всё ещё проще — он описывается операцией логическое И:
|
||||
|
||||

|
||||
|
||||
*Таблица истинности операции И*
|
||||
|
||||
Давайте нарисуем цифровую схему, связывающую входные и выходные сигналы с помощью логических элементов, соответствующих ожидаемому поведению:
|
||||
|
||||

|
||||
|
||||
*Рисунок 1. Цифровая схема устройства, складывающего два операнда с сохранением переноса (полусумматора)*
|
||||
|
||||
Вроде все замечательно, но есть проблема. В описании полного однобитного сумматора сказано, что у него есть три входа, а в наших таблицах истинности и на схеме выше их только два. На самом деле, на каждом этапе сложения в столбик мы всегда складывали три числа: цифру верхнего числа, цифру нижнего числа, и единицу в случае переноса разряда из предыдущего столбца (если с предыдущего разряда не было переноса, прибавление нуля неявно опускалось).
|
||||
|
||||
Таким образом, таблицы истинности немного усложняются:
|
||||
|
||||

|
||||
|
||||
*Таблица истинности сигналов полного однобитного сумматора*
|
||||
|
||||
Поскольку теперь у нас есть и входной и выходной биты переноса, для их различия добавлены индексы “in” и “out”.
|
||||
|
||||
Как в таком случае описать S? Например, как `а ^ b ^ Cіn`, где `^` — операция исключающего ИЛИ. Давайте сравним такую операцию с таблицей истинности. Сперва вспомним, что Исключающее ИЛИ — ассоциативная операция [`(a^b)^c = a^(b^с)`], т.е. нам не важен порядок вычисления. Предположим, что Cin равен нулю. Исключающее ИЛИ с нулем дает второй операнд (`a^0=a`), значит `(a^b)^0 = a^b`. Это соответствует верхней половине таблицы истинности для сигнала S, когда Cin равен нулю.
|
||||
|
||||
Предположим, что Cin равен единице. Исключающее ИЛИ с единицей дает нам отрицание второго операнда (`a^1=!a`), значит `(a^b)^1=!(a^b)`. Это соответствует нижней половине таблицы истинности, когда Cin равен единице.
|
||||
|
||||
Для выходного бита переноса всё гораздо проще. Он равен единице, когда хотя бы два из трех операндов равны единице, это значит что необходимо попарно сравнить все операнды, и если найдется хоть одна такая пара, он равен единице. Это утверждение можно записать следующим образом:
|
||||
|
||||
`Cоut = (a&b) | (а&Cіn) | (b&Cіn)`, где `&` — логическое И, `|` — логическое ИЛИ.
|
||||
|
||||
Цифровая схема устройства с описанным поведением выглядит следующим образом:
|
||||
|
||||

|
||||
|
||||
*Рисунок 2. Цифровая схема полного однобитного сумматора*
|
||||
|
||||
## Практика
|
||||
|
||||
Реализуем схему полусумматора (рис.1) в виде модуля, описанного на языке SystemVerilog.
|
||||
|
||||
Модуль `half_adder` имеет два входных сигнала и два выходных. Входы `a_i` и `b_i` идут на два логических элемента: Исключающее ИЛИ и И, выходы которых подключены к выходам модуля `sum_o` и `carry_o` соответственно.
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Прочти меня перед использованием кода из примера.</summary>
|
||||
|
||||
### Во все примеры кода намеренно вставлены неподдерживаемые символы. Не копируй, одумайся!
|
||||
|
||||
Важной частью изучения языка является практика по написанию кода. Даже если перепечатывая пример, вы не до конца его понимаете, вы запоминаете структуру кода и его конструкции. Вы изучаете этот пример для себя, а не для оценки, так что будьте честны с собой и воспроизведите пример самостоятельно.
|
||||
|
||||
<details>
|
||||
|
||||
<summary> — Но мне очень надо.</summary>
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
|
||||
<summary> — Я переписал пример точь-в-точь, а он все равно не работает!</summary>
|
||||
|
||||
Позови преподавателя, он тебе поможет.
|
||||
|
||||
</details>
|
||||
|
||||
</details>
|
||||
|
||||
```systemverilog
|
||||
module half_adder(
|
||||
inрut logic a_i, // Входные сигналы
|
||||
inрut logic b_i,
|
||||
|
||||
outрut logic sum_o, // Выходной сигнал
|
||||
outрut logic carry_o
|
||||
|
||||
);
|
||||
|
||||
assign sum_o = a_i ^ b_i;
|
||||
assign carry_o = a_i & b_i;
|
||||
|
||||
endmodule
|
||||
```
|
||||
|
||||
*Листинг 1. SystemVerilog-код модуля half_adder*
|
||||
|
||||
По данному коду, САПР может реализовать следующую схему:
|
||||
|
||||

|
||||
|
||||
*Рисунок 3. Цифровая схема модуля half_adder, сгенерированная САПР Vivado*
|
||||
|
||||
Схема похожа на рис. 1, но как проверить, что эта схема не содержит ошибок и делает именно то, что от нее ожидается?
|
||||
|
||||
Для этого необходимо провести моделирование этой схемы. Во время моделирования на вход схемы подаются входные воздействия. Каждое изменение входных сигналов схемы приводит к каскадному изменению состояния внутренних цепей, которые в итоге меняют выходные сигналы.
|
||||
|
||||
Подаваемые на схему входные воздействия формируются верификационным окружением. Верификационное окружение (или тестбенч) — это особый несинтезируемый модуль, который не имеет входных или выходных сигналов. Ему не нужны входные сигналы, поскольку он сам является генератором всех своих внутренних сигналов, и ему не нужны выходные сигналы, поскольку этот модуль ничего не вычисляет, только подает входные воздействия на проверяемый модуль. Внутри тестбенча можно использовать конструкции из несинтезируемого подмножества языка SystemVerilog, в частности программный блок `initial`, в котором команды выполняются последовательно, что делает этот блок чем-то отдаленно похожим на проверяющую программу. Поскольку изменение внутренних цепей происходит с некоторой задержкой относительно изменений входных сигналов, при моделировании есть возможность делать паузы между командами. Это делается с помощью специального символа #, за которым указывается количество отсчётов времени симуляции, которое нужно пропустить перед следующей командой.
|
||||
|
||||
Перед тем как писать верификационное окружение, необходимо составить план того, как будет проводиться проверка устройства (составить верификационный план).
|
||||
|
||||
Поскольку устройство настолько простое, что число всех его возможных входных наборов воздействий равно четырем, и не имеет памяти (т.е. каждый раз, когда модулю подаются на вход одни и те же значения, оно вернет тот же результат), мы можем проверить его работу, перебрав все возможные комбинации его входных сигналов.
|
||||
|
||||
```SystemVerilog
|
||||
module testbench(); // <- Не имеет ни входов, ни выходов!
|
||||
logic a, b, carry, sum;
|
||||
|
||||
half_adder DUT( // <- Подключаем проверяемый модуль
|
||||
.a_i (a),
|
||||
.b_i (b),
|
||||
.carry_o(p),
|
||||
.sum_o (s)
|
||||
);
|
||||
|
||||
initial begin
|
||||
a = 1'b0; b = 1'b0; // <- Подаём на входы модуля тестовые
|
||||
#10; // воздействия
|
||||
a = 1'b0; b = 1'b1;
|
||||
#10; // <- Делаем паузу в десять отсчётов
|
||||
a = 1'b1; b = 1'b0; // времени симуляции перед очередным
|
||||
#10; // изменением входных сигналов
|
||||
a = 1'b1; b = 1'b1;
|
||||
end
|
||||
endmodule
|
||||
```
|
||||
|
||||
*Листинг 2. SystemVerilog-код тестбенча для модуля example*
|
||||
|
||||

|
||||
|
||||
*Рисунок 4. Временная диаграмма, моделирующая работу схемы с рис.3*
|
||||
|
||||
В данной лабораторной работе вам предстоит реализовать схему полного однобитного сумматора (*рис. 2*).
|
||||
|
||||
### Полный четырехбитный сумматор
|
||||
|
||||
Складывать несколько однобитных чисел не сильно впечатляет, поэтому сейчас мы займемся по-настоящему крутыми вещами — будем складывать пары четырехбитных чисел! Четырехбитные числа — это сила, они позволяют выбрать любое число от 0 до 15, а если сложить два числа с сохранением переноса, то вы получите диапазон результатов вплоть до 31! И вся эта вычислительная мощь будет у вас прямо под рукой — бери и пользуйся!
|
||||
|
||||
До этого мы реализовали только сложение одного столбца в столбик, теперь мы хотим реализовать всю операцию сложения в столбик. Как это сделать? Сделать ровно то, что делается при сложении в столбик: сначала сложить младший столбец, получить бит переноса для следующего столбца, сложить следующий и т.д.
|
||||
|
||||
Давайте посмотрим, как это будет выглядеть на схеме (для простоты, внутренняя логика однобитного сумматора скрыта, но вы должны помнить, что каждый прямоугольник — это та же самая схема с рис. 2).
|
||||
|
||||

|
||||
*Рисунок 5. Схема четырехбитного сумматора*
|
||||
|
||||
Фиолетовой линией на схеме показаны провода, соединяющие выходной бит переноса сумматора предыдущего разряда, с входным битом переноса сумматора следующего разряда.
|
||||
|
||||
Как же реализовать модуль, состоящий из цепочки других модулей? Половину этой задачи мы уже сделали, когда писали тестбенч к однобитному полусумматору в *Листинге 2* — мы создавали модуль внутри другого модуля и подключали к нему провода. Теперь надо сделать то же самое, только с чуть большим числом модулей.
|
||||
|
||||
Для того, чтобы описать четырехбитный сумматор, необходимо подключить четыре однобитных подобно тому, как было описано в [`документе`](../../Basic%20Verilog%20structures/Modules.md#иерархия-модулей), который вы изучали перед лабораторной работой.
|
||||
|
||||

|
||||
|
||||
*Рисунок 6. Схема четырехбитного сумматора, сгенерированная САПР Vivado*
|
||||
|
||||
Схема может показаться запутанной, но если присмотреться, вы увидите, как от шин A, B и S отходят линии к каждому из сумматоров, а бит переноса передается от предыдущего сумматора к следующему.
|
||||
|
||||
## Задание
|
||||
|
||||
Вам необходимо реализовать полный 32-разрядный сумматор. Соединять вручную 32 однотипных модуля чревато усталостью и ошибками, поэтому можно сначала создать 4-разрядный сумматор (либо другой разрядности), а затем из набора 4-разрядных сумматоров сделать 32-битный.
|
||||
|
||||
Модуль должен быть описан в соответствии со следующим прототипом:
|
||||
|
||||
```SystemVerilog
|
||||
module fulladder4(
|
||||
input logic [3:0] a_i,
|
||||
input logic [3:0] b_i,
|
||||
input logic carry_i,
|
||||
output logic [3:0] sum_o,
|
||||
output logic carry_o
|
||||
);
|
||||
```
|
||||
|
||||
Либо же можно воспользоваться конструкцией `generate for`, пример использования которой вы можете увидеть на изображении ниже (так же существуют конструкции `generate if`, `generate case`).
|
||||
|
||||

|
||||
|
||||
*Рисунок 7. Пример использования конструкции generate for*
|
||||
|
||||
Как вы можете догадаться, в этом примере создано 3 модуля, имена которых оканчиваются на значение итератора, по которому шел цикл, а к самим модулям подключены соответствующие итератору провода из шин. Разумеется, для своих целей вы можете использовать и **i+1** и двойные циклы.
|
||||
|
||||
Обратите внимание на `: newgen` стоящий после ключевого слова `begin`. В некоторых САПР, код может не собраться, если у конструкции `generate for` нет названия (**лейбла**) с помощью подобной записи (двоеточия и названия).
|
||||
|
||||
**Обратите внимание**, что данный рисунок не является решением вашей задачи, поскольку у вашего сумматора три входа и два выхода, а у сумматора в примере нет бита переноса.
|
||||
|
||||
Несмотря на то, что конструкция выглядит как [~~утка, плавает как утка и крякает как утка~~](https://ru.wikipedia.org/wiki/Утиный_тест) цикл и ведет себя как цикл, нужно понимать, что это не цикл в привычном вам понимании этого слова. Это по-прежнему не программа. Вместо этого, вы выделяете общую закономерность по размещению однотипных модулей на схеме и описываете эту закономерность в виде цикла.
|
||||
|
||||
Если вы захотите воспользоваться этой конструкцией, вам будет нужно продумать как вы будете:
|
||||
|
||||
1. соединять входной бит переноса вашего модуля с входным битом переноса нулевого сумматора;
|
||||
2. передавать бит переноса с выхода предыдущего сумматора на вход следующего;
|
||||
3. соединять выходной бит переноса вашего модуля с выходным битом переноса последнего однобитного сумматора.
|
||||
|
||||
Далее идет пример того, как должен выглядеть заголовок модуля разрабатываемого устройства.
|
||||
|
||||
```systemverilog
|
||||
module fulladder32(
|
||||
іnput logic [31:0] a_i,
|
||||
іnput logic [31:0] b_i,
|
||||
іnput logic carry_i,
|
||||
оutput logic [31:0] sum_o,
|
||||
оutput logic carry_o
|
||||
);
|
||||
```
|
||||
|
||||
### Порядок выполнения задания
|
||||
|
||||
1. Согласно [руководству по созданию проекта в Vivado](../../Vivado%20Basics/Vivado%20trainer.md):
|
||||
1. Создайте проект;
|
||||
2. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder`.
|
||||
2. Опишите в файле модуль `fulladder`, схема которого представлена на *[Рис. 2](../../.pic/Labs/lab_01_adder/fig_02.drawio.png)*.
|
||||
3. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder`.
|
||||
4. Вставьте содержимое файла [`tb_fulladder.sv`](tb_fulladder.sv), расположенного рядом с данным документом.
|
||||
5. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||
6. Убедитесь по сигналам временной диаграммы, что модуль работает корректно.
|
||||
7. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder4`.
|
||||
8. Опишите модуль `fulladder4`, схема которого представлена на *Рис. 5 и 6*, используя [`иерархию модулей`](../../Basic%20Verilog%20structures/Modules.md#%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8F-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9), чтобы в нем выполнялось поразрядное сложение двух 4-разрядных чисел и входного бита переноса. Некоторые входы и выходы модуля будет необходимо описать в виде `векторов`.
|
||||
9. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 4-го разряда.
|
||||
10. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder4`.
|
||||
11. Вставьте содержимое файла [`tb_fulladder4.sv`](tb_fulladder4.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`.
|
||||
12. Запустите моделирование. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).
|
||||
13. Убедитесь, что модуль работает корректно и в консоль вывелось сообщение: `fulladder4 SUCCESS!!!`.
|
||||
14. В `Design Sources` проекта создайте `SystemVerilog`-файл `fulladder32`.
|
||||
15. Опишите модуль `fulladder32` так, чтобы в нем выполнялось поразрядное сложение двух 32-разрядных чисел и входного бита переноса. Его можно реализовать через последовательное соединение восьми 4-битных сумматоров, либо же можно соединить 32 однобитных сумматора (как вручную, так и с помощью конструкции `generate for`).
|
||||
16. Обратите внимание, что входной бит переноса должен подаваться на сумматор, выполняющий сложение нулевого разряда, выходной бит переноса соединяется с выходным битом переноса сумматора, выполняющего сложение 31-го разряда.
|
||||
17. В `Simulation Sources` проекта создайте `SystemVerilog`-файл `tb_fulladder32`.
|
||||
18. Вставьте содержимое файла [`tb_fulladder32.sv`](tb_fulladder32.sv). Нажмите по нему в окне `Sources` ПКМ и выберите `Set as Top`.
|
||||
19. Запустите моделирование.
|
||||
20. Убедитесь, что модуль работает корректно.
|
||||
21. Следующим шагом вы можете проверить работоспособность вашей цифровой схемы в ПЛИС [здесь](board%20files).
|
23
Labs/01. Adder/board files/README.md
Normal file
23
Labs/01. Adder/board files/README.md
Normal file
@@ -0,0 +1,23 @@
|
||||
# Проверка работы арифметико-логического устройство на ПЛИС
|
||||
|
||||
После того, как вы создали свой сумматор и проверили его на прохождение тестирующего модуля, вы можете использовать предложенный модуль окружения [`nexys_adder.sv`](nexys_adder.sv), который позволяет связать вашу логику с периферией, расположенной на плате `Nexys-A7`. Для его подключения, скачайте и добавьте файл в проект, либо скопируйте содержимое в новый `.sv` файл вашего проекта. В окне `Sources` нажмите на него ПКМ и выберите `Set as Top`, после чего в иерархии он станет главным, подключив ваш собственный модуль сумматора. Для того, чтобы дизайн мог физически подключиться к периферии, нужно в проекте выбрать `Add or create constraints` и подключить файл [`nexys_a7_100t.xdc`](nexys_a7_100t.xdc).
|
||||
|
||||
После этого наше устройство будет выглядеть так:
|
||||
|
||||

|
||||
|
||||
Подключенное окружение позволяет производить ввод входных значений (А, В и Pin) с помощью переключателей (номер переключателя отображен на самом краю платы), расположенных на плате. Операнд А задается переключателями 15-8, В: 7-0, Pin: тактовая кнопка BTND (нижняя из 5-ти, расположенных вместе в форме крестовины). Семисегментные индикаторы в шестнадцатиричном формате отображают на левом блоке слагаемые А и В, а на правом - результат сложения. На светодиодах, расположенных над переключателями отображается результат в двоичном формате.
|
||||
|
||||
Управление сумматором через плату
|
||||
|
||||

|
||||
|
||||
Для прошивки ПЛИС подключите утройство через USB, включите питание переключателем, выполните синтез и имплементацию вашего дизайна и сгенерируйте битстрим. Если на этом этапе у вас возникают ошибки, постарайтесь исправить из с помощью [`инструкции по работе с ошибками синтеза`](../../../Vivado%20Basics/Elaboration%20failed.md). После этого выберите в левом меню `Open Target` - `Auto Connect`, затем `Program Device` и ваше устройство прошьется.
|
||||
|
||||
Генерация битстрима
|
||||

|
||||
|
||||
Прошивка ПЛИС
|
||||

|
||||
|
||||
Попробуйте выставить на переключателях различные слагаемые, убедитесь, что все работает исправно и сдавайте работу.
|
211
Labs/01. Adder/board files/nexys_a7_100t.xdc
Normal file
211
Labs/01. Adder/board files/nexys_a7_100t.xdc
Normal file
@@ -0,0 +1,211 @@
|
||||
## This file is a general .xdc for the Nexys A7-100T
|
||||
## To use it in a project:
|
||||
## - uncomment the lines corresponding to used pins
|
||||
## - rename the used ports (in each line, after get_ports) according to the top level signal names in the project
|
||||
|
||||
# Clock signal
|
||||
set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 } [get_ports { CLK100 }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz
|
||||
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CLK100}];
|
||||
|
||||
|
||||
#Switches
|
||||
set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports { SW[0] }]; #IO_L24N_T3_RS0_15 Sch=sw[0]
|
||||
set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports { SW[1] }]; #IO_L3N_T0_DQS_EMCCLK_14 Sch=sw[1]
|
||||
set_property -dict { PACKAGE_PIN M13 IOSTANDARD LVCMOS33 } [get_ports { SW[2] }]; #IO_L6N_T0_D08_VREF_14 Sch=sw[2]
|
||||
set_property -dict { PACKAGE_PIN R15 IOSTANDARD LVCMOS33 } [get_ports { SW[3] }]; #IO_L13N_T2_MRCC_14 Sch=sw[3]
|
||||
set_property -dict { PACKAGE_PIN R17 IOSTANDARD LVCMOS33 } [get_ports { SW[4] }]; #IO_L12N_T1_MRCC_14 Sch=sw[4]
|
||||
set_property -dict { PACKAGE_PIN T18 IOSTANDARD LVCMOS33 } [get_ports { SW[5] }]; #IO_L7N_T1_D10_14 Sch=sw[5]
|
||||
set_property -dict { PACKAGE_PIN U18 IOSTANDARD LVCMOS33 } [get_ports { SW[6] }]; #IO_L17N_T2_A13_D29_14 Sch=sw[6]
|
||||
set_property -dict { PACKAGE_PIN R13 IOSTANDARD LVCMOS33 } [get_ports { SW[7] }]; #IO_L5N_T0_D07_14 Sch=sw[7]
|
||||
set_property -dict { PACKAGE_PIN T8 IOSTANDARD LVCMOS18 } [get_ports { SW[8] }]; #IO_L24N_T3_34 Sch=sw[8]
|
||||
set_property -dict { PACKAGE_PIN U8 IOSTANDARD LVCMOS18 } [get_ports { SW[9] }]; #IO_25_34 Sch=sw[9]
|
||||
set_property -dict { PACKAGE_PIN R16 IOSTANDARD LVCMOS33 } [get_ports { SW[10] }]; #IO_L15P_T2_DQS_RDWR_B_14 Sch=sw[10]
|
||||
set_property -dict { PACKAGE_PIN T13 IOSTANDARD LVCMOS33 } [get_ports { SW[11] }]; #IO_L23P_T3_A03_D19_14 Sch=sw[11]
|
||||
set_property -dict { PACKAGE_PIN H6 IOSTANDARD LVCMOS33 } [get_ports { SW[12] }]; #IO_L24P_T3_35 Sch=sw[12]
|
||||
set_property -dict { PACKAGE_PIN U12 IOSTANDARD LVCMOS33 } [get_ports { SW[13] }]; #IO_L20P_T3_A08_D24_14 Sch=sw[13]
|
||||
set_property -dict { PACKAGE_PIN U11 IOSTANDARD LVCMOS33 } [get_ports { SW[14] }]; #IO_L19N_T3_A09_D25_VREF_14 Sch=sw[14]
|
||||
set_property -dict { PACKAGE_PIN V10 IOSTANDARD LVCMOS33 } [get_ports { SW[15] }]; #IO_L21P_T3_DQS_14 Sch=sw[15]
|
||||
|
||||
### LEDs
|
||||
set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 } [get_ports { LED[0] }]; #IO_L18P_T2_A24_15 Sch=led[0]
|
||||
set_property -dict { PACKAGE_PIN K15 IOSTANDARD LVCMOS33 } [get_ports { LED[1] }]; #IO_L24P_T3_RS1_15 Sch=led[1]
|
||||
set_property -dict { PACKAGE_PIN J13 IOSTANDARD LVCMOS33 } [get_ports { LED[2] }]; #IO_L17N_T2_A25_15 Sch=led[2]
|
||||
set_property -dict { PACKAGE_PIN N14 IOSTANDARD LVCMOS33 } [get_ports { LED[3] }]; #IO_L8P_T1_D11_14 Sch=led[3]
|
||||
set_property -dict { PACKAGE_PIN R18 IOSTANDARD LVCMOS33 } [get_ports { LED[4] }]; #IO_L7P_T1_D09_14 Sch=led[4]
|
||||
set_property -dict { PACKAGE_PIN V17 IOSTANDARD LVCMOS33 } [get_ports { LED[5] }]; #IO_L18N_T2_A11_D27_14 Sch=led[5]
|
||||
set_property -dict { PACKAGE_PIN U17 IOSTANDARD LVCMOS33 } [get_ports { LED[6] }]; #IO_L17P_T2_A14_D30_14 Sch=led[6]
|
||||
set_property -dict { PACKAGE_PIN U16 IOSTANDARD LVCMOS33 } [get_ports { LED[7] }]; #IO_L18P_T2_A12_D28_14 Sch=led[7]
|
||||
set_property -dict { PACKAGE_PIN V16 IOSTANDARD LVCMOS33 } [get_ports { LED[8] }]; #IO_L16N_T2_A15_D31_14 Sch=led[8]
|
||||
set_property -dict { PACKAGE_PIN T15 IOSTANDARD LVCMOS33 } [get_ports { LED[9] }]; #IO_L14N_T2_SRCC_14 Sch=led[9]
|
||||
set_property -dict { PACKAGE_PIN U14 IOSTANDARD LVCMOS33 } [get_ports { LED[10] }]; #IO_L22P_T3_A05_D21_14 Sch=led[10]
|
||||
set_property -dict { PACKAGE_PIN T16 IOSTANDARD LVCMOS33 } [get_ports { LED[11] }]; #IO_L15N_T2_DQS_DOUT_CSO_B_14 Sch=led[11]
|
||||
set_property -dict { PACKAGE_PIN V15 IOSTANDARD LVCMOS33 } [get_ports { LED[12] }]; #IO_L16P_T2_CSI_B_14 Sch=led[12]
|
||||
set_property -dict { PACKAGE_PIN V14 IOSTANDARD LVCMOS33 } [get_ports { LED[13] }]; #IO_L22N_T3_A04_D20_14 Sch=led[13]
|
||||
set_property -dict { PACKAGE_PIN V12 IOSTANDARD LVCMOS33 } [get_ports { LED[14] }]; #IO_L20N_T3_A07_D23_14 Sch=led[14]
|
||||
set_property -dict { PACKAGE_PIN V11 IOSTANDARD LVCMOS33 } [get_ports { LED[15] }]; #IO_L21N_T3_DQS_A06_D22_14 Sch=led[15]
|
||||
|
||||
## RGB LEDs
|
||||
#set_property -dict { PACKAGE_PIN R12 IOSTANDARD LVCMOS33 } [get_ports { LED16_B }]; #IO_L5P_T0_D06_14 Sch=led16_b
|
||||
#set_property -dict { PACKAGE_PIN M16 IOSTANDARD LVCMOS33 } [get_ports { LED16_G }]; #IO_L10P_T1_D14_14 Sch=led16_g
|
||||
#set_property -dict { PACKAGE_PIN N15 IOSTANDARD LVCMOS33 } [get_ports { LED16_R }]; #IO_L11P_T1_SRCC_14 Sch=led16_r
|
||||
#set_property -dict { PACKAGE_PIN G14 IOSTANDARD LVCMOS33 } [get_ports { LED17_B }]; #IO_L15N_T2_DQS_ADV_B_15 Sch=led17_b
|
||||
#set_property -dict { PACKAGE_PIN R11 IOSTANDARD LVCMOS33 } [get_ports { LED17_G }]; #IO_0_14 Sch=led17_g
|
||||
#set_property -dict { PACKAGE_PIN N16 IOSTANDARD LVCMOS33 } [get_ports { LED17_R }]; #IO_L11N_T1_SRCC_14 Sch=led17_r
|
||||
|
||||
##7 segment display
|
||||
set_property -dict { PACKAGE_PIN T10 IOSTANDARD LVCMOS33 } [get_ports { CA }]; #IO_L24N_T3_A00_D16_14 Sch=ca
|
||||
set_property -dict { PACKAGE_PIN R10 IOSTANDARD LVCMOS33 } [get_ports { CB }]; #IO_25_14 Sch=cb
|
||||
set_property -dict { PACKAGE_PIN K16 IOSTANDARD LVCMOS33 } [get_ports { CC }]; #IO_25_15 Sch=cc
|
||||
set_property -dict { PACKAGE_PIN K13 IOSTANDARD LVCMOS33 } [get_ports { CD }]; #IO_L17P_T2_A26_15 Sch=cd
|
||||
set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { CE }]; #IO_L13P_T2_MRCC_14 Sch=ce
|
||||
set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { CF }]; #IO_L19P_T3_A10_D26_14 Sch=cf
|
||||
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { CG }]; #IO_L4P_T0_D04_14 Sch=cg
|
||||
set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { DP }]; #IO_L19N_T3_A21_VREF_15 Sch=dp
|
||||
set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { AN[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0]
|
||||
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { AN[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1]
|
||||
set_property -dict { PACKAGE_PIN T9 IOSTANDARD LVCMOS33 } [get_ports { AN[2] }]; #IO_L24P_T3_A01_D17_14 Sch=an[2]
|
||||
set_property -dict { PACKAGE_PIN J14 IOSTANDARD LVCMOS33 } [get_ports { AN[3] }]; #IO_L19P_T3_A22_15 Sch=an[3]
|
||||
set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { AN[4] }]; #IO_L8N_T1_D12_14 Sch=an[4]
|
||||
set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { AN[5] }]; #IO_L14P_T2_SRCC_14 Sch=an[5]
|
||||
set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { AN[6] }]; #IO_L23P_T3_35 Sch=an[6]
|
||||
set_property -dict { PACKAGE_PIN U13 IOSTANDARD LVCMOS33 } [get_ports { AN[7] }]; #IO_L23N_T3_A02_D18_14 Sch=an[7]
|
||||
|
||||
##Buttons
|
||||
set_property -dict { PACKAGE_PIN C12 IOSTANDARD LVCMOS33 } [get_ports { resetn }]; #IO_L3P_T0_DQS_AD1P_15 Sch=cpu_resetn
|
||||
#set_property -dict { PACKAGE_PIN N17 IOSTANDARD LVCMOS33 } [get_ports { BTNC }]; #IO_L9P_T1_DQS_14 Sch=btnc
|
||||
#set_property -dict { PACKAGE_PIN M18 IOSTANDARD LVCMOS33 } [get_ports { BTNU }]; #IO_L4N_T0_D05_14 Sch=btnu
|
||||
#set_property -dict { PACKAGE_PIN P17 IOSTANDARD LVCMOS33 } [get_ports { BTNL }]; #IO_L12P_T1_MRCC_14 Sch=btnl
|
||||
#set_property -dict { PACKAGE_PIN M17 IOSTANDARD LVCMOS33 } [get_ports { BTNR }]; #IO_L10N_T1_D15_14 Sch=btnr
|
||||
set_property -dict { PACKAGE_PIN P18 IOSTANDARD LVCMOS33 } [get_ports { BTND }]; #IO_L9N_T1_DQS_D13_14 Sch=btnd
|
||||
|
||||
|
||||
##Pmod Headers
|
||||
##Pmod Header JA
|
||||
#set_property -dict { PACKAGE_PIN C17 IOSTANDARD LVCMOS33 } [get_ports { JA[1] }]; #IO_L20N_T3_A19_15 Sch=ja[1]
|
||||
#set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 } [get_ports { JA[2] }]; #IO_L21N_T3_DQS_A18_15 Sch=ja[2]
|
||||
#set_property -dict { PACKAGE_PIN E18 IOSTANDARD LVCMOS33 } [get_ports { JA[3] }]; #IO_L21P_T3_DQS_15 Sch=ja[3]
|
||||
#set_property -dict { PACKAGE_PIN G17 IOSTANDARD LVCMOS33 } [get_ports { JA[4] }]; #IO_L18N_T2_A23_15 Sch=ja[4]
|
||||
#set_property -dict { PACKAGE_PIN D17 IOSTANDARD LVCMOS33 } [get_ports { JA[7] }]; #IO_L16N_T2_A27_15 Sch=ja[7]
|
||||
#set_property -dict { PACKAGE_PIN E17 IOSTANDARD LVCMOS33 } [get_ports { JA[8] }]; #IO_L16P_T2_A28_15 Sch=ja[8]
|
||||
#set_property -dict { PACKAGE_PIN F18 IOSTANDARD LVCMOS33 } [get_ports { JA[9] }]; #IO_L22N_T3_A16_15 Sch=ja[9]
|
||||
#set_property -dict { PACKAGE_PIN G18 IOSTANDARD LVCMOS33 } [get_ports { JA[10] }]; #IO_L22P_T3_A17_15 Sch=ja[10]
|
||||
|
||||
##Pmod Header JB
|
||||
#set_property -dict { PACKAGE_PIN D14 IOSTANDARD LVCMOS33 } [get_ports { JB[1] }]; #IO_L1P_T0_AD0P_15 Sch=jb[1]
|
||||
#set_property -dict { PACKAGE_PIN F16 IOSTANDARD LVCMOS33 } [get_ports { JB[2] }]; #IO_L14N_T2_SRCC_15 Sch=jb[2]
|
||||
#set_property -dict { PACKAGE_PIN G16 IOSTANDARD LVCMOS33 } [get_ports { JB[3] }]; #IO_L13N_T2_MRCC_15 Sch=jb[3]
|
||||
#set_property -dict { PACKAGE_PIN H14 IOSTANDARD LVCMOS33 } [get_ports { JB[4] }]; #IO_L15P_T2_DQS_15 Sch=jb[4]
|
||||
#set_property -dict { PACKAGE_PIN E16 IOSTANDARD LVCMOS33 } [get_ports { JB[7] }]; #IO_L11N_T1_SRCC_15 Sch=jb[7]
|
||||
#set_property -dict { PACKAGE_PIN F13 IOSTANDARD LVCMOS33 } [get_ports { JB[8] }]; #IO_L5P_T0_AD9P_15 Sch=jb[8]
|
||||
#set_property -dict { PACKAGE_PIN G13 IOSTANDARD LVCMOS33 } [get_ports { JB[9] }]; #IO_0_15 Sch=jb[9]
|
||||
#set_property -dict { PACKAGE_PIN H16 IOSTANDARD LVCMOS33 } [get_ports { JB[10] }]; #IO_L13P_T2_MRCC_15 Sch=jb[10]
|
||||
|
||||
##Pmod Header JC
|
||||
#set_property -dict { PACKAGE_PIN K1 IOSTANDARD LVCMOS33 } [get_ports { JC[1] }]; #IO_L23N_T3_35 Sch=jc[1]
|
||||
#set_property -dict { PACKAGE_PIN F6 IOSTANDARD LVCMOS33 } [get_ports { JC[2] }]; #IO_L19N_T3_VREF_35 Sch=jc[2]
|
||||
#set_property -dict { PACKAGE_PIN J2 IOSTANDARD LVCMOS33 } [get_ports { JC[3] }]; #IO_L22N_T3_35 Sch=jc[3]
|
||||
#set_property -dict { PACKAGE_PIN G6 IOSTANDARD LVCMOS33 } [get_ports { JC[4] }]; #IO_L19P_T3_35 Sch=jc[4]
|
||||
#set_property -dict { PACKAGE_PIN E7 IOSTANDARD LVCMOS33 } [get_ports { JC[7] }]; #IO_L6P_T0_35 Sch=jc[7]
|
||||
#set_property -dict { PACKAGE_PIN J3 IOSTANDARD LVCMOS33 } [get_ports { JC[8] }]; #IO_L22P_T3_35 Sch=jc[8]
|
||||
#set_property -dict { PACKAGE_PIN J4 IOSTANDARD LVCMOS33 } [get_ports { JC[9] }]; #IO_L21P_T3_DQS_35 Sch=jc[9]
|
||||
#set_property -dict { PACKAGE_PIN E6 IOSTANDARD LVCMOS33 } [get_ports { JC[10] }]; #IO_L5P_T0_AD13P_35 Sch=jc[10]
|
||||
|
||||
##Pmod Header JD
|
||||
#set_property -dict { PACKAGE_PIN H4 IOSTANDARD LVCMOS33 } [get_ports { JD[1] }]; #IO_L21N_T3_DQS_35 Sch=jd[1]
|
||||
#set_property -dict { PACKAGE_PIN H1 IOSTANDARD LVCMOS33 } [get_ports { JD[2] }]; #IO_L17P_T2_35 Sch=jd[2]
|
||||
#set_property -dict { PACKAGE_PIN G1 IOSTANDARD LVCMOS33 } [get_ports { JD[3] }]; #IO_L17N_T2_35 Sch=jd[3]
|
||||
#set_property -dict { PACKAGE_PIN G3 IOSTANDARD LVCMOS33 } [get_ports { JD[4] }]; #IO_L20N_T3_35 Sch=jd[4]
|
||||
#set_property -dict { PACKAGE_PIN H2 IOSTANDARD LVCMOS33 } [get_ports { JD[7] }]; #IO_L15P_T2_DQS_35 Sch=jd[7]
|
||||
#set_property -dict { PACKAGE_PIN G4 IOSTANDARD LVCMOS33 } [get_ports { JD[8] }]; #IO_L20P_T3_35 Sch=jd[8]
|
||||
#set_property -dict { PACKAGE_PIN G2 IOSTANDARD LVCMOS33 } [get_ports { JD[9] }]; #IO_L15N_T2_DQS_35 Sch=jd[9]
|
||||
#set_property -dict { PACKAGE_PIN F3 IOSTANDARD LVCMOS33 } [get_ports { JD[10] }]; #IO_L13N_T2_MRCC_35 Sch=jd[10]
|
||||
|
||||
##Pmod Header JXADC
|
||||
#set_property -dict { PACKAGE_PIN A14 IOSTANDARD LVCMOS33 } [get_ports { XA_N[1] }]; #IO_L9N_T1_DQS_AD3N_15 Sch=xa_n[1]
|
||||
#set_property -dict { PACKAGE_PIN A13 IOSTANDARD LVCMOS33 } [get_ports { XA_P[1] }]; #IO_L9P_T1_DQS_AD3P_15 Sch=xa_p[1]
|
||||
#set_property -dict { PACKAGE_PIN A16 IOSTANDARD LVCMOS33 } [get_ports { XA_N[2] }]; #IO_L8N_T1_AD10N_15 Sch=xa_n[2]
|
||||
#set_property -dict { PACKAGE_PIN A15 IOSTANDARD LVCMOS33 } [get_ports { XA_P[2] }]; #IO_L8P_T1_AD10P_15 Sch=xa_p[2]
|
||||
#set_property -dict { PACKAGE_PIN B17 IOSTANDARD LVCMOS33 } [get_ports { XA_N[3] }]; #IO_L7N_T1_AD2N_15 Sch=xa_n[3]
|
||||
#set_property -dict { PACKAGE_PIN B16 IOSTANDARD LVCMOS33 } [get_ports { XA_P[3] }]; #IO_L7P_T1_AD2P_15 Sch=xa_p[3]
|
||||
#set_property -dict { PACKAGE_PIN A18 IOSTANDARD LVCMOS33 } [get_ports { XA_N[4] }]; #IO_L10N_T1_AD11N_15 Sch=xa_n[4]
|
||||
#set_property -dict { PACKAGE_PIN B18 IOSTANDARD LVCMOS33 } [get_ports { XA_P[4] }]; #IO_L10P_T1_AD11P_15 Sch=xa_p[4]
|
||||
|
||||
##VGA Connector
|
||||
#set_property -dict { PACKAGE_PIN A3 IOSTANDARD LVCMOS33 } [get_ports { VGA_R[0] }]; #IO_L8N_T1_AD14N_35 Sch=vga_r[0]
|
||||
#set_property -dict { PACKAGE_PIN B4 IOSTANDARD LVCMOS33 } [get_ports { VGA_R[1] }]; #IO_L7N_T1_AD6N_35 Sch=vga_r[1]
|
||||
#set_property -dict { PACKAGE_PIN C5 IOSTANDARD LVCMOS33 } [get_ports { VGA_R[2] }]; #IO_L1N_T0_AD4N_35 Sch=vga_r[2]
|
||||
#set_property -dict { PACKAGE_PIN A4 IOSTANDARD LVCMOS33 } [get_ports { VGA_R[3] }]; #IO_L8P_T1_AD14P_35 Sch=vga_r[3]
|
||||
#set_property -dict { PACKAGE_PIN C6 IOSTANDARD LVCMOS33 } [get_ports { VGA_G[0] }]; #IO_L1P_T0_AD4P_35 Sch=vga_g[0]
|
||||
#set_property -dict { PACKAGE_PIN A5 IOSTANDARD LVCMOS33 } [get_ports { VGA_G[1] }]; #IO_L3N_T0_DQS_AD5N_35 Sch=vga_g[1]
|
||||
#set_property -dict { PACKAGE_PIN B6 IOSTANDARD LVCMOS33 } [get_ports { VGA_G[2] }]; #IO_L2N_T0_AD12N_35 Sch=vga_g[2]
|
||||
#set_property -dict { PACKAGE_PIN A6 IOSTANDARD LVCMOS33 } [get_ports { VGA_G[3] }]; #IO_L3P_T0_DQS_AD5P_35 Sch=vga_g[3]
|
||||
#set_property -dict { PACKAGE_PIN B7 IOSTANDARD LVCMOS33 } [get_ports { VGA_B[0] }]; #IO_L2P_T0_AD12P_35 Sch=vga_b[0]
|
||||
#set_property -dict { PACKAGE_PIN C7 IOSTANDARD LVCMOS33 } [get_ports { VGA_B[1] }]; #IO_L4N_T0_35 Sch=vga_b[1]
|
||||
#set_property -dict { PACKAGE_PIN D7 IOSTANDARD LVCMOS33 } [get_ports { VGA_B[2] }]; #IO_L6N_T0_VREF_35 Sch=vga_b[2]
|
||||
#set_property -dict { PACKAGE_PIN D8 IOSTANDARD LVCMOS33 } [get_ports { VGA_B[3] }]; #IO_L4P_T0_35 Sch=vga_b[3]
|
||||
#set_property -dict { PACKAGE_PIN B11 IOSTANDARD LVCMOS33 } [get_ports { VGA_HS }]; #IO_L4P_T0_15 Sch=vga_hs
|
||||
#set_property -dict { PACKAGE_PIN B12 IOSTANDARD LVCMOS33 } [get_ports { VGA_VS }]; #IO_L3N_T0_DQS_AD1N_15 Sch=vga_vs
|
||||
|
||||
##Micro SD Connector
|
||||
#set_property -dict { PACKAGE_PIN E2 IOSTANDARD LVCMOS33 } [get_ports { SD_RESET }]; #IO_L14P_T2_SRCC_35 Sch=sd_reset
|
||||
#set_property -dict { PACKAGE_PIN A1 IOSTANDARD LVCMOS33 } [get_ports { SD_CD }]; #IO_L9N_T1_DQS_AD7N_35 Sch=sd_cd
|
||||
#set_property -dict { PACKAGE_PIN B1 IOSTANDARD LVCMOS33 } [get_ports { SD_SCK }]; #IO_L9P_T1_DQS_AD7P_35 Sch=sd_sck
|
||||
#set_property -dict { PACKAGE_PIN C1 IOSTANDARD LVCMOS33 } [get_ports { SD_CMD }]; #IO_L16N_T2_35 Sch=sd_cmd
|
||||
#set_property -dict { PACKAGE_PIN C2 IOSTANDARD LVCMOS33 } [get_ports { SD_DAT[0] }]; #IO_L16P_T2_35 Sch=sd_dat[0]
|
||||
#set_property -dict { PACKAGE_PIN E1 IOSTANDARD LVCMOS33 } [get_ports { SD_DAT[1] }]; #IO_L18N_T2_35 Sch=sd_dat[1]
|
||||
#set_property -dict { PACKAGE_PIN F1 IOSTANDARD LVCMOS33 } [get_ports { SD_DAT[2] }]; #IO_L18P_T2_35 Sch=sd_dat[2]
|
||||
#set_property -dict { PACKAGE_PIN D2 IOSTANDARD LVCMOS33 } [get_ports { SD_DAT[3] }]; #IO_L14N_T2_SRCC_35 Sch=sd_dat[3]
|
||||
|
||||
##Accelerometer
|
||||
#set_property -dict { PACKAGE_PIN E15 IOSTANDARD LVCMOS33 } [get_ports { ACL_MISO }]; #IO_L11P_T1_SRCC_15 Sch=acl_miso
|
||||
#set_property -dict { PACKAGE_PIN F14 IOSTANDARD LVCMOS33 } [get_ports { ACL_MOSI }]; #IO_L5N_T0_AD9N_15 Sch=acl_mosi
|
||||
#set_property -dict { PACKAGE_PIN F15 IOSTANDARD LVCMOS33 } [get_ports { ACL_SCLK }]; #IO_L14P_T2_SRCC_15 Sch=acl_sclk
|
||||
#set_property -dict { PACKAGE_PIN D15 IOSTANDARD LVCMOS33 } [get_ports { ACL_CSN }]; #IO_L12P_T1_MRCC_15 Sch=acl_csn
|
||||
#set_property -dict { PACKAGE_PIN B13 IOSTANDARD LVCMOS33 } [get_ports { ACL_INT[1] }]; #IO_L2P_T0_AD8P_15 Sch=acl_int[1]
|
||||
#set_property -dict { PACKAGE_PIN C16 IOSTANDARD LVCMOS33 } [get_ports { ACL_INT[2] }]; #IO_L20P_T3_A20_15 Sch=acl_int[2]
|
||||
|
||||
##Temperature Sensor
|
||||
#set_property -dict { PACKAGE_PIN C14 IOSTANDARD LVCMOS33 } [get_ports { TMP_SCL }]; #IO_L1N_T0_AD0N_15 Sch=tmp_scl
|
||||
#set_property -dict { PACKAGE_PIN C15 IOSTANDARD LVCMOS33 } [get_ports { TMP_SDA }]; #IO_L12N_T1_MRCC_15 Sch=tmp_sda
|
||||
#set_property -dict { PACKAGE_PIN D13 IOSTANDARD LVCMOS33 } [get_ports { TMP_INT }]; #IO_L6N_T0_VREF_15 Sch=tmp_int
|
||||
#set_property -dict { PACKAGE_PIN B14 IOSTANDARD LVCMOS33 } [get_ports { TMP_CT }]; #IO_L2N_T0_AD8N_15 Sch=tmp_ct
|
||||
|
||||
##Omnidirectional Microphone
|
||||
#set_property -dict { PACKAGE_PIN J5 IOSTANDARD LVCMOS33 } [get_ports { M_CLK }]; #IO_25_35 Sch=m_clk
|
||||
#set_property -dict { PACKAGE_PIN H5 IOSTANDARD LVCMOS33 } [get_ports { M_DATA }]; #IO_L24N_T3_35 Sch=m_data
|
||||
#set_property -dict { PACKAGE_PIN F5 IOSTANDARD LVCMOS33 } [get_ports { M_LRSEL }]; #IO_0_35 Sch=m_lrsel
|
||||
|
||||
##PWM Audio Amplifier
|
||||
#set_property -dict { PACKAGE_PIN A11 IOSTANDARD LVCMOS33 } [get_ports { AUD_PWM }]; #IO_L4N_T0_15 Sch=aud_pwm
|
||||
#set_property -dict { PACKAGE_PIN D12 IOSTANDARD LVCMOS33 } [get_ports { AUD_SD }]; #IO_L6P_T0_15 Sch=aud_sd
|
||||
|
||||
##USB-RS232 Interface
|
||||
#set_property -dict { PACKAGE_PIN C4 IOSTANDARD LVCMOS33 } [get_ports { UART_TXD_IN }]; #IO_L7P_T1_AD6P_35 Sch=uart_txd_in
|
||||
#set_property -dict { PACKAGE_PIN D4 IOSTANDARD LVCMOS33 } [get_ports { UART_RXD_OUT }]; #IO_L11N_T1_SRCC_35 Sch=uart_rxd_out
|
||||
#set_property -dict { PACKAGE_PIN D3 IOSTANDARD LVCMOS33 } [get_ports { UART_CTS }]; #IO_L12N_T1_MRCC_35 Sch=uart_cts
|
||||
#set_property -dict { PACKAGE_PIN E5 IOSTANDARD LVCMOS33 } [get_ports { UART_RTS }]; #IO_L5N_T0_AD13N_35 Sch=uart_rts
|
||||
|
||||
##USB HID (PS/2)
|
||||
#set_property -dict { PACKAGE_PIN F4 IOSTANDARD LVCMOS33 } [get_ports { PS2_CLK }]; #IO_L13P_T2_MRCC_35 Sch=ps2_clk
|
||||
#set_property -dict { PACKAGE_PIN B2 IOSTANDARD LVCMOS33 } [get_ports { PS2_DATA }]; #IO_L10N_T1_AD15N_35 Sch=ps2_data
|
||||
|
||||
##SMSC Ethernet PHY
|
||||
#set_property -dict { PACKAGE_PIN C9 IOSTANDARD LVCMOS33 } [get_ports { ETH_MDC }]; #IO_L11P_T1_SRCC_16 Sch=eth_mdc
|
||||
#set_property -dict { PACKAGE_PIN A9 IOSTANDARD LVCMOS33 } [get_ports { ETH_MDIO }]; #IO_L14N_T2_SRCC_16 Sch=eth_mdio
|
||||
#set_property -dict { PACKAGE_PIN B3 IOSTANDARD LVCMOS33 } [get_ports { ETH_RSTN }]; #IO_L10P_T1_AD15P_35 Sch=eth_rstn
|
||||
#set_property -dict { PACKAGE_PIN D9 IOSTANDARD LVCMOS33 } [get_ports { ETH_CRSDV }]; #IO_L6N_T0_VREF_16 Sch=eth_crsdv
|
||||
#set_property -dict { PACKAGE_PIN C10 IOSTANDARD LVCMOS33 } [get_ports { ETH_RXERR }]; #IO_L13N_T2_MRCC_16 Sch=eth_rxerr
|
||||
#set_property -dict { PACKAGE_PIN C11 IOSTANDARD LVCMOS33 } [get_ports { ETH_RXD[0] }]; #IO_L13P_T2_MRCC_16 Sch=eth_rxd[0]
|
||||
#set_property -dict { PACKAGE_PIN D10 IOSTANDARD LVCMOS33 } [get_ports { ETH_RXD[1] }]; #IO_L19N_T3_VREF_16 Sch=eth_rxd[1]
|
||||
#set_property -dict { PACKAGE_PIN B9 IOSTANDARD LVCMOS33 } [get_ports { ETH_TXEN }]; #IO_L11N_T1_SRCC_16 Sch=eth_txen
|
||||
#set_property -dict { PACKAGE_PIN A10 IOSTANDARD LVCMOS33 } [get_ports { ETH_TXD[0] }]; #IO_L14P_T2_SRCC_16 Sch=eth_txd[0]
|
||||
#set_property -dict { PACKAGE_PIN A8 IOSTANDARD LVCMOS33 } [get_ports { ETH_TXD[1] }]; #IO_L12N_T1_MRCC_16 Sch=eth_txd[1]
|
||||
#set_property -dict { PACKAGE_PIN D5 IOSTANDARD LVCMOS33 } [get_ports { ETH_REFCLK }]; #IO_L11P_T1_SRCC_35 Sch=eth_refclk
|
||||
#set_property -dict { PACKAGE_PIN B8 IOSTANDARD LVCMOS33 } [get_ports { ETH_INTN }]; #IO_L12P_T1_MRCC_16 Sch=eth_intn
|
||||
|
||||
##Quad SPI Flash
|
||||
#set_property -dict { PACKAGE_PIN K17 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[0] }]; #IO_L1P_T0_D00_MOSI_14 Sch=qspi_dq[0]
|
||||
#set_property -dict { PACKAGE_PIN K18 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[1] }]; #IO_L1N_T0_D01_DIN_14 Sch=qspi_dq[1]
|
||||
#set_property -dict { PACKAGE_PIN L14 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[2] }]; #IO_L2P_T0_D02_14 Sch=qspi_dq[2]
|
||||
#set_property -dict { PACKAGE_PIN M14 IOSTANDARD LVCMOS33 } [get_ports { QSPI_DQ[3] }]; #IO_L2N_T0_D03_14 Sch=qspi_dq[3]
|
||||
#set_property -dict { PACKAGE_PIN L13 IOSTANDARD LVCMOS33 } [get_ports { QSPI_CSN }]; #IO_L6P_T0_FCS_B_14 Sch=qspi_csn
|
130
Labs/01. Adder/board files/nexys_adder.sv
Normal file
130
Labs/01. Adder/board files/nexys_adder.sv
Normal file
@@ -0,0 +1,130 @@
|
||||
`timescale 1ns / 1ps
|
||||
|
||||
module nexys_adder(
|
||||
input CLK100,
|
||||
input resetn,
|
||||
input BTND,
|
||||
input [15:0] SW,
|
||||
output [15:0] LED,
|
||||
|
||||
output CA, CB, CC, CD, CE, CF, CG, DP,
|
||||
|
||||
output [7:0] AN
|
||||
);
|
||||
|
||||
wire [31:0] A;
|
||||
wire [31:0] B;
|
||||
wire Pin;
|
||||
|
||||
wire [31:0] S;
|
||||
wire Pout;
|
||||
|
||||
localparam pwm = 1000;
|
||||
reg [9:0] counter;
|
||||
reg [3:0] semseg;
|
||||
reg [7:0] ANreg;
|
||||
|
||||
reg CAr, CBr, CCr, CDr, CEr, CFr, CGr, DPr;
|
||||
|
||||
reg [15:0] LEDr;
|
||||
|
||||
fulladder32 DUT
|
||||
(
|
||||
.A (A),
|
||||
.B (B),
|
||||
.Pin (Pin),
|
||||
|
||||
.S (S),
|
||||
.Pout (Pout)
|
||||
);
|
||||
|
||||
assign B = {24'b0,SW[7:0]};
|
||||
assign A = {24'b0,SW[15:8]};
|
||||
assign Pin = BTND;
|
||||
|
||||
assign LED[15:0] = LEDr[15:0];
|
||||
|
||||
assign AN[7:0] = ANreg[7:0];
|
||||
assign {CA, CB, CC, CD, CE, CF, CG, DP} = {CAr, CBr, CCr, CDr, CEr, CFr, CGr, DPr};
|
||||
|
||||
|
||||
initial ANreg[7:0] = 8'b11111110;
|
||||
|
||||
always @(posedge CLK100) begin
|
||||
if (!resetn) begin
|
||||
LEDr[15:0] <= 'b0;
|
||||
counter <= 'b0;
|
||||
ANreg[7:0] <= 8'b11111111;
|
||||
{CAr, CBr, CCr, CDr, CEr, CFr, CGr, DPr} <= 8'b11111111;
|
||||
end
|
||||
else begin
|
||||
LEDr[15:0] <= S[15:0];
|
||||
if (counter < pwm) counter = counter + 'b1;
|
||||
else begin
|
||||
counter = 'b0;
|
||||
ANreg[1] <= ANreg[0];
|
||||
ANreg[2] <= ANreg[1];
|
||||
//ANreg[3] <= ANreg[2];
|
||||
ANreg[4] <= ANreg[2];
|
||||
ANreg[5] <= ANreg[4];
|
||||
ANreg[6] <= ANreg[5];
|
||||
ANreg[7] <= ANreg[6];
|
||||
ANreg[0] <= !(ANreg[6:0] == 7'b1111111);
|
||||
end
|
||||
case (1'b0)
|
||||
ANreg[0]: begin
|
||||
semseg <= (S) % 5'h10;
|
||||
DPr <= 1'b1;
|
||||
end
|
||||
ANreg[1]: begin
|
||||
semseg <= (S / 'h10) % 5'h10;
|
||||
DPr <= 1'b1;
|
||||
end
|
||||
ANreg[2]: begin
|
||||
semseg <= (S / 'h100) % 5'h10;
|
||||
DPr <= 1'b1;
|
||||
end
|
||||
ANreg[3]: begin
|
||||
semseg <= (S / 'h1000) % 5'h10;
|
||||
DPr <= 1'b1;
|
||||
end
|
||||
ANreg[4]: begin
|
||||
semseg <= (B) % 5'h10;
|
||||
DPr <= 1'b1;
|
||||
end
|
||||
ANreg[5]: begin
|
||||
semseg <= (B / 'h10) % 5'h10;
|
||||
DPr <= 1'b1;
|
||||
end
|
||||
ANreg[6]: begin
|
||||
semseg <= (A) % 5'h10;
|
||||
DPr <= 1'b0;
|
||||
end
|
||||
ANreg[7]: begin
|
||||
semseg <= (A / 'h10) % 5'h10;
|
||||
DPr <= 1'b1;
|
||||
end
|
||||
|
||||
endcase
|
||||
case (semseg)
|
||||
4'h0: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000001;
|
||||
4'h1: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1001111;
|
||||
4'h2: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0010010;
|
||||
4'h3: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000110;
|
||||
4'h4: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1001100;
|
||||
4'h5: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0100100;
|
||||
4'h6: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0100000;
|
||||
4'h7: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0001111;
|
||||
4'h8: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000000;
|
||||
4'h9: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000100;
|
||||
4'hA: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0001000;
|
||||
4'hB: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1100000;
|
||||
4'hC: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0110001;
|
||||
4'hD: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1000010;
|
||||
4'hE: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0110000;
|
||||
4'hF: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0111000;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
endmodule
|
80
Labs/01. Adder/tb_fulladder.sv
Normal file
80
Labs/01. Adder/tb_fulladder.sv
Normal file
@@ -0,0 +1,80 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company: MIET
|
||||
// Engineer: Nikita Bulavin
|
||||
//
|
||||
// Create Date:
|
||||
// Design Name:
|
||||
// Module Name: tb_fulladder
|
||||
// Project Name: RISCV_practicum
|
||||
// Target Devices: Nexys A7-100T
|
||||
// Tool Versions:
|
||||
// Description: tb for 1-bit fulladder
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
module tb_fulladder();
|
||||
|
||||
parameter TIME_OPERATION = 100;
|
||||
parameter TEST_VALUES = 8;
|
||||
|
||||
wire tb_a_i;
|
||||
wire tb_b_i;
|
||||
wire tb_carry_i;
|
||||
wire tb_carry_o;
|
||||
wire tb_sum_o;
|
||||
|
||||
|
||||
fulladder DUT (
|
||||
.a_i(tb_a_i),
|
||||
.b_i(tb_b_i),
|
||||
.sum_o(tb_sum_o),
|
||||
.carry_i(tb_carry_i),
|
||||
.carry_o(tb_carry_o)
|
||||
);
|
||||
|
||||
integer i, err_count = 0;
|
||||
reg [4:0] running_line;
|
||||
|
||||
wire sum_dump;
|
||||
wire carry_o_dump;
|
||||
|
||||
assign tb_a_i = running_line[4];
|
||||
assign tb_b_i = running_line[3];
|
||||
assign tb_carry_i = running_line[2];
|
||||
assign sum_dump = running_line[1];
|
||||
assign carry_o_dump = running_line[0];
|
||||
|
||||
initial begin
|
||||
$display( "Start test: ");
|
||||
for ( i = 0; i < TEST_VALUES; i = i + 1 )
|
||||
begin
|
||||
running_line = line_dump[i*5+:5];
|
||||
#TIME_OPERATION;
|
||||
if( (tb_carry_o !== carry_o_dump) || (tb_sum_o !== sum_dump) ) begin
|
||||
$display("ERROR! carry_i = %b; (a)%b + (b)%b = ", tb_carry_i, tb_a_i, tb_b_i, "(carry_o)%b (sum_o)%b;", tb_carry_o, tb_sum_o, " carry_o_dump: %b, sum_dump: %b", carry_o_dump, sum_dump);
|
||||
err_count = err_count + 1'b1;
|
||||
end
|
||||
end
|
||||
$display("Number of errors: %d", err_count);
|
||||
if( !err_count ) $display("\nfulladder SUCCESS!!!\n");
|
||||
$finish();
|
||||
end
|
||||
|
||||
reg [5*8-1:0] line_dump = {
|
||||
5'b00000,
|
||||
5'b10010,
|
||||
5'b01010,
|
||||
5'b11001,
|
||||
5'b00110,
|
||||
5'b10101,
|
||||
5'b01101,
|
||||
5'b11111};
|
||||
|
||||
endmodule
|
3081
Labs/01. Adder/tb_fulladder32.sv
Normal file
3081
Labs/01. Adder/tb_fulladder32.sv
Normal file
File diff suppressed because it is too large
Load Diff
482
Labs/01. Adder/tb_fulladder4.sv
Normal file
482
Labs/01. Adder/tb_fulladder4.sv
Normal file
@@ -0,0 +1,482 @@
|
||||
`timescale 1ns / 1ps
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
// Company: MIET
|
||||
// Engineer: Nikita Bulavin
|
||||
//
|
||||
// Create Date:
|
||||
// Design Name:
|
||||
// Module Name: tb_fulladder4
|
||||
// Project Name: RISCV_practicum
|
||||
// Target Devices: Nexys A7-100T
|
||||
// Tool Versions:
|
||||
// Description: tb for 4-bit fulladder
|
||||
//
|
||||
// Dependencies:
|
||||
//
|
||||
// Revision:
|
||||
// Revision 0.01 - File Created
|
||||
// Additional Comments:
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
module tb_fulladder4();
|
||||
|
||||
parameter TIME_OPERATION = 100;
|
||||
parameter TEST_VALUES = 400;
|
||||
|
||||
wire [3:0] tb_a_i;
|
||||
wire [3:0] tb_b_i;
|
||||
wire tb_carry_i;
|
||||
wire tb_carry_o;
|
||||
wire [3:0] tb_sum_o;
|
||||
|
||||
fulladder4 DUT (
|
||||
.a_i(tb_a_i),
|
||||
.b_i(tb_b_i),
|
||||
.sum_o(tb_sum_o),
|
||||
.carry_i(tb_carry_i),
|
||||
.carry_o(tb_carry_o)
|
||||
);
|
||||
|
||||
integer i, err_count = 0;
|
||||
reg [13:0] running_line;
|
||||
|
||||
wire [3:0] sum_dump;
|
||||
wire carry_o_dump;
|
||||
|
||||
assign tb_a_i = running_line[13:10];
|
||||
assign tb_b_i = running_line[9:6];
|
||||
assign tb_carry_i = running_line[5];
|
||||
assign sum_dump = running_line[4:1];
|
||||
assign carry_o_dump = running_line[0];
|
||||
|
||||
`ifdef __debug__
|
||||
initial begin
|
||||
$display( "\nStart test: \n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop();
|
||||
for ( i = 0; i < TEST_VALUES; i = i + 1 )
|
||||
begin
|
||||
running_line = line_dump[i*14+:14];
|
||||
#TIME_OPERATION;
|
||||
if( (tb_carry_o !== carry_o_dump) || (tb_sum_o !== sum_dump) ) begin
|
||||
$display("ERROR! carry_i = %b; (a)%h + (b)%h = ", tb_carry_i, tb_a_i, tb_b_i, "(carry_o)%b (sum_o)%h;", tb_carry_o, tb_sum_o, " carry_o_dump: %b, sum_dump: %h", carry_o_dump, sum_dump);
|
||||
err_count = err_count + 1'b1;
|
||||
end
|
||||
end
|
||||
$display("Number of errors: %d", err_count);
|
||||
if( !err_count ) $display("\nfulladder4 SUCCESS!!!\n");
|
||||
$finish();
|
||||
end
|
||||
`else
|
||||
initial begin
|
||||
for ( i = TEST_VALUES-1; i >=0 ; i = i - 1 )
|
||||
begin
|
||||
running_line = line_dump[i*14+:14];
|
||||
#TIME_OPERATION;
|
||||
end
|
||||
$finish();
|
||||
end
|
||||
`endif
|
||||
|
||||
reg [14*400:0] line_dump = {
|
||||
14'h1787,
|
||||
14'h1787,
|
||||
14'h1f8b,
|
||||
14'h0318,
|
||||
14'h0c8a,
|
||||
14'h0b1c,
|
||||
14'h1110,
|
||||
14'h0d0e,
|
||||
14'h1914,
|
||||
14'h0402,
|
||||
14'h050a,
|
||||
14'h1914,
|
||||
14'h1008,
|
||||
14'h0402,
|
||||
14'h0108,
|
||||
14'h050a,
|
||||
14'h1218,
|
||||
14'h1d16,
|
||||
14'h090c,
|
||||
14'h090c,
|
||||
14'h1c0e,
|
||||
14'h0804,
|
||||
14'h0318,
|
||||
14'h1008,
|
||||
14'h1008,
|
||||
14'h1a1c,
|
||||
14'h1008,
|
||||
14'h0e16,
|
||||
14'h0210,
|
||||
14'h1a1c,
|
||||
14'h1a1c,
|
||||
14'h0e16,
|
||||
14'h0804,
|
||||
14'h0612,
|
||||
14'h0e16,
|
||||
14'h180c,
|
||||
14'h163c,
|
||||
14'h0826,
|
||||
14'h0c06,
|
||||
14'h182e,
|
||||
14'h102a,
|
||||
14'h0804,
|
||||
14'h1c0e,
|
||||
14'h1008,
|
||||
14'h0402,
|
||||
14'h0c28,
|
||||
14'h0022,
|
||||
14'h0000,
|
||||
14'h1c0e,
|
||||
14'h142c,
|
||||
14'h0846,
|
||||
14'h0000,
|
||||
14'h0064,
|
||||
14'h0022,
|
||||
14'h0064,
|
||||
14'h0804,
|
||||
14'h0022,
|
||||
14'h0804,
|
||||
14'h106c,
|
||||
14'h0868,
|
||||
14'h0826,
|
||||
14'h0804,
|
||||
14'h0804,
|
||||
14'h180c,
|
||||
14'h1008,
|
||||
14'h180c,
|
||||
14'h0000,
|
||||
14'h0804,
|
||||
14'h0000,
|
||||
14'h00a6,
|
||||
14'h1008,
|
||||
14'h00c6,
|
||||
14'h0022,
|
||||
14'h0042,
|
||||
14'h102a,
|
||||
14'h0064,
|
||||
14'h10ce,
|
||||
14'h0000,
|
||||
14'h104a,
|
||||
14'h0022,
|
||||
14'h00a6,
|
||||
14'h01ae,
|
||||
14'h1194,
|
||||
14'h014a,
|
||||
14'h00a6,
|
||||
14'h014a,
|
||||
14'h012a,
|
||||
14'h0000,
|
||||
14'h0064,
|
||||
14'h0064,
|
||||
14'h00c6,
|
||||
14'h012a,
|
||||
14'h0108,
|
||||
14'h00e8,
|
||||
14'h0042,
|
||||
14'h014a,
|
||||
14'h0318,
|
||||
14'h0000,
|
||||
14'h0022,
|
||||
14'h039c,
|
||||
14'h0294,
|
||||
14'h033a,
|
||||
14'h014a,
|
||||
14'h018c,
|
||||
14'h0294,
|
||||
14'h0210,
|
||||
14'h035a,
|
||||
14'h0000,
|
||||
14'h00c6,
|
||||
14'h012a,
|
||||
14'h073c,
|
||||
14'h00a6,
|
||||
14'h0042,
|
||||
14'h014a,
|
||||
14'h06fa,
|
||||
14'h079e,
|
||||
14'h0402,
|
||||
14'h014a,
|
||||
14'h06d8,
|
||||
14'h052c,
|
||||
14'h0210,
|
||||
14'h0084,
|
||||
14'h0444,
|
||||
14'h0084,
|
||||
14'h00a6,
|
||||
14'h0108,
|
||||
14'h04ea,
|
||||
14'h0846,
|
||||
14'h0210,
|
||||
14'h07e3,
|
||||
14'h05f2,
|
||||
14'h0846,
|
||||
14'h0ccc,
|
||||
14'h0b3e,
|
||||
14'h0e16,
|
||||
14'h0c6a,
|
||||
14'h052c,
|
||||
14'h0804,
|
||||
14'h0696,
|
||||
14'h0612,
|
||||
14'h1dfe,
|
||||
14'h077e,
|
||||
14'h018c,
|
||||
14'h13a7,
|
||||
14'h182e,
|
||||
14'h1fad,
|
||||
14'h1f49,
|
||||
14'h1aa3,
|
||||
14'h0b61,
|
||||
14'h184e,
|
||||
14'h00c6,
|
||||
14'h11b6,
|
||||
14'h14f2,
|
||||
14'h0a78,
|
||||
14'h0676,
|
||||
14'h1323,
|
||||
14'h1f29,
|
||||
14'h1dfe,
|
||||
14'h0ba3,
|
||||
14'h1936,
|
||||
14'h161a,
|
||||
14'h0e16,
|
||||
14'h0e58,
|
||||
14'h0888,
|
||||
14'h0db4,
|
||||
14'h0970,
|
||||
14'h058e,
|
||||
14'h0990,
|
||||
14'h19da,
|
||||
14'h146e,
|
||||
14'h04ea,
|
||||
14'h165c,
|
||||
14'h19da,
|
||||
14'h033a,
|
||||
14'h0210,
|
||||
14'h0990,
|
||||
14'h144c,
|
||||
14'h0c06,
|
||||
14'h0108,
|
||||
14'h090c,
|
||||
14'h039c,
|
||||
14'h0b1c,
|
||||
14'h0696,
|
||||
14'h014a,
|
||||
14'h1d58,
|
||||
14'h0c48,
|
||||
14'h0c48,
|
||||
14'h1c50,
|
||||
14'h02d6,
|
||||
14'h1110,
|
||||
14'h0108,
|
||||
14'h0e9a,
|
||||
14'h0804,
|
||||
14'h1914,
|
||||
14'h0084,
|
||||
14'h0318,
|
||||
14'h1c0e,
|
||||
14'h1914,
|
||||
14'h1110,
|
||||
14'h1914,
|
||||
14'h1e1e,
|
||||
14'h1008,
|
||||
14'h0084,
|
||||
14'h1a81,
|
||||
14'h050a,
|
||||
14'h0a14,
|
||||
14'h1c0e,
|
||||
14'h1b05,
|
||||
14'h1008,
|
||||
14'h0c06,
|
||||
14'h0210,
|
||||
14'h071a,
|
||||
14'h1e1e,
|
||||
14'h1e1e,
|
||||
14'h1e1e,
|
||||
14'h090c,
|
||||
14'h0108,
|
||||
14'h0210,
|
||||
14'h1c0e,
|
||||
14'h0a14,
|
||||
14'h0804,
|
||||
14'h180c,
|
||||
14'h1008,
|
||||
14'h0612,
|
||||
14'h180c,
|
||||
14'h161a,
|
||||
14'h0e16,
|
||||
14'h1008,
|
||||
14'h1e1e,
|
||||
14'h0210,
|
||||
14'h1a1c,
|
||||
14'h140a,
|
||||
14'h0634,
|
||||
14'h0c06,
|
||||
14'h0402,
|
||||
14'h0804,
|
||||
14'h0424,
|
||||
14'h0c06,
|
||||
14'h0424,
|
||||
14'h0424,
|
||||
14'h0826,
|
||||
14'h0c06,
|
||||
14'h102a,
|
||||
14'h0402,
|
||||
14'h180c,
|
||||
14'h0804,
|
||||
14'h0042,
|
||||
14'h106c,
|
||||
14'h0c48,
|
||||
14'h1870,
|
||||
14'h1008,
|
||||
14'h0868,
|
||||
14'h182e,
|
||||
14'h0042,
|
||||
14'h0042,
|
||||
14'h1870,
|
||||
14'h1008,
|
||||
14'h102a,
|
||||
14'h1008,
|
||||
14'h102a,
|
||||
14'h0022,
|
||||
14'h00a6,
|
||||
14'h1870,
|
||||
14'h0868,
|
||||
14'h10f0,
|
||||
14'h00c6,
|
||||
14'h104a,
|
||||
14'h00e8,
|
||||
14'h102a,
|
||||
14'h108c,
|
||||
14'h00a6,
|
||||
14'h0064,
|
||||
14'h0042,
|
||||
14'h0000,
|
||||
14'h0022,
|
||||
14'h10ae,
|
||||
14'h1194,
|
||||
14'h102a,
|
||||
14'h1132,
|
||||
14'h012a,
|
||||
14'h0022,
|
||||
14'h0042,
|
||||
14'h0000,
|
||||
14'h00a6,
|
||||
14'h00a6,
|
||||
14'h01ae,
|
||||
14'h0084,
|
||||
14'h012a,
|
||||
14'h0042,
|
||||
14'h0042,
|
||||
14'h0022,
|
||||
14'h014a,
|
||||
14'h0000,
|
||||
14'h00a6,
|
||||
14'h0000,
|
||||
14'h0274,
|
||||
14'h012a,
|
||||
14'h0274,
|
||||
14'h0022,
|
||||
14'h00e8,
|
||||
14'h014a,
|
||||
14'h0000,
|
||||
14'h0274,
|
||||
14'h0232,
|
||||
14'h00a6,
|
||||
14'h012a,
|
||||
14'h02f8,
|
||||
14'h0042,
|
||||
14'h079e,
|
||||
14'h071a,
|
||||
14'h06b8,
|
||||
14'h0232,
|
||||
14'h0612,
|
||||
14'h05b0,
|
||||
14'h014a,
|
||||
14'h0232,
|
||||
14'h0108,
|
||||
14'h0084,
|
||||
14'h01f0,
|
||||
14'h012a,
|
||||
14'h018c,
|
||||
14'h0990,
|
||||
14'h09b2,
|
||||
14'h0612,
|
||||
14'h0252,
|
||||
14'h056e,
|
||||
14'h0d72,
|
||||
14'h0000,
|
||||
14'h04c8,
|
||||
14'h0c06,
|
||||
14'h0c6a,
|
||||
14'h0edc,
|
||||
14'h09b2,
|
||||
14'h0042,
|
||||
14'h00a6,
|
||||
14'h0e58,
|
||||
14'h13c7,
|
||||
14'h094e,
|
||||
14'h165c,
|
||||
14'h182e,
|
||||
14'h0232,
|
||||
14'h0dd4,
|
||||
14'h0612,
|
||||
14'h18b2,
|
||||
14'h1f29,
|
||||
14'h1a61,
|
||||
14'h016c,
|
||||
14'h0afc,
|
||||
14'h140a,
|
||||
14'h05d0,
|
||||
14'h1110,
|
||||
14'h06b8,
|
||||
14'h05f2,
|
||||
14'h1e1e,
|
||||
14'h184e,
|
||||
14'h1301,
|
||||
14'h0e9a,
|
||||
14'h1787,
|
||||
14'h094e,
|
||||
14'h02d6,
|
||||
14'h08ca,
|
||||
14'h11b6,
|
||||
14'h06fa,
|
||||
14'h0f21,
|
||||
14'h0424,
|
||||
14'h16e3,
|
||||
14'h1aa3,
|
||||
14'h039c,
|
||||
14'h1194,
|
||||
14'h073c,
|
||||
14'h108c,
|
||||
14'h108c,
|
||||
14'h1b05,
|
||||
14'h108c,
|
||||
14'h1512,
|
||||
14'h184e,
|
||||
14'h0210,
|
||||
14'h0b5e,
|
||||
14'h0804,
|
||||
14'h180c,
|
||||
14'h090c,
|
||||
14'h1fcd,
|
||||
14'h148e,
|
||||
14'h0dd4,
|
||||
14'h129c,
|
||||
14'h079e,
|
||||
14'h0000,
|
||||
14'h0888,
|
||||
14'h108c,
|
||||
14'h1194,
|
||||
14'h1787,
|
||||
14'h0b1c,
|
||||
14'h0f83,
|
||||
14'h1f07,
|
||||
14'h0084,
|
||||
14'h0402,
|
||||
14'h0000,
|
||||
14'h1110,
|
||||
14'h108c,
|
||||
14'h1512};
|
||||
|
||||
endmodule
|
Reference in New Issue
Block a user