From e6b58feb4bc9fa8bfa7f0e4d6dc7eca99c5f1b11 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 12 Mar 2024 13:33:46 +0300 Subject: [PATCH 01/32] =?UTF-8?q?=D0=9B=D0=A03.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=81=D1=86=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=D1=80=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5=D0=B3?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D1=80=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В тестбенче был пропущен кейс на чтение из нулевого регистра до какой-либо записи в регистровый файл из-за чего не обнаруживалась ошибка, когда нулевой регистр принимал значение 0 только в случае записи любого значения по адресу ноль. Closes #21. --- Labs/03. Register file and memory/tb_rf_riscv.sv | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/Labs/03. Register file and memory/tb_rf_riscv.sv b/Labs/03. Register file and memory/tb_rf_riscv.sv index 9662494..b545493 100644 --- a/Labs/03. Register file and memory/tb_rf_riscv.sv +++ b/Labs/03. Register file and memory/tb_rf_riscv.sv @@ -74,6 +74,17 @@ module tb_rf_riscv(); $display("invalid memory size"); err_count = err_count + 1; end + RA1 <= 'b0; + RA2 <= 'b0; + @(posedge CLK); + if( RD1 !== 'b0 ) begin + $display("time = %0t. invalid data when reading at address 0: RD1 = %h", $time, RD1); + err_count = err_count + 1; + end + if( RD2 !== 'b0 ) begin + $display("time = %0t. invalid data when reading at address 0: RD2 = %h", $time, RD2); + err_count = err_count + 1; + end @(posedge CLK); WD <= 32'd1; WA <= '0; From 9c011077bb23b71ce3649dec34b37769a47ebfc8 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 12 Mar 2024 13:49:15 +0300 Subject: [PATCH 02/32] =?UTF-8?q?=D0=9B=D0=A03.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=83=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20=D1=80=D0=B5=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BF=D0=B0=D0=BC?= =?UTF-8?q?=D1=8F=D1=82=D0=B8=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлено примечание о количестве ячеек памяти данных. --- Labs/03. Register file and memory/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Labs/03. Register file and memory/README.md b/Labs/03. Register file and memory/README.md index 13f100e..f61591e 100644 --- a/Labs/03. Register file and memory/README.md +++ b/Labs/03. Register file and memory/README.md @@ -322,7 +322,7 @@ mоdulе rf_r𝚒sсv( 3. Реализуйте память данных. Для этого: 1. В `Design Sources` проекта создайте `SystemVerilog`-файл `data_mem.sv`. 2. Опишите в нем модуль памяти данных с таким же именем и портами, как указано в задании. - 1. Описание модуля будет схожим с описанием модуля памяти инструкций, однако порт чтения в этот раз будет **синхронным** (запись в него будет происходить в блоке `always_ff`). Кроме того, необходимо будет описать логику записи данных в память. + 1. Описание модуля будет схожим с описанием модуля памяти инструкций, однако порт чтения в этот раз будет **синхронным** (запись в него будет происходить в блоке `always_ff`). Количество ячеек в памяти данных — 4096. Кроме того, необходимо будет описать логику записи данных в память. 2. Запись в ячейки памяти описывается подобно записи данных в [регистры](../../Basic%20Verilog%20structures/Registers.md), только при этом, происходит доступ к конкретной ячейке памяти с помощью входа `addr_i` (как осуществляется доступ к ячейкам памяти сказано в разделе [описание памяти на языке SystemVerilog](#описание-памяти-на-языке-systemverilog)). 3. Доступ к ячейкам (на запись и чтение) осуществляется по адресу `addr_i[13:2]`. 4. Обратите внимание что работа с памятью должна осуществляться только когда сигнал `mem_req_i == 1`, в противном случае запись не должна производиться, а на шине `read_data_o` должен оставаться результат предыдущего чтения. From d844f396ae5f3980ee7440cafe0cd8b46b11a766 Mon Sep 17 00:00:00 2001 From: BROsandr <53278658+BROsandr@users.noreply.github.com> Date: Fri, 15 Mar 2024 11:42:33 +0300 Subject: [PATCH 03/32] =?UTF-8?q?=D0=9B=D0=A04.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?-=D0=B8=D0=B5=20=D0=BF=D0=B0=D1=82=D1=82=D0=B5=D1=80=D0=BD?= =?UTF-8?q?=D0=B0=20jump'=D0=B0=20(#71)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/04. Primitive programmable device/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Labs/04. Primitive programmable device/README.md b/Labs/04. Primitive programmable device/README.md index bd4cae8..8b33479 100644 --- a/Labs/04. Primitive programmable device/README.md +++ b/Labs/04. Primitive programmable device/README.md @@ -258,7 +258,7 @@ _Рисунок 5. Реализация безусловного переход 1. 10 вычислительных инструкций `0 0 01 alu_op RA1 RA2 xxxx xxxx WA` 2. Инструкция загрузки константы `0 0 00 const WA` 3. Инструкция загрузки из внешних устройств `0 0 10 xxx xxxx xxxx xxxx xxxx xxxx WA` -4. Безусловный переход `1 0 xx xxx xxxx xxxx xxxx const xxxxx` +4. Безусловный переход `1 x xx xxx xxxx xxxx xxxx const xxxxx` 5. 6 инструкций условного перехода `0 1 xx alu_op RA1 RA2 const x xxxx` При кодировании инструкций используются следующие поля: From ff6f2187913238749b5e1db1859822ba5cbdad17 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Sat, 16 Mar 2024 22:55:27 +0300 Subject: [PATCH 04/32] Update lab_03.data_mem.sv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ошибка в отбрасывании бит адреса --- Labs/Made-up modules/lab_03.data_mem.sv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Labs/Made-up modules/lab_03.data_mem.sv b/Labs/Made-up modules/lab_03.data_mem.sv index 45829d5..ba94f01 100644 --- a/Labs/Made-up modules/lab_03.data_mem.sv +++ b/Labs/Made-up modules/lab_03.data_mem.sv @@ -24,7 +24,7 @@ module data_mem ( logic [31:0] RAM [0:4095]; logic [31:0] addr; -assign addr = {2'b0, addr_i[31:2]}; +assign addr = {20'b0, addr_i[13:2]}; always_ff @(posedge clk_i) begin if(write_enable_i&mem_req_i) RAM[addr[13'o10+13'b101:'hBA & 'h45]][{5{1'b1}}:{3'd7,2'b00}] <= write_data_i['h1f:'h1c]; From b24c302dfac0944c46fca6fa2aef28986bbcb92c Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Mon, 18 Mar 2024 13:02:32 +0300 Subject: [PATCH 05/32] =?UTF-8?q?=D0=9F=D1=80=D0=B8=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=82=D0=B8=D0=BB=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D1=85=20=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BE=D0=BA=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20?= =?UTF-8?q?=D0=B2=D1=8B=D1=87=D0=B8=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/Intro.md | 10 +++++----- Introduction/How FPGA works.md | 8 ++++---- Introduction/Implementation steps.md | 2 +- Introduction/README.md | 2 +- Introduction/What is HDL.md | 2 +- Labs/01. Adder/README.md | 4 ++-- README.md | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/Intro.md b/.github/Intro.md index ba00401..a86f226 100644 --- a/.github/Intro.md +++ b/.github/Intro.md @@ -76,21 +76,21 @@ Вне зависимости от вашего уровня подготовки, работу с этим курсом рекомендуется начать с прочтения документов из части: "Введение". -Далее можно приступать к разделу "Лабораторные работы". Перед каждым лабораторным занятием вам **рекомендуется** ознакомиться с методичкой, они очень подробные и их чтение требует какого-то времени. Время отведенное на лабораторное занятие рекомендуется использовать по-максимуму, то есть заниматься практической деятельностью, консультироваться с преподавателем, отлаживать разработанные блоки устройства и тому подобное, а для этого лучше прочитать методичку заранее. +Далее можно приступать к разделу "Лабораторные работы". Перед каждым лабораторным занятием вам **рекомендуется** ознакомиться с методичкой, они очень подробные и их чтение требует какого-то времени. Время, отведенное на лабораторное, занятие рекомендуется использовать по-максимуму, то есть заниматься практической деятельностью, консультироваться с преподавателем, отлаживать разработанные блоки устройства и тому подобное, а для этого лучше прочитать методичку заранее. Кроме того, важно отметить, что в начале каждой методички размещен раздел "Допуск", где перечислены все материалы со ссылками на главы раздела "Базовые конструкции SystemVerilog", которые студент **должен освоить** перед выполнением этой лабораторной работы. Данный раздел ориентирован в первую очередь на студентов, не работавших ранее с Verilog/SystemVerilog, однако, даже если вы работали с этими языками, рекомендуется пролистать данные главы и проверить свои знания в разделе "Проверь себя". -Традиционно, данные лабораторные считаются сложными. Однако за годы отработки методичек со студентами, было написано множество вспомогательных материалов, уточнений, а так же акцентов на места, которые могут привести к ошибке. В данный момент, для успешного выполнения лабораторной работы от студента требуется только внимательно прочитать предоставленный ему материал и не бояться задать вопрос, если что-то непонятно. +Традиционно, данные лабораторные считаются сложными. Однако за годы отработки методичек со студентами, было написано множество вспомогательных материалов, уточнений, а также акцентов на места, которые могут привести к ошибке. В данный момент, для успешного выполнения лабораторной работы от студента требуется только внимательно прочитать предоставленный ему материал и не бояться задать вопрос, если что-то непонятно. Лабораторные занятия будут проходить с использованием САПР `Vivado` (и отладочными стендами `Nexys A7`). Это очень сложный профессиональный инструмент, на полноценное изучение которого могут уйти годы. Во время данного курса лабораторных работ нет времени на эти годы, поэтому для вас собрана основная информация по взаимодействию с САПР в разделе "Основы Vivado". Этой информации хватит, чтобы с помощью `Vivado` реализовать весь цикл лабораторных работ. -Если вы читаете данную книгу не в рамках курса АПС, вы вольны в выборе как программных средств, так и способов отладки. [Репозиторий](https://github.com/MPSU/APS), сопровождающий эту книгу будет содержать некоторые файлы, специализированные для плат Nexys A7 (так называемые _ограничения_/_констрейны_), однако при должном уровне навыков вы с легкостью сможете портировать его под свою плату. В этому случае, авторы будут признательны, если вы предоставите получившиеся файлы и название платы, чтобы их можно было добавить в отдельную папку по другим платам для будущих читателей. По всем вопросам/замечаниям/предложениям вы можете связаться с авторами курса через механику `Issues` и `Discussions` данного репозитория. +Если вы читаете данную книгу не в рамках курса АПС, вы вольны в выборе как программных средств, так и способов отладки. [Репозиторий](https://github.com/MPSU/APS), сопровождающий эту книгу будет содержать некоторые файлы, специализированные для плат Nexys A7 (так называемые _ограничения_/_констрейны_), однако при должном уровне навыков вы с легкостью сможете портировать его под свою плату. В этому случае, авторы будут признательны, если вы предоставите получившиеся файлы и название платы, чтобы их можно было добавить в отдельную папку по другим платам для будущих читателей. По всем вопросам/замечаниям/предложениям вы можете связаться с авторами курса через разделы `Issues` и `Discussions` данного репозитория. Эта книга может быть интересна и полезна читателю, не имеющему никакой отладочной платы: проверка работоспособности осуществляется в первую очередь на моделировании, т.е. программно (на самом деле, 90% времени вы будете проверять все именно посредством моделирования). -В ходе выполнения лабораторных работ вы наверняка столкнетесь как с ошибками связанными с работой Vivado, так и с ошибками описания на языке SystemVerilog. В первую очередь, рекомендуется ознакомиться с текстом ошибки. В случае ошибок, связанных с языком SystemVerilog, чаще всего там содержится вся необходимая информация по её устранению. В случае, если текст непонятен, рекомендуется ознакомиться со [списком типичных ошибок](Other/FAQ.md). +В ходе выполнения лабораторных работ вы наверняка столкнетесь как с ошибками, связанными с работой Vivado, так и с ошибками описания на языке SystemVerilog. В первую очередь, рекомендуется ознакомиться с текстом ошибки. В случае ошибок, связанных с языком SystemVerilog, чаще всего там содержится вся необходимая информация по её устранению. В случае, если текст непонятен, рекомендуется ознакомиться со [списком типичных ошибок](Other/FAQ.md). -Материал этой книги будет пестрить множеством ссылок, которые в электронной версии этой книги, разумеется, будут кликабельными. Однако, если вы имеете удовольствие читать эту книгу в "аналоговом" формате, для вашего удобства все ссылки будут представлены в виде сносок под соответствующей страницей в текстовом формате. Текстовый формат вместо QR-кодов выбран чтобы иметь возможность вбить ссылку вручную на компьютере (все ссылки будут представлены в формате Unicode, так что не беспокойтесь, что вам придется вводить что-то наподобие "https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80"). Кроме того, "умные" камеры современных смартфонов отлично справляются с распознаванием текстовых ссылок, поэтому авторы надеются что и с этой стороны отсутствие QR-кодов не произведет неудобств. +Материал этой книги будет пестрить множеством ссылок, которые в электронной версии этой книги, разумеется, будут кликабельными. Однако, если вы имеете удовольствие читать эту книгу в "аналоговом" формате, для вашего удобства все ссылки будут представлены в виде сносок под соответствующей страницей в текстовом формате. Текстовый формат вместо QR-кодов выбран чтобы иметь возможность вбить ссылку вручную на компьютере (все ссылки будут представлены в формате Unicode, так что не беспокойтесь, что вам придется вводить что-то наподобие "https://ru.wikipedia.org/wiki/%D0%A2%D1%80%D0%B8%D0%B3%D0%B3%D0%B5%D1%80"). Кроме того, "умные" камеры современных смартфонов отлично справляются с распознаванием текстовых ссылок, поэтому авторы надеются, что и с этой стороны отсутствие QR-кодов не произведет неудобств. Большая часть информации, касающаяся архитектуры RISC-V взята напрямую из спецификации. Поскольку работа над спецификацией все ещё идёт (хотя базовый набор инструкций rv32i уже заморожен и не изменится), чтобы ссылки на конкретные страницы спецификации имели смысл, они будут даваться на следующие версии двух документов: diff --git a/Introduction/How FPGA works.md b/Introduction/How FPGA works.md index 284a623..25186e0 100644 --- a/Introduction/How FPGA works.md +++ b/Introduction/How FPGA works.md @@ -17,7 +17,7 @@ ## История появления ПЛИС -До появления интегральных схем, электронные схемы собирались из отдельных элементов, как модель, собранная из кубиков Lego. В случае, если при сборке электронной схемы была допущена ошибка, вы могли исправить её ручной корректировкой соединения элементов подобно исправлению ошибки, допущенной при сборке модели Lego. +До появления интегральных схем электронные схемы собирались из отдельных элементов, как модель, собранная из кубиков Lego. В случае, если при сборке электронной схемы была допущена ошибка, вы могли исправить её ручной корректировкой соединения элементов подобно исправлению ошибки, допущенной при сборке модели Lego. С улучшением технологических процессов произошла миниатюризация базовых элементов, из которых состоят электронные схемы, что привело к появлению интегральных схем — электронных схем, выполненных на полупроводниковой подложке и заключенных в неразборный корпус. В большинстве случаев, исправить ошибку, допущенную при разработке и изготовлении интегральной схемы становится невозможным. С учетом того, что изготовление прототипа интегральной схемы является затратным мероприятием (от десятков тысяч до миллионов долларов в зависимости от тех процесса и площади изготавливаемого кристалла), возникла необходимость в способе проверки прототипа схемы до изготовления её прототипа. Так появились **программируемые логические интегральные схемы** (**ПЛИС**). ПЛИС содержит некое конечное множество базовых блоков (примитивов), программируемые блоки межсоединений примитивов и блоки ввода-вывода. Подав определенный набор воздействий на ПЛИС (**запрограммировав** её), можно настроить примитивы, их межсоединения между собой и блоками ввода-вывода, чтобы получить определенную цифровую схему. Удобство ПЛИС заключается в том, что в случае обнаружения ошибки на прототипе, исполненном в ПЛИС, вы можете исправить свою цифровую схему, и повторно запрограммировать ПЛИС. @@ -41,19 +41,19 @@ Существует множество логических вентилей, но чаще всего используется четыре из них: **И**, **ИЛИ**, **Исключающее ИЛИ**, **НЕ**. Каждый из этих элементов принимает на вход **цифровое значение** (см. [**цифровая схема**](#цифровые-схемы)), выполняет определенную **логическую функцию** над входами и подает на выход результат этой функции в виде **цифрового значения**. -Логический вентиль **И** принимает два входа и выдает на выход значение `1` только в том случае, если оба входа равны `1`. Если хотя бы один из входов `0`, то на выходе будет `0`. На схемах, логический вентиль **И** отображается следующим образом: +Логический вентиль **И** принимает два входа и выдает на выход значение `1` только в том случае, если оба входа равны `1`. Если хотя бы один из входов `0`, то на выходе будет `0`. На схемах логический вентиль **И** отображается следующим образом: ![../.pic/Introduction/How%20FPGA%20works/fig_01.drawio.svg](../.pic/Introduction/How%20FPGA%20works/fig_01.drawio.svg) _Рисунок 1. Обозначение логического вентиля **И**._ -Логический вентиль **ИЛИ** принимает два входа и выдает на выход значение `1` в случае, если хотя бы один из входов равен `1`. Если оба входа равны `0`, то на выходе будет `0`. На схемах, логический вентиль **ИЛИ** отображается следующим образом: +Логический вентиль **ИЛИ** принимает два входа и выдает на выход значение `1` в случае, если хотя бы один из входов равен `1`. Если оба входа равны `0`, то на выходе будет `0`. На схемах логический вентиль **ИЛИ** отображается следующим образом: ![../.pic/Introduction/How%20FPGA%20works/fig_02.drawio.svg](../.pic/Introduction/How%20FPGA%20works/fig_02.drawio.svg) _Рисунок 2. Обозначение логического вентиля **ИЛИ**._ -Логический вентиль **Исключающее ИЛИ** принимает два входа и выдает на выход значение `1` в случае, если значения входов не равны между собой (один из них равен `1`, а другой `0`). Если значения входов равны между собой (оба равны `0` или оба равны `1`), то на выходе будет `0`. На схемах, логический вентиль **Исключающее ИЛИ** отображается следующим образом: +Логический вентиль **Исключающее ИЛИ** принимает два входа и выдает на выход значение `1` в случае, если значения входов не равны между собой (один из них равен `1`, а другой `0`). Если значения входов равны между собой (оба равны `0` или оба равны `1`), то на выходе будет `0`. На схемах логический вентиль **Исключающее ИЛИ** отображается следующим образом: ![../.pic/Introduction/How%20FPGA%20works/fig_03.drawio.svg](../.pic/Introduction/How%20FPGA%20works/fig_03.drawio.svg) diff --git a/Introduction/Implementation steps.md b/Introduction/Implementation steps.md index 64dba2f..15f250d 100644 --- a/Introduction/Implementation steps.md +++ b/Introduction/Implementation steps.md @@ -200,7 +200,7 @@ set_property -dict { PACKAGE_PIN C12 IOSTANDARD LVCMOS33 } [get_ports { resetn ![cell_add../.pic/Introduction/Implementation%20steps/fig_04.png](../.pic/Introduction/Implementation%20steps/fig_04.png) -Теперь, мы можем посмотреть на "внутренности" нашей ПЛИС `xc7a100tcsg324-1` и то, как через её примитивы будет реализована наша схема. Для этого, необходимо отрыть имплементированное устройство: `Implementation -> Open implemented design`. Откроется следующее окно: +Теперь, мы можем посмотреть на "внутренности" нашей ПЛИС `xc7a100tcsg324-1` и то, как через её примитивы будет реализована наша схема. Для этого необходимо отрыть имплементированное устройство: `Implementation -> Open implemented design`. Откроется следующее окно: ![../.pic/Introduction/Implementation%20steps/fig_05.png](../.pic/Introduction/Implementation%20steps/fig_05.png) diff --git a/Introduction/README.md b/Introduction/README.md index 44f3409..06aecbc 100644 --- a/Introduction/README.md +++ b/Introduction/README.md @@ -10,6 +10,6 @@ И в довершение, вам предлагается прочитать документ "[Implementation Steps](./Implementation%20steps.md)". Этот документ дополнит ваше понимание о принципе работы ПЛИС и позволит посмотреть на некоторые её реальные элементы изнутри. -Обратите внимание, что во втором абзаце не было использовано слово "поймете". Часто это слово несет не тот смысл. Можно прочесть документ и **понять** каждое его слово, но не постигнуть смысла, который в этих слова лежал (**слышать**, но не **слушать**). В романе Роберта Хайнлайна "_Чужак в чужой стране_" вводится особое марсианское слово, непереводимое на земной язык: "**грокать**", которое имеет множество значений. В первом приближении можно подумать, что это слово переводится как "понять", однако это не так. Например, на Марсе очень мало воды и процесс её питья марсианами (по сюжету романа, разумеется) является целым ритуалом, и обозначается этим же словом "грокать". Грокать что-то — означает что это что-то стало частью твоего естества. В отношении информации это означает, это информация стала частью тебя, изменила то как ты думаешь. Грокать — это постичь что-то на самом глубинном уровне, это видеть девушку в красном сквозь завесу падающих зеленых символов. Даже этот абзац расписан для того, чтобы вы не просто поняли что эти документы важно понять — а грокнули то, что эти документы важно грокнуть. +Обратите внимание, что во втором абзаце не было использовано слово "поймете". Часто это слово несет не тот смысл. Можно прочесть документ и **понять** каждое его слово, но не постигнуть смысла, который в этих слова лежал (**слышать**, но не **слушать**). В романе Роберта Хайнлайна "_Чужак в чужой стране_" вводится особое марсианское слово, непереводимое на земной язык: "**грокать**", которое имеет множество значений. В первом приближении можно подумать, что это слово переводится как "понять", однако это не так. Например, на Марсе очень мало воды и процесс её питья марсианами (по сюжету романа, разумеется) является целым ритуалом, и обозначается этим же словом "грокать". Грокать что-то — означает что это что-то стало частью твоего естества. В отношении информации это означает, это информация стала частью тебя, изменила то, как ты думаешь. Грокать — это постичь что-то на самом глубинном уровне, это видеть девушку в красном сквозь завесу падающих зеленых символов. Даже этот абзац расписан для того, чтобы вы не просто поняли, что эти документы важно понять — а грокнули то, что эти документы важно грокнуть. На самом деле не важно, каким словом будет обозначен результат вашего прочтения. Важно то, что если после того как вы прочтете эти документы, на лабах вы будете употреблять словосочетания наподобие: "_объявляем переменную_", значит что-то пошло не так, и образ вашего мышления все еще заперт в парадигме "программирования". Это не то чтобы плохо, просто усложнит вам процесс изучения и выполнения лабораторных работ. diff --git a/Introduction/What is HDL.md b/Introduction/What is HDL.md index dd2fd1d..e0bb401 100644 --- a/Introduction/What is HDL.md +++ b/Introduction/What is HDL.md @@ -28,7 +28,7 @@ _Рисунок 3. Структурная схема intel 4004[[2]](https://en. _Рисунок 4. Структурная схема блока аппаратного шифрования по алгоритму AES[[3]](https://iis-people.ee.ethz.ch/~kgf/acacia/acacia_thesis.pdf)._ Заметьте, что даже этот блок не является атомарным. Каждая операция Исключающего ИЛИ, умножения, мультиплексирования сигнала и таблицы подстановки — это отдельные блоки, функционал которых еще надо реализовать. -В какой-то момент, инженеры поняли, что проще описать цифровую схему в текстовом представлении, нежели в графическом. +В какой-то момент инженеры поняли, что проще описать цифровую схему в текстовом представлении, нежели в графическом. Как можно описать цифровую схему текстом? Рассмотрим цифровую схему полусумматора: ![Схема полусумматора](../.pic/Labs/lab_01_adder/fig_01.drawio.svg) diff --git a/Labs/01. Adder/README.md b/Labs/01. Adder/README.md index e9e1987..37cfe25 100644 --- a/Labs/01. Adder/README.md +++ b/Labs/01. Adder/README.md @@ -160,7 +160,7 @@ _Рисунок 3. Цифровая схема модуля half_adder, сген Схема похожа на _рис. 1_, но как проверить, что эта схема не содержит ошибок и делает именно то, что от нее ожидается? -Для этого необходимо провести моделирование этой схемы. Во время моделирования на вход схемы подаются входные воздействия. Каждое изменение входных сигналов схемы приводит к каскадному изменению состояния внутренних цепей, которые в итоге меняют выходные сигналы. +Для этого необходимо провести моделирование этой схемы. Во время моделирования на вход схемы подаются входные воздействия. Каждое изменение входных сигналов схемы приводит к каскадному изменению состояний внутренних цепей, которые в итоге меняют выходные сигналы. Подаваемые на схему входные воздействия формируются верификационным окружением. Верификационное окружение (или тестбенч) — это особый несинтезируемый модуль, который не имеет входных или выходных сигналов. Ему не нужны входные сигналы, поскольку он сам является генератором всех своих внутренних сигналов, и ему не нужны выходные сигналы, поскольку этот модуль ничего не вычисляет, только подает входные воздействия на проверяемый модуль. Внутри тестбенча можно использовать конструкции из несинтезируемого подмножества языка SystemVerilog, в частности программный блок `initial`, в котором команды выполняются последовательно, что делает этот блок чем-то отдаленно похожим на проверяющую программу. Поскольку изменение внутренних цепей происходит с некоторой задержкой относительно изменений входных сигналов, при моделировании есть возможность делать паузы между командами. Это делается с помощью специального символа #, за которым указывается количество отсчётов времени симуляции, которое нужно пропустить перед следующей командой. @@ -211,7 +211,7 @@ _Рисунок 4. Временная диаграмма, моделирующа _Рисунок 5. Схема четырехбитного сумматора._ -Фиолетовой линией на схеме показаны провода, соединяющие выходной бит переноса сумматора предыдущего разряда, с входным битом переноса сумматора следующего разряда. +Фиолетовой линией на схеме показаны провода, соединяющие выходной бит переноса сумматора предыдущего разряда с входным битом переноса сумматора следующего разряда. Как же реализовать модуль, состоящий из цепочки других модулей? Половину этой задачи мы уже сделали, когда писали тестбенч к однобитному полусумматору в _Листинге 2_ — мы создавали модуль внутри другого модуля и подключали к нему провода. Теперь надо сделать то же самое, только с чуть большим числом модулей. diff --git a/README.md b/README.md index 544c6ca..202f1c9 100644 --- a/README.md +++ b/README.md @@ -101,11 +101,11 @@
Радиотехники -Использование радиоволн сегодня помогает в решении огромного круга задач связанных с передачей информации/энергии на расстояние, локацией, позиционированием, изучением свойств объектов отражения и многим другим на что только фантазии хватит. На практике радиоволны оказываются удивительно полезными, и для того чтобы управлять ими и извлекать из них максимум, используются антенны. Эти устройства могут быть довольно сложными, и за ними должны стоять профессионалы, способные их создать. Управляют антеннами, контролируют их и получают с них информацию специальные устройства, которые, в конечном итоге, преобразуют радиосигналы в электрические цифровые, или наоборот. +Использование радиоволн сегодня помогает в решении огромного круга задач, связанных с передачей информации/энергии на расстояние, локацией, позиционированием, изучением свойств объектов отражения и многим другим на что только фантазии хватит. На практике радиоволны оказываются удивительно полезными, и для того, чтобы управлять ими и извлекать из них максимум, используются антенны. Эти устройства могут быть довольно сложными, и за ними должны стоять профессионалы, способные их создать. Управляют антеннами, контролируют их и получают с них информацию специальные устройства, которые, в конечном итоге, преобразуют радиосигналы в электрические цифровые, или наоборот. Современные микросхемы СВЧ (сверхвысоких частот), которые используются в антенных устройствах, часто являются программируемыми. Это означает, что они либо содержат в себе процессор, либо спроектированы для взаимодействия с процессорами. Чтобы раскрыть потенциал этих микросхем, вам нужно знать, как работают процессоры. Понимание их функций также пригодится в области радиотехники, особенно если вам нужно управлять сигналами в строгие временные рамки. -Радиотехника — это не только работа с радиосигналами, но и их обработка. Иногда нужно обрабатывать сигналы очень быстро. В таких случаях важно знать, какой вычислитель выбрать, чтобы обеспечить точность обработки в установленные временные рамки и при этом не превысить требования по энергопотреблению. Без понимания АПС вы не сможете решать такие задачи. Ведь приходится выбирать из множества устройств, включая микроконтроллеры и процессоры цифровой обработки сигналов с различными характеристиками, ПЛИС. А как это сделать, если даже не понимаешь что это такое. +Радиотехника — это не только работа с радиосигналами, но и их обработка. Иногда нужно обрабатывать сигналы очень быстро. В таких случаях важно знать, какой вычислитель выбрать, чтобы обеспечить точность обработки в установленные временные рамки и при этом не превысить требования по энергопотреблению. Без понимания АПС вы не сможете решать такие задачи. Ведь приходится выбирать из множества устройств, включая микроконтроллеры и процессоры цифровой обработки сигналов с различными характеристиками, ПЛИС. А как это сделать, если даже не понимаешь, что это такое. По сути, радиотехник – это специалист, который может не только посчитать антенну, но и создать ее, а также разработать систему управления, сбора и обработки данных с использованием знаний АПС. From 6acdb34a0a1961c2e045ccc2ef8a3f259f10220c Mon Sep 17 00:00:00 2001 From: BROsandr <53278658+BROsandr@users.noreply.github.com> Date: Tue, 19 Mar 2024 11:51:25 +0300 Subject: [PATCH 06/32] =?UTF-8?q?=D0=9B=D0=A04.=20=D0=A0=D0=B5=D1=84=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=20=D0=B4=D0=B5=D0=BC=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D1=86=D0=B8=D0=BE=D0=BD=D0=BD=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Демонстрационный модуль теперь только один --------- Co-authored-by: Andrei Solodovnikov --- .pic/Labs/board files/nexys_cobra.jpg | Bin 337800 -> 0 bytes .../nexys_cobra_operations.drawio.svg | 4 + .../nexys_cobra_structure.drawio.svg | 4 + .../board files/README.md | 66 ++- .../board files/demo.mem | 95 ---- .../board files/nexys_a7_100t.xdc | 110 ++-- .../board files/nexys_cybercobra.sv | 506 +++++++++++++++--- .../board files/nexys_cybercobra_demo.sv | 85 --- 8 files changed, 553 insertions(+), 317 deletions(-) delete mode 100644 .pic/Labs/board files/nexys_cobra.jpg create mode 100644 .pic/Labs/board files/nexys_cobra_operations.drawio.svg create mode 100644 .pic/Labs/board files/nexys_cobra_structure.drawio.svg delete mode 100644 Labs/04. Primitive programmable device/board files/demo.mem delete mode 100644 Labs/04. Primitive programmable device/board files/nexys_cybercobra_demo.sv diff --git a/.pic/Labs/board files/nexys_cobra.jpg b/.pic/Labs/board files/nexys_cobra.jpg deleted file mode 100644 index e1e934ff5550837847dc99a38dda4fb281e466ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 337800 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%0A4#@AH5JzwZ+0Pu{IWr5 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�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⪻r)&%96D7oL8rRFB+bZ2Duc{X~!@kA{-`?=`&y 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

H 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

#Ngiugo2Cq2{pmF&0c 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℞-L?qt{eq&skdYz~?f|9j&f-L}Rnv3m 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 Date: Mon, 1 Apr 2024 04:48:09 +0300 Subject: [PATCH 19/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=A0=D0=B5=D1=84=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=20=D1=82=D0=B5=D1=81=D1=82=D0=B1=D0=B5?= =?UTF-8?q?=D0=BD=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/05. Main decoder/tb_decoder_riscv.sv | 1173 ++++++++++++++------- 1 file changed, 766 insertions(+), 407 deletions(-) diff --git a/Labs/05. Main decoder/tb_decoder_riscv.sv b/Labs/05. Main decoder/tb_decoder_riscv.sv index a8492bb..1fc5e62 100644 --- a/Labs/05. Main decoder/tb_decoder_riscv.sv +++ b/Labs/05. Main decoder/tb_decoder_riscv.sv @@ -2,460 +2,821 @@ * Project Name : Architectures of Processor Systems (APS) lab work * Organization : National Research University of Electronic Technology (MIET) * Department : Institute of Microdevices and Control Systems -* Author(s) : Nikita Bulavin -* Email(s) : nekkit6@edu.miet.ru +* Author(s) : Andrei Solodovnikov +* Email(s) : hepoh@org.miet.ru See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details. * ------------------------------------------------------------------------------ */ + module tb_decoder_riscv(); import riscv_pkg::*; - parameter delay = 4; - parameter cycle = 200; // per one opcode + typedef class riscv_instr; + riscv_instr instr = new(); - reg [31:0] instr; - wire [1:0] a_sel; - wire [2:0] b_sel; - wire [ALU_OP_WIDTH-1:0] alu_op; - wire [2:0] csr_op; - wire csr_we; - wire mem_req; - wire mem_we; - wire [2:0] mem_size; - wire gpr_we; - wire [1:0] wb_sel; - wire illegal_instr; - wire branch; - wire jal; - wire jalr; - wire mret; + logic clk, test_has_been_finished; + logic [31:0] fetched_instr_i = '0; - reg a_sel_miss; - reg b_sel_miss; - reg alu_op_miss; - reg csr_op_miss; - reg csr_we_miss; - reg mem_req_miss; - reg mem_we_miss; - reg mem_size_miss; - reg gpr_we_miss; - reg wb_sel_miss; - reg illegal_miss; - reg branch_miss; - reg jal_miss; - reg jalr_miss; - reg mret_miss; + int err_count; - string opcode_type; - string instr_type; + //list of all valid opcodes + logic [4:0] opcode_array[11] = { + LOAD_OPCODE, + MISC_MEM_OPCODE, + OP_IMM_OPCODE, + AUIPC_OPCODE, + STORE_OPCODE, + OP_OPCODE, + LUI_OPCODE, + BRANCH_OPCODE, + JALR_OPCODE, + JAL_OPCODE, + SYSTEM_OPCODE + }; - decoder_riscv dut ( - .fetched_instr_i (instr), - .a_sel_o (a_sel), - .b_sel_o (b_sel), - .alu_op_o (alu_op), - .csr_op_o (csr_op), - .csr_we_o (csr_we), - .mem_req_o (mem_req), - .mem_we_o (mem_we), - .mem_size_o (mem_size), - .gpr_we_o (gpr_we), - .wb_sel_o (wb_sel), - .illegal_instr_o (illegal_instr), - .branch_o (branch), - .jal_o (jal), - .jalr_o (jalr), - .mret_o (mret) + /* + Since randomize with overconstraining slows down simulation, it has been + decided to make a list of all codes instead of looping over every possible + combination func3 and func7. + */ + logic [14:0] valid_codes[44] = { + {LOAD_OPCODE , 3'h0, 7'h00}, + {LOAD_OPCODE , 3'h1, 7'h00}, + {LOAD_OPCODE , 3'h2, 7'h00}, + {LOAD_OPCODE , 3'h4, 7'h00}, + {LOAD_OPCODE , 3'h5, 7'h00}, + {MISC_MEM_OPCODE, 3'h0, 7'h00}, + {OP_IMM_OPCODE , 3'h0, 7'h00}, + {OP_IMM_OPCODE , 3'h1, 7'h00}, + {OP_IMM_OPCODE , 3'h2, 7'h00}, + {OP_IMM_OPCODE , 3'h3, 7'h00}, + {OP_IMM_OPCODE , 3'h4, 7'h00}, + {OP_IMM_OPCODE , 3'h5, 7'h00}, + {OP_IMM_OPCODE , 3'h5, 7'h20}, + {OP_IMM_OPCODE , 3'h6, 7'h00}, + {OP_IMM_OPCODE , 3'h7, 7'h00}, + {AUIPC_OPCODE , 3'h0, 7'h00}, + {STORE_OPCODE , 3'h0, 7'h00}, + {STORE_OPCODE , 3'h1, 7'h00}, + {STORE_OPCODE , 3'h2, 7'h00}, + {OP_OPCODE , 3'h0, 7'h00}, + {OP_OPCODE , 3'h0, 7'h20}, + {OP_OPCODE , 3'h1, 7'h00}, + {OP_OPCODE , 3'h2, 7'h00}, + {OP_OPCODE , 3'h3, 7'h00}, + {OP_OPCODE , 3'h4, 7'h00}, + {OP_OPCODE , 3'h5, 7'h00}, + {OP_OPCODE , 3'h5, 7'h20}, + {OP_OPCODE , 3'h6, 7'h00}, + {OP_OPCODE , 3'h7, 7'h00}, + {LUI_OPCODE , 3'h0, 7'h00}, + {BRANCH_OPCODE , 3'h0, 7'h00}, + {BRANCH_OPCODE , 3'h1, 7'h00}, + {BRANCH_OPCODE , 3'h4, 7'h00}, + {BRANCH_OPCODE , 3'h5, 7'h00}, + {BRANCH_OPCODE , 3'h6, 7'h00}, + {BRANCH_OPCODE , 3'h7, 7'h00}, + {JALR_OPCODE , 3'h0, 7'h00}, + {JAL_OPCODE , 3'h0, 7'h00}, + {SYSTEM_OPCODE , 3'h1, 7'h00}, + {SYSTEM_OPCODE , 3'h2, 7'h00}, + {SYSTEM_OPCODE , 3'h3, 7'h00}, + {SYSTEM_OPCODE , 3'h5, 7'h00}, + {SYSTEM_OPCODE , 3'h6, 7'h00}, + {SYSTEM_OPCODE , 3'h7, 7'h00} + }; + + logic [14:0] invalid_codes[38] = { + {LOAD_OPCODE , 3'h3, 7'h00}, + {LOAD_OPCODE , 3'h6, 7'h00}, + {LOAD_OPCODE , 3'h7, 7'h00}, + {MISC_MEM_OPCODE, 3'h1, 7'h00}, + {MISC_MEM_OPCODE, 3'h2, 7'h00}, + {MISC_MEM_OPCODE, 3'h3, 7'h00}, + {MISC_MEM_OPCODE, 3'h4, 7'h00}, + {MISC_MEM_OPCODE, 3'h5, 7'h00}, + {MISC_MEM_OPCODE, 3'h6, 7'h00}, + {MISC_MEM_OPCODE, 3'h7, 7'h00}, + {OP_IMM_OPCODE , 3'h0, 7'h20}, + {OP_IMM_OPCODE , 3'h1, 7'h20}, + {OP_IMM_OPCODE , 3'h2, 7'h20}, + {OP_IMM_OPCODE , 3'h3, 7'h20}, + {OP_IMM_OPCODE , 3'h4, 7'h20}, + {OP_IMM_OPCODE , 3'h6, 7'h20}, + {OP_IMM_OPCODE , 3'h7, 7'h20}, + {STORE_OPCODE , 3'h3, 7'h00}, + {STORE_OPCODE , 3'h4, 7'h00}, + {STORE_OPCODE , 3'h5, 7'h00}, + {STORE_OPCODE , 3'h6, 7'h00}, + {STORE_OPCODE , 3'h7, 7'h00}, + {OP_OPCODE , 3'h1, 7'h20}, + {OP_OPCODE , 3'h2, 7'h20}, + {OP_OPCODE , 3'h3, 7'h20}, + {OP_OPCODE , 3'h4, 7'h20}, + {OP_OPCODE , 3'h6, 7'h20}, + {OP_OPCODE , 3'h7, 7'h20}, + {BRANCH_OPCODE , 3'h2, 7'h00}, + {BRANCH_OPCODE , 3'h3, 7'h00}, + {JALR_OPCODE , 3'h1, 7'h00}, + {JALR_OPCODE , 3'h2, 7'h00}, + {JALR_OPCODE , 3'h3, 7'h00}, + {JALR_OPCODE , 3'h4, 7'h00}, + {JALR_OPCODE , 3'h5, 7'h00}, + {JALR_OPCODE , 3'h6, 7'h00}, + {JALR_OPCODE , 3'h7, 7'h00}, + {SYSTEM_OPCODE , 3'h4, 7'h00} + }; + + initial begin + $display("Test has been started"); + $display( "\n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop(); + + valid_instrs_direct_test(); + valid_instrs_random_test(); + illegal_instr_direct_test(); + illegal_instrs_random_test(); + + $display("\nTest has been finished\nNumber of errors: %d\n", err_count); + test_has_been_finished = 1'b1; + $finish(); + end + + function void randomize_with_given_opcode(input logic[4:0] given_opcode); + if(!instr.randomize() with {(opcode == given_opcode);}) begin + $fatal(1, "Can't ranomize instr with opcode == %0h", given_opcode); + end + endfunction + + task valid_instrs_direct_test(); + /* + Enumeration of all possible instructions by every opcode, func3 and func7. + Additionally, ecall, ebreak and mret instructions are generated manually. + */ + foreach(valid_codes[i]) begin + if(instr.randomize() with {(opcode == valid_codes[i][14:10]) && (func3 == valid_codes[i][9:7]) && (func7 == valid_codes[i][6:0]);}) begin + @(posedge clk); + fetched_instr_i <= instr.bits; + end + else begin + $fatal(1, "Can't randomize instruction with opcode == %02h, func3 == %0h, func7 == %0h", valid_codes[i][14:10], valid_codes[i][9:7], valid_codes[i][6:0]); + end + end + for(int i = 0; i < 3; i++) begin + @(posedge clk); + fetched_instr_i <= instr.system_instrs[i]; + end + endtask + + task valid_instrs_random_test(); + /* + A thousand random instructions for each opcode. + */ + foreach(opcode_array[i]) begin + repeat(1e3) begin + randomize_with_given_opcode(opcode_array[i]); + @(posedge clk); + fetched_instr_i <= instr.bits; + end + end + endtask + + task illegal_instr_direct_test(); + /* + That's where real things are happening. + This task is intent to check all the ways to get illegal_instr_o goes 1. + Test trying: + - incorrect low 2 bits on every opcode; + - incorrect opcode; + - incorrect func3 and func7 where it's possible; + - incorrect fence, ecall, ebreak, mret instructions + */ + incorrect_low_two_bits_test(); + incorrect_opcode_test(); + incorrect_func3_func7_test(); + incorrect_hardcode_instrs(); + endtask + + task incorrect_low_two_bits_test(); + /* + For every opcode we generate a valid instruction and corrupt 2 low bits. + So for every opcode we try 3 different instructions. + */ + foreach(opcode_array[i]) begin + for(logic[1:0] j = 2'b00; j < 2'b11; j++) begin + randomize_with_given_opcode(opcode_array[i]); + @(posedge clk); + fetched_instr_i <= {instr.bits[31:2], j}; + end + end + endtask + + task incorrect_opcode_test(); + /* + For every instruction type (every opcode for the simplicity sake) we try + an instruction with incorrect opcode. + */ + foreach(opcode_array[i]) begin + automatic logic [4:0] incorrect_opcode; + for(logic[1:0] j = 2'b00; j < 2'b11; j++) begin + randomize_with_given_opcode(opcode_array[i]); + @(posedge clk); + assert(std::randomize(incorrect_opcode) with {!(incorrect_opcode inside { + LOAD_OPCODE, + MISC_MEM_OPCODE, + OP_IMM_OPCODE, + AUIPC_OPCODE, + STORE_OPCODE, + OP_OPCODE, + LUI_OPCODE, + BRANCH_OPCODE, + JALR_OPCODE, + JAL_OPCODE, + SYSTEM_OPCODE + });}); + fetched_instr_i <= {instr.bits[31:7], incorrect_opcode, 2'b11}; + end + end + endtask + + task incorrect_func3_func7_test(); + /* + This test is opposite of valid_instrs_direct_test: we are looping through + every illegal {opcode, func3, func7} combination and applying it onto + generated instruction. + */ + foreach(invalid_codes[i]) begin + randomize_with_given_opcode(invalid_codes[i][14:10]); + @(posedge clk); + fetched_instr_i <= {invalid_codes[i][6:0], instr.bits[24:15], invalid_codes[i][9:7], instr.bits[11:7], invalid_codes[i][14:10], 2'b11}; + end + endtask + + task incorrect_hardcode_instrs(); + /* + In this test we try to broke fence, ecall, ebreak and mret instructions: + - for the fence instr we need to make func3 to be not equal zero; + - for ecall, ebreak and mret instructions we need to corrupt imm, rs1, rd + values. + */ + + // Broken fence instructions + for(logic [3:0] i = 3'd1; i <= 4'd7; i++) begin + randomize_with_given_opcode(MISC_MEM_OPCODE); + @(posedge clk); + fetched_instr_i <= {instr.bits[31:15], i, instr.bits[11:0]}; + end + + // Broken ecall, ebreak, mret instructions + for(logic [2:0] j = 3'd0; j <= 3'd3; j++) begin + @(posedge clk); + // broken imm field + fetched_instr_i <= {12'd2, instr.system_instrs[j][19:0]}; + @(posedge clk); + // broken rs1 field + fetched_instr_i <= {instr.system_instrs[j][31:20], 5'd1, instr.system_instrs[j][14:0]}; + @(posedge clk); + // broken rd field + fetched_instr_i <= {instr.system_instrs[j][31:12], 5'd1, instr.system_instrs[j][6:0]}; + end + endtask + + task illegal_instrs_random_test(); + /* + It's inefficiently to randomize all 32 bits of instructions since most + of them would be illegal by opcode or low 2 bits. + This test will construct instructions from valid parts but in random order + which will cause illegal instructions to be produced. + Additionally test will insert illegal parts with low chance. + */ + automatic logic [2:0] func3; + automatic logic [6:0] func7; + automatic logic [4:0] opcode; + automatic logic [4:0] rs1, rs2, rd; + automatic logic [1:0] low_bits; + automatic logic [9:0] mutation; + repeat(1e4) begin + assert(std::randomize(mutation)); + // we want to broke (invert constraint of) func3 if + // 9's bit is 1 while six lower bits are 0 + if(mutation[9] & !(|mutation[5:0])) begin + assert(std::randomize(func7 ) with {!(func7 inside {7'h0, 7'h20});}); + end + else begin + assert(std::randomize(func7 ) with { (func7 inside {7'h0, 7'h20});}); + end + if(mutation[8] & !(|mutation[5:0])) begin + assert(std::randomize(opcode ) with {!(opcode inside { + LOAD_OPCODE, + MISC_MEM_OPCODE, + OP_IMM_OPCODE, + AUIPC_OPCODE, + STORE_OPCODE, + OP_OPCODE, + LUI_OPCODE, + BRANCH_OPCODE, + JALR_OPCODE, + JAL_OPCODE, + SYSTEM_OPCODE + });}); + end + else begin + assert(std::randomize(opcode ) with { (opcode inside { + LOAD_OPCODE, + MISC_MEM_OPCODE, + OP_IMM_OPCODE, + AUIPC_OPCODE, + STORE_OPCODE, + OP_OPCODE, + LUI_OPCODE, + BRANCH_OPCODE, + JALR_OPCODE, + JAL_OPCODE, + SYSTEM_OPCODE + });}); + end + if(mutation[7] & !(|mutation[5:0])) begin + assert(std::randomize(low_bits ) with {!(low_bits == 2'b11);}); + end + else begin + assert(std::randomize(low_bits ) with { (low_bits == 2'b11);}); + end + assert(std::randomize(func3)); assert(std::randomize(rs1)); assert(std::randomize(rs2)); assert(std::randomize(rd)); + @(posedge clk); + fetched_instr_i <= {func7, rs2, rs1, func3, rd, opcode, low_bits}; + end + endtask + + bit test_paused_by_errs; + initial begin + clk = '0; + test_has_been_finished = '0; + err_count = '0; + test_paused_by_errs = '0; + end + + always #5 clk = ~clk; + always @(posedge clk) begin + if(test_has_been_finished) begin + $finish(); + end + end + + always @(posedge clk) begin + if((err_count >= 10) & !test_paused_by_errs) begin + test_paused_by_errs = '1; + $display("\nTest has been stopped after 10 errors"); + $stop(); + end + end + + logic [1:0] a_sel_o; + logic [2:0] b_sel_o; + logic [4:0] alu_op_o; + logic [2:0] csr_op_o; + logic csr_we_o; + logic mem_req_o; + logic mem_we_o; + logic [2:0] mem_size_o; + logic gpr_we_o; + logic [1:0] wb_sel_o; + logic illegal_instr_o; + logic branch_o; + logic jal_o; + logic jalr_o; + logic mret_o; + + logic [1:0] grm_a_sel_o; + logic [2:0] grm_b_sel_o; + logic [4:0] grm_alu_op_o; + logic [2:0] grm_csr_op_o; + logic grm_csr_we_o; + logic grm_mem_req_o; + logic grm_mem_we_o; + logic [2:0] grm_mem_size_o; + logic grm_gpr_we_o; + logic [1:0] grm_wb_sel_o; + logic grm_illegal_instr_o; + logic grm_branch_o; + logic grm_jal_o; + logic grm_jalr_o; + logic grm_mret_o; + + + decoder_riscv DUT(.*); + + decoder_riscv_ref GRM( + .fetched_instr_i (fetched_instr_i ), + .a_sel_o (grm_a_sel_o ), + .b_sel_o (grm_b_sel_o ), + .alu_op_o (grm_alu_op_o ), + .csr_op_o (grm_csr_op_o ), + .csr_we_o (grm_csr_we_o ), + .mem_req_o (grm_mem_req_o ), + .mem_we_o (grm_mem_we_o ), + .mem_size_o (grm_mem_size_o ), + .gpr_we_o (grm_gpr_we_o ), + .wb_sel_o (grm_wb_sel_o ), + .illegal_instr_o (grm_illegal_instr_o), + .branch_o (grm_branch_o ), + .jal_o (grm_jal_o ), + .jalr_o (grm_jalr_o ), + .mret_o (grm_mret_o ) ); - - decoder_riscv_ref grm(.fetched_instr_i (instr)); - wire [4:0] opcode; - assign opcode = instr[6:2]; + logic [4:0] opcode; + logic [2:0] func3; - always @(*) begin + logic a_sel_check ; + logic b_sel_check ; + logic alu_op_check ; + logic csr_op_check ; + logic csr_we_check ; + logic mem_req_check ; + logic mem_we_check ; + logic mem_size_check; + logic gpr_we_check ; + logic wb_sel_check ; + logic branch_check ; + logic jal_check ; + logic jalr_check ; + logic mret_check ; + + assign opcode = fetched_instr_i[6:2]; + assign func3 = fetched_instr_i[14:12]; + + assign a_sel_check = !(opcode inside {MISC_MEM_OPCODE, SYSTEM_OPCODE}); + assign b_sel_check = !(opcode inside {MISC_MEM_OPCODE, SYSTEM_OPCODE}); + assign alu_op_check = !(opcode inside {MISC_MEM_OPCODE, SYSTEM_OPCODE}); + assign csr_op_check = (opcode == SYSTEM_OPCODE) && (func3 != 3'd0); + assign csr_we_check = 1'b1; + assign mem_req_check = 1'b1; + assign mem_we_check = 1'b1; + assign mem_size_check = (opcode inside {LOAD_OPCODE, STORE_OPCODE}); + assign gpr_we_check = 1'b1; + assign wb_sel_check = !(opcode inside {MISC_MEM_OPCODE, BRANCH_OPCODE}) && (!(opcode == SYSTEM_OPCODE) | ((opcode == SYSTEM_OPCODE) & (func3 != 3'd0))); // (opcode == SYSTEM_OPCODE) -> (func3 != 3'd0) + assign branch_check = 1'b1; + assign jal_check = 1'b1; + assign jalr_check = 1'b1; + assign mret_check = 1'b1; + + string instr_str; + string raw_instr; + + illegal_instr_prop: assert property( + @(posedge clk) + (grm_illegal_instr_o === illegal_instr_o) + ) + else begin + $display("illegal_instr_o value is incorrect ( %b instead of %b), instruction: %s %s", illegal_instr_o, grm_illegal_instr_o , raw_instr, instr_str ); + err_count++; + end + + a_sel_prop : assert property ( + @(posedge clk) disable iff(grm_illegal_instr_o) + a_sel_check |-> (grm_a_sel_o === a_sel_o ) + ) + else begin + $display("a_sel_o value is incorrect ( %02b instead of %02b), instruction: %s %s", a_sel_o , grm_a_sel_o , raw_instr, instr_str ); + err_count++; + end + + b_sel_prop : assert property ( + @(posedge clk) disable iff(grm_illegal_instr_o) + b_sel_check |-> (grm_b_sel_o === b_sel_o ) + ) + else begin + $display("b_sel_o value is incorrect ( %03b instead of %03b), instruction: %s %s", b_sel_o , grm_b_sel_o , raw_instr, instr_str ); + err_count++; + end + + alu_op_prop : assert property ( + @(posedge clk) disable iff(grm_illegal_instr_o) + alu_op_check |-> (grm_alu_op_o === alu_op_o ) + ) + else begin + $display("alu_op_o value is incorrect (%05b instead of %05b), instruction: %s %s", alu_op_o , grm_alu_op_o, raw_instr, instr_str ); + err_count++; + end + + csr_op_prop : assert property ( + @(posedge clk) disable iff(grm_illegal_instr_o) + csr_op_check |-> (grm_csr_op_o === csr_op_o ) + ) + else begin + $display("csr_op_o value is incorrect ( %03b instead of %03b), instruction: %s %s", csr_op_o , grm_csr_op_o, raw_instr, instr_str ); + err_count++; + end + + csr_we_prop : assert property ( + @(posedge clk) + csr_we_check |-> (grm_csr_we_o === csr_we_o ) + ) + else begin + $display("csr_we_o value is incorrect ( %b instead of %b), instruction: %s %s", csr_we_o , grm_csr_we_o, raw_instr, instr_str ); + err_count++; + end + + mem_req_prop : assert property ( + @(posedge clk) + mem_req_check |-> (grm_mem_req_o === mem_req_o ) + ) + else begin + $display("mem_req_o value is incorrect ( %b instead of %b), instruction: %s %s", mem_req_o , grm_mem_req_o, raw_instr, instr_str ); + err_count++; + end + + mem_we_prop : assert property ( + @(posedge clk) + mem_we_check |-> (grm_mem_we_o === mem_we_o ) + ) + else begin + $display("mem_we_o value is incorrect ( %b instead of %b), instruction: %s %s", mem_we_o , grm_mem_we_o, raw_instr, instr_str ); + err_count++; + end + + mem_size_prop: assert property ( + @(posedge clk) disable iff(grm_illegal_instr_o) + mem_size_check |-> (grm_mem_size_o === mem_size_o) + ) + else begin + $display("mem_size_o value is incorrect ( %03b instead of %03b), instruction: %s %s", mem_size_o, grm_mem_size_o, raw_instr, instr_str); + err_count++; + end + + gpr_we_prop : assert property ( + @(posedge clk) + gpr_we_check |-> (grm_gpr_we_o === gpr_we_o ) + ) + else begin + $display("gpr_we_o value is incorrect ( %b instead of %b), instruction: %s %s", gpr_we_o , grm_gpr_we_o, raw_instr, instr_str ); + err_count++; + end + + wb_sel_prop : assert property ( + @(posedge clk) disable iff(grm_illegal_instr_o) + wb_sel_check |-> (grm_wb_sel_o === wb_sel_o ) + ) + else begin + $display("wb_sel_o value is incorrect ( %b instead of %b), instruction: %s %s", wb_sel_o , grm_wb_sel_o, raw_instr, instr_str ); + err_count++; + end + + branch_prop : assert property ( + @(posedge clk) + branch_check |-> (grm_branch_o === branch_o ) + ) + else begin + $display("branch_o value is incorrect ( %b instead of %b), instruction: %s %s", branch_o , grm_branch_o, raw_instr, instr_str ); + err_count++; + end + + jal_prop : assert property ( + @(posedge clk) + jal_check |-> (grm_jal_o === jal_o ) + ) + else begin + $display("jal_o value is incorrect ( %b instead of %b), instruction: %s %s", jal_o , grm_jal_o , raw_instr, instr_str ); + err_count++; + end + + jalr_prop : assert property ( + @(posedge clk) + jalr_check |-> (grm_jalr_o === jalr_o ) + ) + else begin + $display("jalr_o value is incorrect ( %b instead of %b), instruction: %s %s", jalr_o , grm_jalr_o , raw_instr, instr_str ); + err_count++; + end + + mret_prop : assert property ( + @(posedge clk) + mret_check |-> (grm_mret_o === mret_o ) + ) + else begin + $display("mret_o value is incorrect ( %b instead of %b), instruction: %s %s", mret_o , grm_mret_o , raw_instr, instr_str ); + err_count++; + end + + always_comb begin case (opcode) LUI_OPCODE, AUIPC_OPCODE, JAL_OPCODE: - instr_type = $sformatf("%020b %05b %07b ", instr[31:12], instr[11:7], instr[6:0]); + raw_instr = $sformatf("%020b %05b %07b " , fetched_instr_i[31:12], fetched_instr_i[11:7], fetched_instr_i[6:0]); JALR_OPCODE, LOAD_OPCODE, OP_IMM_OPCODE, SYSTEM_OPCODE: - instr_type = $sformatf("%012b %05b %03b %05b %07b ", instr[31:20], instr[19:15], instr[14:12], instr[11:7], instr[6:0]); + raw_instr = $sformatf("%012b %05b %03b %05b %07b " , fetched_instr_i[31:20], fetched_instr_i[19:15], fetched_instr_i[14:12], fetched_instr_i[11:7], fetched_instr_i[6:0]); BRANCH_OPCODE, STORE_OPCODE, OP_OPCODE: - instr_type = $sformatf("%07b %05b %05b %03b %05b %07b", instr[31:25], instr[24:20], instr[19:15], instr[14:12], instr[11:7], instr[6:0]); - MISC_MEM_OPCODE: - instr_type = $sformatf("%017b %03b %05b %07b ", instr[31:15], instr[14:12], instr[11:7], instr[6:0]); - default: - instr_type = $sformatf("%032b ", instr); + raw_instr = $sformatf("%07b %05b %05b %03b %05b %07b", fetched_instr_i[31:25], fetched_instr_i[24:20], fetched_instr_i[19:15], fetched_instr_i[14:12], fetched_instr_i[11:7], fetched_instr_i[6:0]); + MISC_MEM_OPCODE: + raw_instr = $sformatf("%017b %03b %05b %07b " , fetched_instr_i[31:15], fetched_instr_i[14:12], fetched_instr_i[11:7], fetched_instr_i[6:0]); + default: + raw_instr = $sformatf("%032b " , fetched_instr_i); endcase end - always @(*) begin - a_sel_miss = 'b0; - b_sel_miss = 'b0; - alu_op_miss = 'b0; - csr_op_miss = 'b0; - csr_we_miss = 'b0; - mem_req_miss = 'b0; - mem_we_miss = 'b0; - mem_size_miss = 'b0; - gpr_we_miss = 'b0; - wb_sel_miss = 'b0; - illegal_miss = 'b0; - branch_miss = 'b0; - jal_miss = 'b0; - jalr_miss = 'b0; - mret_miss = 'b0; - illegal_miss = grm.illegal_instr_o !== illegal_instr; - case (opcode) - LOAD_OPCODE, STORE_OPCODE: - begin - a_sel_miss = (grm.a_sel_o !== a_sel) & !illegal_instr; - b_sel_miss = (grm.b_sel_o !== b_sel) & !illegal_instr; - alu_op_miss = (grm.alu_op_o !== alu_op) & !illegal_instr; - csr_we_miss = (grm.csr_we_o !== csr_we); - mem_req_miss = grm.mem_req_o !== mem_req; - mem_we_miss = grm.mem_we_o !== mem_we; - mem_size_miss = (grm.mem_size_o !== mem_size) & !illegal_instr; - gpr_we_miss = grm.gpr_we_o !== gpr_we; - wb_sel_miss = (grm.wb_sel_o !== wb_sel) & !illegal_instr; - branch_miss = grm.branch_o !== branch; - jal_miss = grm.jal_o !== jal; - jalr_miss = grm.jalr_o !== jalr; - mret_miss = grm.mret_o !== mret; - end - - JAL_OPCODE, JALR_OPCODE, - AUIPC_OPCODE, - OP_IMM_OPCODE, OP_OPCODE: - begin - a_sel_miss = (grm.a_sel_o !== a_sel) & !illegal_instr; - b_sel_miss = (grm.b_sel_o !== b_sel) & !illegal_instr; - alu_op_miss = (grm.alu_op_o !== alu_op) & !illegal_instr; - csr_we_miss = (grm.csr_we_o !== csr_we); - mem_req_miss = grm.mem_req_o !== mem_req; - mem_we_miss = grm.mem_we_o !== mem_we; - //mem_size_miss = (grm.mem_size_o !== mem_size) & !illegal_instr; - gpr_we_miss = grm.gpr_we_o !== gpr_we; - wb_sel_miss = (grm.wb_sel_o !== wb_sel) & !illegal_instr; - branch_miss = grm.branch_o !== branch; - jal_miss = grm.jal_o !== jal; - jalr_miss = grm.jalr_o !== jalr; - mret_miss = grm.mret_o !== mret; - end - - BRANCH_OPCODE: - begin - a_sel_miss = (grm.a_sel_o !== a_sel) & !illegal_instr; - b_sel_miss = (grm.b_sel_o !== b_sel) & !illegal_instr; - alu_op_miss = (grm.alu_op_o !== alu_op) & !illegal_instr; - csr_we_miss = (grm.csr_we_o !== csr_we); - mem_req_miss = grm.mem_req_o !== mem_req; - mem_we_miss = grm.mem_we_o !== mem_we; - //mem_size_miss = (grm.mem_size_o !== mem_size) & !illegal_instr; - gpr_we_miss = grm.gpr_we_o !== gpr_we; - //wb_sel_miss = (grm.wb_sel_o !== wb_sel) & !illegal_instr; - branch_miss = grm.branch_o !== branch; - jal_miss = grm.jal_o !== jal; - jalr_miss = grm.jalr_o !== jalr; - mret_miss = grm.mret_o !== mret; - end - - LUI_OPCODE: begin - a_sel_miss = (grm.a_sel_o !== a_sel) & !illegal_instr; - b_sel_miss = (grm.b_sel_o !== b_sel) & !illegal_instr; - alu_op_miss = ((alu_op !== ALU_ADD)&(alu_op !== ALU_XOR)&(alu_op !== ALU_OR)) & !illegal_instr; - csr_we_miss = (grm.csr_we_o !== csr_we); - mem_req_miss = grm.mem_req_o !== mem_req; - mem_we_miss = grm.mem_we_o !== mem_we; - //mem_size_miss = (grm.mem_size_o !== mem_size) & !illegal_instr; - gpr_we_miss = grm.gpr_we_o !== gpr_we; - wb_sel_miss = (grm.wb_sel_o !== wb_sel) & !illegal_instr; - branch_miss = grm.branch_o !== branch; - jal_miss = grm.jal_o !== jal; - jalr_miss = grm.jalr_o !== jalr; - mret_miss = grm.mret_o !== mret; - end - - SYSTEM_OPCODE: begin - //a_sel_miss = (grm.a_sel_o !== a_sel) & !illegal_instr; - //b_sel_miss = (grm.b_sel_o !== b_sel) & !illegal_instr; - //alu_op_miss = ((alu_op !== ALU_ADD)&(alu_op !== ALU_XOR)&(alu_op !== ALU_OR)) & !illegal_instr; - csr_we_miss = (grm.csr_we_o !== csr_we); - mem_req_miss = grm.mem_req_o !== mem_req; - mem_we_miss = grm.mem_we_o !== mem_we; - //mem_size_miss = (grm.mem_size_o !== mem_size) & !illegal_instr; - gpr_we_miss = grm.gpr_we_o !== gpr_we; - wb_sel_miss = (grm.wb_sel_o !== wb_sel) & !illegal_instr & !mret; - branch_miss = grm.branch_o !== branch; - jal_miss = grm.jal_o !== jal; - jalr_miss = grm.jalr_o !== jalr; - mret_miss = grm.mret_o !== mret; - end - default: //MISC_MEM_OPCODE and other - begin - //a_sel_miss = grm.a_sel_o !== a_sel; - //b_sel_miss = grm.b_sel_o !== b_sel; - //alu_op_miss = grm.alu_op_o !== alu_op; - csr_we_miss = (grm.csr_we_o !== csr_we); - mem_req_miss = grm.mem_req_o !== mem_req; - mem_we_miss = grm.mem_we_o !== mem_we; - //mem_size_miss = grm.mem_size_o !== mem_size; - gpr_we_miss = grm.gpr_we_o !== gpr_we; - //wb_sel_miss = grm.wb_sel_o !== wb_sel; - branch_miss = grm.branch_o !== branch; - jal_miss = grm.jal_o !== jal; - jalr_miss = grm.jalr_o !== jalr; - mret_miss = grm.mret_o !== mret; - end - endcase - end - - integer X; - reg [$clog2(cycle+1)-1:0] V; - integer error; - - initial begin - $timeformat(-9, 2, " ns", 3); - error = 0; - end - - initial begin - $display( "\nStart test: \n\n==========================\nCLICK THE BUTTON 'Run All'\n==========================\n"); $stop(); - - for (V=0; V !(func3 inside {3'h3, 3'h6, 3'h7});} + + constraint misc_mem_opcode { (opcode == MISC_MEM_OPCODE) -> (func3 == 3'b000);} + + constraint op_imm_opcode1 {((opcode == OP_IMM_OPCODE ) && (func3 == 3'h1)) -> (func7 == 7'h00);} + constraint op_imm_opcode2 {((opcode == OP_IMM_OPCODE ) && (func3 == 3'h5)) -> (func7 inside {7'h00, 7'h20});} + + constraint store_opcode { (opcode == STORE_OPCODE ) -> (func3 inside {3'h0, 3'h1, 3'h2});} + + constraint op_opcode1 {((opcode == OP_OPCODE ) && (func3 inside {3'b000, 3'b101})) -> (func7 inside {7'h00, 7'h20});} + constraint op_opcode2 {((opcode == OP_OPCODE ) && !(func3 inside {3'b000, 3'b101})) -> (func7 == 7'h00);} + + constraint branch_opcode { (opcode == BRANCH_OPCODE ) -> !(func3 inside {3'h2, 3'h3});} + + constraint jalr_opcode { (opcode == JALR_OPCODE ) -> (func3 == 3'h0);} + + constraint system_opcode { (opcode == SYSTEM_OPCODE ) -> !(func3 == 3'h4);} + + function void post_randomize(); + case(opcode) + LOAD_OPCODE, MISC_MEM_OPCODE, JALR_OPCODE: begin + bits = {imm[11:0], rs1, func3, rd, opcode, 2'b11}; + end + OP_IMM_OPCODE: begin + if(func3 inside {3'h1, 3'h5}) begin + bits = {func7, shamt, rs1, func3, rd, opcode, 2'b11}; + end + else begin + bits = {imm[11:0], rs1, func3, rd, opcode, 2'b11}; + end + end + AUIPC_OPCODE, LUI_OPCODE: begin + bits = {imm, opcode, 2'b11}; + end + STORE_OPCODE: begin + bits = {imm[11:5], rs2, rs1, func3, imm[4:0], opcode, 2'b11}; + end + OP_OPCODE: begin + bits = {func7, rs2, rs1, func3, rd, opcode, 2'b11}; + end + BRANCH_OPCODE: begin + bits = {imm[12], imm[10:5], rs2, rs1, func3, imm[4:1], imm[11], opcode, 2'b11}; + end + JAL_OPCODE: begin + bits = {imm[20], imm[10:1], imm[11], imm[19:12], rd, opcode, 2'b11}; + end + SYSTEM_OPCODE: begin + if(func3 == 3'h0) begin + bits = system_instrs[$urandom_range(3)]; + end + else begin + bits = {imm[11:0], rs1, func3, rd, opcode, 2'b11}; + end + end + default: begin + $fatal(1, "Missing opcode %0h in post_randomize", opcode); + end + endcase + endfunction + + endclass + endmodule -////////////////////////////////////////////////////////////////////////////////// -// Company: MIET -// Engineer: Alexey Kozin -// -// Create Date: 10/08/2023 07:39:15 AM -// Design Name: -// Module Name: decoder_riscv -// Project Name: RISCV_practicum -// Target Devices: Nexys A7-100T -// Tool Versions: -// Description: main decoder for risc-v processor -// -// Dependencies: -// -// Revision: -// Revision 0.01 - File Created -// Additional Comments: -// -////////////////////////////////////////////////////////////////////////////////// +/* ----------------------------------------------------------------------------- +* Project Name : Architectures of Processor Systems (APS) lab work +* Organization : National Research University of Electronic Technology (MIET) +* Department : Institute of Microdevices and Control Systems +* Author(s) : Alexey Kozin +* Email(s) : @edu.miet.ru +See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details. +* ------------------------------------------------------------------------------ +*/ module gpr_we_table (gis_ew_rpg, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); output logic gis_ew_rpg; input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2; @@ -536,8 +897,6 @@ module csr_we_table (gis_ew_rsc, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_ endcase endmodule - - module mem_req_table (gis_qer_mem, edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2); output logic gis_qer_mem; input edocpo_6, edocpo_5, edocpo_4, edocpo_3, edocpo_2; From becb469dcb244ba268cc9d8c6c8ba6c5438eac75 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Mon, 1 Apr 2024 11:31:25 +0200 Subject: [PATCH 20/32] =?UTF-8?q?=D0=9B=D0=A03.=20=D0=9E=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B2=20=D1=8F=D0=B2=D0=BD=D0=BE=D0=BC=20=D0=B2=D0=B8=D0=B4?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В методичке был люфт по поводу способов реализации запроса на чтение: - только по сигналу mem_req_i (в этом случае запрос на чтение производился при любом значении сигнала mem_we_i); - при одновременном выполнении mem_req_i == 1 и mem_we_i == 0. --- Labs/03. Register file and memory/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Labs/03. Register file and memory/README.md b/Labs/03. Register file and memory/README.md index fa9886b..f46e522 100644 --- a/Labs/03. Register file and memory/README.md +++ b/Labs/03. Register file and memory/README.md @@ -267,6 +267,9 @@ mоdulе data_mеm( Если `mem_req_i == 1` и `write_enable_i == 1`, то происходит запрос на запись в память. В этом случае, необходимо записать значение `write_data_i` в ячейку по адресу `addr_i[13:2]`. Во всех других случаях (любой из сигналов `mem_req_i`, `write_enable_i` равен нулю), запись в память не производится. +Если `mem_req_i == 1` и `write_enable_i == 0`, то происходит запрос на чтение из памяти. В этом случае, необходимо записать в выходной регистр `read_data_o` значение из ячейки по адресу `addr_i[13:2]`. Во всех других случаях чтение из памяти не производится (`read_data_o` сохраняет предыдущее значение). + + ### 3. Регистровый файл У данного модуля будет восемь входных/выходных сигналов: From 161369f7fcad876b93798b0a1a4b580a1fe1d116 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Mon, 1 Apr 2024 16:14:33 +0300 Subject: [PATCH 21/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=94=D0=BE=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=BA=D0=B0=20=D1=82=D0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Правка выравниваний при выводе, причесывание циклов. --- Labs/05. Main decoder/tb_decoder_riscv.sv | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Labs/05. Main decoder/tb_decoder_riscv.sv b/Labs/05. Main decoder/tb_decoder_riscv.sv index 1fc5e62..83d32c4 100644 --- a/Labs/05. Main decoder/tb_decoder_riscv.sv +++ b/Labs/05. Main decoder/tb_decoder_riscv.sv @@ -203,7 +203,7 @@ module tb_decoder_riscv(); So for every opcode we try 3 different instructions. */ foreach(opcode_array[i]) begin - for(logic[1:0] j = 2'b00; j < 2'b11; j++) begin + for(int j = 0; j < 3; j++) begin randomize_with_given_opcode(opcode_array[i]); @(posedge clk); fetched_instr_i <= {instr.bits[31:2], j}; @@ -218,7 +218,7 @@ module tb_decoder_riscv(); */ foreach(opcode_array[i]) begin automatic logic [4:0] incorrect_opcode; - for(logic[1:0] j = 2'b00; j < 2'b11; j++) begin + for(int j = 0; j < 3; j++) begin randomize_with_given_opcode(opcode_array[i]); @(posedge clk); assert(std::randomize(incorrect_opcode) with {!(incorrect_opcode inside { @@ -261,14 +261,14 @@ module tb_decoder_riscv(); */ // Broken fence instructions - for(logic [3:0] i = 3'd1; i <= 4'd7; i++) begin + for(int i = 1; i < 8; i++) begin randomize_with_given_opcode(MISC_MEM_OPCODE); @(posedge clk); fetched_instr_i <= {instr.bits[31:15], i, instr.bits[11:0]}; end // Broken ecall, ebreak, mret instructions - for(logic [2:0] j = 3'd0; j <= 3'd3; j++) begin + for(int j = 0; j < 3; j++) begin @(posedge clk); // broken imm field fetched_instr_i <= {12'd2, instr.system_instrs[j][19:0]}; @@ -558,7 +558,7 @@ module tb_decoder_riscv(); wb_sel_check |-> (grm_wb_sel_o === wb_sel_o ) ) else begin - $display("wb_sel_o value is incorrect ( %b instead of %b), instruction: %s %s", wb_sel_o , grm_wb_sel_o, raw_instr, instr_str ); + $display("wb_sel_o value is incorrect ( %b instead of %b), instruction: %s %s", wb_sel_o , grm_wb_sel_o, raw_instr, instr_str ); err_count++; end From eacb7276304de876f0b4876a71dccf141fa0bacb Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 2 Apr 2024 07:37:02 +0300 Subject: [PATCH 22/32] =?UTF-8?q?=D0=9B=D0=A04.=20=D0=9F=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?example.mem=20->=20program.mem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При рефакторе киберкобры, было решено унифицировать примеры программ, однако забыли переименовать оставленный файл под вариант, инициализирующий память инструкций в третьей лабе. --- .../{example.mem => program.mem} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Labs/04. Primitive programmable device/{example.mem => program.mem} (100%) diff --git a/Labs/04. Primitive programmable device/example.mem b/Labs/04. Primitive programmable device/program.mem similarity index 100% rename from Labs/04. Primitive programmable device/example.mem rename to Labs/04. Primitive programmable device/program.mem From 6d0af977c777677b417f8fa40a08159b106753cf Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 2 Apr 2024 07:40:26 +0300 Subject: [PATCH 23/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=A1=D1=82=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/05. Main decoder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index 174c170..d9ec20e 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -79,7 +79,7 @@ _Таблица 3. Инструкции набора RV32I с приведени Обратите внимание на операции `slli`, `srli` и `srai` (операции сдвига на константную величину). У этих инструкций немного измененный формат кодирования **I\***. Формат кодирования **I** предоставляет 12-битную константу. Сдвиг 32-битного числа более, чем на 31 не имеет смысла. Для кодирования числа 31 требуется всего 5 бит. Выходит, что из 12 бит константы используется только 5 бит для операции сдвига, а оставшиеся 7 бит – не используются. А, главное (какое совпадение!), эти 7 бит находятся ровно в том же месте, где у других инструкций находится поле `func7`. Поэтому, чтобы у инструкций `slli`, `srli` и `srai` использующих формат **I** не пропадала эта часть поля, к ней относятся как к полю `func7`. -Также обратите внимание на инструкции `ecall`, `ebreak` и `mret`. Все эти инструкции I-типа имеют поле func3 равное нулю. С точки зрения декодирования инструкции I-типа, это одна и та же инструкция с разными полями. Однако конкретно в этом случае (SYSTEM_OPCODE и `func3 == 0`) эти инструкции должны рассматриваться как совокупность всех 32-бит сразу (см. _Таблицу 1_). +Также обратите внимание на инструкции `ecall`, `ebreak` и `mret`. Все эти инструкции I-типа имеют поле func3, равное нулю. С точки зрения декодирования инструкции I-типа, это одна и та же инструкция с разными полями. Однако конкретно в данном случае (SYSTEM_OPCODE и `func3 == 0`) эти инструкции должны рассматриваться как совокупность всех 32-бит сразу (см. _Таблицу 1_). ### Предлагаемая микроархитектура процессора RISC-V From b10f831825e70608b2818bd68b5764653d0218f8 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 2 Apr 2024 11:59:12 +0300 Subject: [PATCH 24/32] =?UTF-8?q?=D0=9B=D0=A06.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BB=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=B8=D0=BD=D0=B3=D0=B0=20=D1=81=20=D0=B4=D0=B2=D0=BE?= =?UTF-8?q?=D0=B8=D1=87=D0=BD=D1=8B=D0=BC=20=D0=BA=D0=BE=D0=B4=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Листинг не соответствовал коду на ассемблере и содержимому файла program.mem --- Labs/06. Datapath/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Labs/06. Datapath/README.md b/Labs/06. Datapath/README.md index a8bc6d4..c250beb 100644 --- a/Labs/06. Datapath/README.md +++ b/Labs/06. Datapath/README.md @@ -150,8 +150,8 @@ _Рисунок 2. Микроархитектура процессора._ 20: 0000000 11111 00101 001 00111 0010011 24: 0100000 00001 00111 101 01000 0010011 28: 0000000 11101 01000 101 01001 0010011 -2C: 11011110101011011100 01010 0110111 -30: 111010101111 01010 000 01010 0010011 +2C: 11111010110111101100 01010 0110111 +30: 101010111110 01010 000 01010 0010011 34: 0000000 01010 00100 010 00000 0100011 38: 0000000 01010 00100 001 00110 0100011 3C: 0000000 01010 00100 000 01011 0100011 @@ -159,7 +159,7 @@ _Рисунок 2. Микроархитектура процессора._ 44: 000000000000 00100 001 01100 0000011 48: 000000000000 00100 000 01101 0000011 4C: 000000000000 00100 101 01110 0000011 -50: 000000000000 00100 100 11101 0000011 +50: 000000000000 00100 100 01111 0000011 54: 00000000000000000100 10000 0010111 58: 0000000 00011 00100 001 01000 1100011 5C: 00000000 00000000 00000000 00000000 From 667fa9d01a67b7461a68c5adc564bc69ea880973 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 2 Apr 2024 12:02:09 +0300 Subject: [PATCH 25/32] =?UTF-8?q?=D0=9B=D0=A06.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20hex-=D0=B7=D0=BD=D0=B0?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2=20=D0=B4=D0=B2=D0=BE?= =?UTF-8?q?=D0=B8=D1=87=D0=BD=D1=8B=D0=B9=20=D0=BB=D0=B8=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D0=BD=D0=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/06. Datapath/README.md | 54 ++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/Labs/06. Datapath/README.md b/Labs/06. Datapath/README.md index c250beb..93b5c83 100644 --- a/Labs/06. Datapath/README.md +++ b/Labs/06. Datapath/README.md @@ -139,33 +139,33 @@ _Рисунок 2. Микроархитектура процессора._ Теперь в соответствии с кодировкой инструкций переведем программу в машинные коды: ```text -00: 011101011100 00000 000 00001 0010011 -04: 100010100111 00000 000 00010 0010011 -08: 0000000 00010 00001 000 00011 0110011 -0C: 0000000 00010 00001 111 00100 0110011 -10: 0100000 00011 00100 000 00101 0110011 -14: 0000001 00100 00011 000 00110 0110011 -18: 00000101000000000000 01111 1101111 -1C: 000000000000 00110 000 01111 1100111 -20: 0000000 11111 00101 001 00111 0010011 -24: 0100000 00001 00111 101 01000 0010011 -28: 0000000 11101 01000 101 01001 0010011 -2C: 11111010110111101100 01010 0110111 -30: 101010111110 01010 000 01010 0010011 -34: 0000000 01010 00100 010 00000 0100011 -38: 0000000 01010 00100 001 00110 0100011 -3C: 0000000 01010 00100 000 01011 0100011 -40: 000000000000 00100 010 01011 0000011 -44: 000000000000 00100 001 01100 0000011 -48: 000000000000 00100 000 01101 0000011 -4C: 000000000000 00100 101 01110 0000011 -50: 000000000000 00100 100 01111 0000011 -54: 00000000000000000100 10000 0010111 -58: 0000000 00011 00100 001 01000 1100011 -5C: 00000000 00000000 00000000 00000000 -60: 00000000010000000000 10001 1101111 -64: 000000000000 10001 000 01110 1100111 -68: 000000000100 01111 000 10010 1100111 +00: 011101011100 00000 000 00001 0010011 (0x75C00093) +04: 100010100111 00000 000 00010 0010011 (0x8A700113) +08: 0000000 00010 00001 000 00011 0110011 (0x002081B3) +0C: 0000000 00010 00001 111 00100 0110011 (0x0020F233) +10: 0100000 00011 00100 000 00101 0110011 (0x403202B3) +14: 0000001 00100 00011 000 00110 0110011 (0x02418333) +18: 00000101000000000000 01111 1101111 (0x050007EF) +1C: 000000000000 00110 000 01111 1100111 (0x000307E7) +20: 0000000 11111 00101 001 00111 0010011 (0x01F29393) +24: 0100000 00001 00111 101 01000 0010011 (0x4013D413) +28: 0000000 11101 01000 101 01001 0010011 (0x01D45493) +2C: 11111010110111101100 01010 0110111 (0xFADEC537) +30: 101010111110 01010 000 01010 0010011 (0xABE50513) +34: 0000000 01010 00100 010 00000 0100011 (0x00A22023) +38: 0000000 01010 00100 001 00110 0100011 (0x00A21323) +3C: 0000000 01010 00100 000 01011 0100011 (0x00A205A3) +40: 000000000000 00100 010 01011 0000011 (0x00022583) +44: 000000000000 00100 001 01100 0000011 (0x00021603) +48: 000000000000 00100 000 01101 0000011 (0x00020683) +4C: 000000000000 00100 101 01110 0000011 (0x00025703) +50: 000000000000 00100 100 01111 0000011 (0x00024783) +54: 00000000000000000100 10000 0010111 (0x00004817) +58: 0000000 00011 00100 001 01000 1100011 (0x00321463) +5C: 00000000 00000000 00000000 00000000 (0x00000000) +60: 00000000010000000000 10001 1101111 (0x004008EF) +64: 000000000000 10001 000 01110 1100111 (0x00088767) +68: 000000000100 01111 000 10010 1100111 (0x00478967) ``` Данная программа, представленная в шестнадцатеричном формате находится в файле [program.mem](program.mem). From 13fca65559e6d90cdd8d8d2e857aee6ef44a04f2 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 2 Apr 2024 16:00:20 +0300 Subject: [PATCH 26/32] =?UTF-8?q?=D0=9B=D0=A04.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B8=D1=82?= =?UTF-8?q?=D1=8B=D1=85=20=D1=81=D1=81=D1=8B=D0=BB=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit При переименовании файла в eacb727 не были исправлены ссылки на него. --- Labs/04. Primitive programmable device/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Labs/04. Primitive programmable device/README.md b/Labs/04. Primitive programmable device/README.md index 01632e9..8835c96 100644 --- a/Labs/04. Primitive programmable device/README.md +++ b/Labs/04. Primitive programmable device/README.md @@ -317,7 +317,7 @@ _Рисунок 5. Реализация безусловного переход Разработать процессор `CYBERcobra` (см. [_рис. 5_](../../.pic/Labs/lab_04_cybercobra/ppd_5.drawio.svg)), объединив ранее разработанные модули: -- Память инструкций (проинициализированную в двоичном формате файлом [`example.mem`](example.mem)) +- Память инструкций (проинициализированную в двоичном формате файлом [`program.mem`](program.mem)) - Регистровый файл - Арифметико-логическое устройство - 32-битный сумматор @@ -353,7 +353,7 @@ endmodule 5. Мультиплексор, выбирающий источник записи в регистровый файл. 3. После описания модуля, его необходимо проверить с помощью [`тестового окружения`](../../Basic%20Verilog%20structures/Testbench.md). 1. Тестовое окружение находится [`здесь`](tb_cybercobra.sv). - 2. Программа, которой необходимо проинициализировать память инструкций находится в файле [example.mem](example.mem). Алгоритм работы программы приведен в разделе [`Финальный обзор`](#финальный-обзор). + 2. Программа, которой необходимо проинициализировать память инструкций находится в файле [program.mem](program.mem). Алгоритм работы программы приведен в разделе [`Финальный обзор`](#финальный-обзор). 3. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 4. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня. 5. **Во время симуляции, вы должны прожать "Run All" и убедиться, что в логе есть сообщение о завершении теста!** From 602230eb00d4c97aafd4649e7f975613d489a2ef Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Thu, 4 Apr 2024 15:01:50 +0300 Subject: [PATCH 27/32] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B5=D0=B7=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=86=D0=B8=D0=B9=20=D0=BB=D0=B5=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lectures/Presentations | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lectures/Presentations b/Lectures/Presentations index 480b999..c66b592 160000 --- a/Lectures/Presentations +++ b/Lectures/Presentations @@ -1 +1 @@ -Subproject commit 480b999cf20b7f8dc2454ee0bc70d86acabc143c +Subproject commit c66b5928fa695cc0f44cfd811b5d770c65eeecaa From 825674d1f9c13db7ad5b61fa5e80a04ec1623738 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 9 Apr 2024 14:38:31 +0300 Subject: [PATCH 28/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=8F=D1=81?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=B5=20shamt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/05. Main decoder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index d9ec20e..cf73843 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -77,7 +77,7 @@ SYSTEM-инструкции используются для доступа к с _Таблица 3. Инструкции набора RV32I с приведением их типов, функционального описания и примеров использования._ -Обратите внимание на операции `slli`, `srli` и `srai` (операции сдвига на константную величину). У этих инструкций немного измененный формат кодирования **I\***. Формат кодирования **I** предоставляет 12-битную константу. Сдвиг 32-битного числа более, чем на 31 не имеет смысла. Для кодирования числа 31 требуется всего 5 бит. Выходит, что из 12 бит константы используется только 5 бит для операции сдвига, а оставшиеся 7 бит – не используются. А, главное (какое совпадение!), эти 7 бит находятся ровно в том же месте, где у других инструкций находится поле `func7`. Поэтому, чтобы у инструкций `slli`, `srli` и `srai` использующих формат **I** не пропадала эта часть поля, к ней относятся как к полю `func7`. +Обратите внимание на операции `slli`, `srli` и `srai` (операции сдвига на константную величину). У этих инструкций немного измененный формат кодирования **I\***. Формат кодирования **I** предоставляет 12-битную константу. Сдвиг 32-битного числа более, чем на 31 не имеет смысла. Для кодирования числа 31 требуется всего 5 бит. Выходит, что из 12 бит константы используется только 5 бит для операции сдвига (в виде поля `shamt`, сокращение от **sh**ift **am**oun**t** — "сколько раз сдвигать"), а оставшиеся 7 бит – не используются. А, главное (какое совпадение!), эти 7 бит находятся ровно в том же месте, где у других инструкций находится поле `func7`. Поэтому, чтобы у инструкций `slli`, `srli` и `srai` использующих формат **I** не пропадала эта часть поля, к ней относятся как к полю `func7`. Также обратите внимание на инструкции `ecall`, `ebreak` и `mret`. Все эти инструкции I-типа имеют поле func3, равное нулю. С точки зрения декодирования инструкции I-типа, это одна и та же инструкция с разными полями. Однако конкретно в данном случае (SYSTEM_OPCODE и `func3 == 0`) эти инструкции должны рассматриваться как совокупность всех 32-бит сразу (см. _Таблицу 1_). From f98899de00d78081ac927dd17bc733e914b7f6e5 Mon Sep 17 00:00:00 2001 From: alexkharl Date: Tue, 9 Apr 2024 15:17:28 +0300 Subject: [PATCH 29/32] =?UTF-8?q?Feat(lab13/obf/uart=5Ftx):=D0=94=D0=BE?= =?UTF-8?q?=D0=B1-=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=84=20uart=5Ftx=5Fsb=5Fctr?= =?UTF-8?q?l?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Made-up modules/lab_13.uart_tx_sb_ctrl.sv | 715 +++++++++++++++++- 1 file changed, 714 insertions(+), 1 deletion(-) diff --git a/Labs/Made-up modules/lab_13.uart_tx_sb_ctrl.sv b/Labs/Made-up modules/lab_13.uart_tx_sb_ctrl.sv index 9bd0d0f..83e2d51 100644 --- a/Labs/Made-up modules/lab_13.uart_tx_sb_ctrl.sv +++ b/Labs/Made-up modules/lab_13.uart_tx_sb_ctrl.sv @@ -1,4 +1,717 @@ -module uart_tx_sb_ctrl(); +module uart_tx_sb_ctrl( +/* + Часть интерфейса модуля, отвечающая за подключение к системной шине +*/ + input logic clk_i, + input logic rst_i, + input logic [31:0] addr_i, + input logic req_i, + input logic [31:0] write_data_i, + input logic write_enable_i, + output logic [31:0] read_data_o, +/* + Часть интерфейса модуля, отвечающая за подключение передающему, + входные данные по UART +*/ + output logic tx_o +); + logic busy; + logic [16:0] baudrate; + logic fcS5S0IailtPh; + logic parity_en; + logic stopbit; + logic [7:0] data; + logic valid; + logic wKSnwVGWV, eY8BfVPWv; + + logic qICjuvAOmWmr; + assign qICjuvAOmWmr = write_enable_i; + logic [31:0] UmLX; + assign UmLX = addr_i; + logic [31:0] FFDK4sD9m7; + assign FFDK4sD9m7 = write_data_i; + logic zZF; + assign zZF = rst_i; + logic [31:0] X5ldx3X4a; + assign read_data_o = X5ldx3X4a; + logic q0MK89N8qKhS8mdymRsz; + + logic VICULOkZm; + + logic r0UH06pov5; + uart_tx Ou( + .clk_i (clk_i), + .rst_i (zZF), + .tx_o (tx_o), + .busy_o (eY8BfVPWv), + .baudrate_i (baudrate), + .parity_en_i(parity_en), + .stopbit_i (stopbit), + .tx_data_i (data), + .tx_valid_i (valid) + ); + logic pEo; + + logic [31:0] vJlF3gash; + always_comb begin + case ({valid, wKSnwVGWV, valid, VICULOkZm, XJhsywc8r, eY8BfVPWv, q0MK89N8qKhS8mdymRsz}) + 7'b1100011: vJlF3gash = 32'd10945 ^ 32'o25300; + 7'h77: vJlF3gash = 32'd17511 ^ 32'h4466; + 7'ha: vJlF3gash = 32'o45111 ^ 32'h4a48; + 7'b1001100: vJlF3gash = 32'b00000000000000000001001100100110 ^ 32'o11447; + 7'h75: vJlF3gash = 32'b00000000000000000111000001101111 ^ 32'o44127 ^ 32'o34071; + 7'b1111111: vJlF3gash = 32'o64103 ^ 32'o64103; + 7'o21: vJlF3gash = 32'b00000000000000000001101000101100 ^ 32'd6701; + 7'h29: vJlF3gash = 32'd1472 ^ 32'b00000000000000000000010111000000; + 7'h69: vJlF3gash = 32'o75244 ^ 32'h7aa5; + 7'o40: vJlF3gash = 32'o33750 ^ 32'b00000000000000000011011111101000; + 7'o106: vJlF3gash = 32'o66477 ^ 32'o66476; + 7'o146: vJlF3gash = 32'd21171 ^ 32'h1a7c ^ 32'o44316; + 7'h4a: vJlF3gash = 32'b00000000000000000011111100101101 ^ 32'b00000000000000000011111100101100; + 7'd78: vJlF3gash = 32'd4379 ^ 32'd4378; + 7'o7: vJlF3gash = 32'd8791 ^ 32'd13824 ^ 32'b00000000000000000001010001010110; + 7'd57: vJlF3gash = 32'h4d78 ^ 32'd7290 ^ 32'd20739; + 7'd53: vJlF3gash = 32'h7b8a ^ 32'b00000000000000000011111110010010 ^ 32'o42031; + 7'o140: vJlF3gash = 32'd11468 ^ 32'd11469; + 7'o24: vJlF3gash = 32'h421e ^ 32'h1283 ^ 32'o50234; + 7'o33: vJlF3gash = 32'b00000000000000000011101111111101 ^ 32'h68c ^ 32'b00000000000000000011110101110000; + 7'd52: vJlF3gash = 32'o50616 ^ 32'o50617; + 7'h33: vJlF3gash = 32'o23622 ^ 32'o23623; + 7'o104: vJlF3gash = 32'o67512 ^ 32'd28491; + 7'd48: vJlF3gash = 32'h7fa0 ^ 32'b00000000000000000001110011100001 ^ 32'o61500; + 7'd65: vJlF3gash = 32'h7155 ^ 32'b00000000000000000111000101010100; + 7'h70: vJlF3gash = 32'b00000000000000000111010010000100 ^ 32'b00000000000000000010010110100110 ^ 32'o50443; + 7'd2: vJlF3gash = 32'd9837 ^ 32'h134f ^ 32'o32443; + 7'd24: vJlF3gash = 32'o12014 ^ 32'o67553 ^ 32'd31590; + 7'b0001100: vJlF3gash = 32'o17102 ^ 32'd7746; + 7'b0010110: vJlF3gash = 32'b00000000000000000100000000010011 ^ 32'h63db ^ 32'b00000000000000000010001111001001; + 7'd0: vJlF3gash = 32'h5274 ^ 32'd1982 ^ 32'h55ca; + 7'd49: vJlF3gash = 32'd10652 ^ 32'o61251 ^ 32'h4b34; + 7'o121: vJlF3gash = 32'd3856 ^ 32'o7421; + 7'b0010010: vJlF3gash = 32'o67045 ^ 32'd1778 ^ 32'h68d6; + 7'd69: vJlF3gash = 32'o41503 ^ 32'b00000000000000000100001101000010; + 7'd91: vJlF3gash = 32'b00000000000000000011000011100010 ^ 32'h30e3; + 7'h6: vJlF3gash = 32'h785b ^ 32'h785a; + 7'b1001000: vJlF3gash = 32'b00000000000000000100000100111000 ^ 32'h4139; + 7'b1011101: vJlF3gash = 32'b00000000000000000000010011011010 ^ 32'h1ae2 ^ 32'd7737; + 7'b0001001: vJlF3gash = 32'o20114 ^ 32'd1880 ^ 32'b00000000000000000010011100010100; + 7'd77: vJlF3gash = 32'd15650 ^ 32'h3d23; + 7'h37: vJlF3gash = 32'b00000000000000000100111110000011 ^ 32'b00000000000000000100111110000010; + 7'o52: vJlF3gash = 32'o54671 ^ 32'h3467 ^ 32'b00000000000000000110110111011111; + 7'o44: vJlF3gash = 32'b00000000000000000000100111010110 ^ 32'b00000000000000000000100111010110; + 7'o145: vJlF3gash = 32'h28b6 ^ 32'd10423; + 7'h49: vJlF3gash = 32'd27444 ^ 32'h4a56 ^ 32'd8547; + 7'o154: vJlF3gash = 32'o21226 ^ 32'o44275 ^ 32'd27178; + 7'b0000011: vJlF3gash = 32'b00000000000000000101000001101001 ^ 32'b00000000000000000101100100010111 ^ 32'h97f; + 7'd5: vJlF3gash = 32'd20062 ^ 32'h4e5e; + 7'd106: vJlF3gash = 32'd9377 ^ 32'o73545 ^ 32'd21445; + 7'b0001000: vJlF3gash = 32'h4c54 ^ 32'b00000000000000000100110001010100; + 7'd38: vJlF3gash = 32'd1995 ^ 32'h7ca; + 7'h28: vJlF3gash = 32'd23492 ^ 32'o61417 ^ 32'b00000000000000000011100011001011; + 7'b1010100: vJlF3gash = 32'b00000000000000000011011100000010 ^ 32'h1b48 ^ 32'o26113; + 7'd103: vJlF3gash = 32'o23254 ^ 32'b00000000000000000010011000001100 ^ 32'd161; + 7'b0110010: vJlF3gash = 32'o51631 ^ 32'd21400; + 7'b0101011: vJlF3gash = 32'h3b6 ^ 32'h3b7; + 7'd26: vJlF3gash = 32'b00000000000000000001001000000001 ^ 32'o40304 ^ 32'd21188; + 7'h1f: vJlF3gash = 32'b00000000000000000000110111101011 ^ 32'h6375 ^ 32'h6e9f; + 7'h3e: vJlF3gash = 32'h4963 ^ 32'b00000000000000000011111100101011 ^ 32'd30281; + 7'd98: vJlF3gash = 32'b00000000000000000000000011000101 ^ 32'd15763 ^ 32'd15703; + 7'o132: vJlF3gash = 32'o56351 ^ 32'o56350; + 7'h21: vJlF3gash = 32'o60744 ^ 32'b00000000000000000110111100000101 ^ 32'o7341; + 7'h1: vJlF3gash = 32'd31856 ^ 32'h7c70; + 7'h50: vJlF3gash = 32'o62424 ^ 32'd15967 ^ 32'd23370; + 7'o56: vJlF3gash = 32'h1ab ^ 32'b00000000000000000000000110101010; + 7'd56: vJlF3gash = 32'b00000000000000000010001101111100 ^ 32'o21575; + 7'o107: vJlF3gash = 32'o13473 ^ 32'd16069 ^ 32'o24777; + 7'h1e: vJlF3gash = 32'o61757 ^ 32'd25582; + 7'd58: vJlF3gash = 32'h7775 ^ 32'o61103 ^ 32'b00000000000000000001010100110111; + 7'h19: vJlF3gash = 32'h6805 ^ 32'd26628; + 7'o176: vJlF3gash = 32'b00000000000000000011111001000111 ^ 32'b00000000000000000100011111110001 ^ 32'd31159; + 7'b0101111: vJlF3gash = 32'h55a4 ^ 32'o52644; + 7'h43: vJlF3gash = 32'h454d ^ 32'b00000000000000000110000111011101 ^ 32'h2491; + 7'd121: vJlF3gash = 32'b00000000000000000100001001011101 ^ 32'b00000000000000000010010101000000 ^ 32'd26396; + 7'd23: vJlF3gash = 32'd27151 ^ 32'o65016; + 7'hf: vJlF3gash = 32'b00000000000000000100011000110011 ^ 32'h4632; + 7'b1110100: vJlF3gash = 32'd7286 ^ 32'd7287; + 7'h58: vJlF3gash = 32'b00000000000000000000100011110000 ^ 32'o74061 ^ 32'd28864; + 7'h7b: vJlF3gash = 32'h1655 ^ 32'o13124; + 7'o55: vJlF3gash = 32'h57ae ^ 32'd22446; + 7'o127: vJlF3gash = 32'o57363 ^ 32'd24306; + 7'o13: vJlF3gash = 32'h7445 ^ 32'h12e9 ^ 32'd26285; + 7'd60: vJlF3gash = 32'd30058 ^ 32'b00000000000000000111010101101011; + 7'd104: vJlF3gash = 32'o50250 ^ 32'h6bd4 ^ 32'o35575; + 7'h73: vJlF3gash = 32'h7279 ^ 32'b00000000000000000111011011111111 ^ 32'o2207; + 7'd107: vJlF3gash = 32'd20125 ^ 32'h3d2d ^ 32'o71661; + 7'b1001111: vJlF3gash = 32'd15127 ^ 32'b00000000000000000011101100010110; + 7'h1d: vJlF3gash = 32'hff6 ^ 32'o11034 ^ 32'd7659; + 7'b1010011: vJlF3gash = 32'hd05 ^ 32'b00000000000000000000110100000100; + 7'o122: vJlF3gash = 32'd25353 ^ 32'd4024 ^ 32'h6cb0; + 7'd39: vJlF3gash = 32'h31c8 ^ 32'b00000000000000000001110101000111 ^ 32'd11406; + 7'h36: vJlF3gash = 32'b00000000000000000010010110000111 ^ 32'd9606; + 7'h1c: vJlF3gash = 32'h65fa ^ 32'o62773; + 7'o170: vJlF3gash = 32'h6e64 ^ 32'o14660 ^ 32'o73725; + 7'd63: vJlF3gash = 32'h735f ^ 32'h735f; + 7'o125: vJlF3gash = 32'h60fe ^ 32'o60377; + 7'd19: vJlF3gash = 32'b00000000000000000001100000100001 ^ 32'o14040; + 7'd125: vJlF3gash = 32'o65116 ^ 32'd27214; + 7'b1101111: vJlF3gash = 32'd8331 ^ 32'o15026 ^ 32'd15005; + 7'o25: vJlF3gash = 32'd5655 ^ 32'd5654; + 7'o16: vJlF3gash = 32'o16067 ^ 32'o16066; + 7'h6d: vJlF3gash = 32'o46222 ^ 32'h4c92; + 7'o161: vJlF3gash = 32'o17201 ^ 32'h6b6e ^ 32'd30190; + 7'b0010000: vJlF3gash = 32'd28720 ^ 32'd13722 ^ 32'h45ab; + 7'b1001011: vJlF3gash = 32'o64451 ^ 32'd7086 ^ 32'd29318; + 7'h22: vJlF3gash = 32'b00000000000000000011010111011101 ^ 32'h35dc; + 7'b1101110: vJlF3gash = 32'b00000000000000000111011010001111 ^ 32'h768e; + 7'o141: vJlF3gash = 32'd22216 ^ 32'o73713 ^ 32'o20402; + 7'o102: vJlF3gash = 32'o15521 ^ 32'd7188 ^ 32'o3504; + 7'o54: vJlF3gash = 32'd11698 ^ 32'b00000000000000000011111111111000 ^ 32'd4682; + 7'd100: vJlF3gash = 32'h7eba ^ 32'h7ebb; + 7'd94: vJlF3gash = 32'b00000000000000000010111011010111 ^ 32'b00000000000000000010111011010110; + 7'd37: vJlF3gash = 32'b00000000000000000011001111010010 ^ 32'b00000000000000000011001111010010; + 7'b0111101: vJlF3gash = 32'd8038 ^ 32'o17546; + 7'b1110010: vJlF3gash = 32'b00000000000000000100100001111101 ^ 32'h487c; + 7'b0111011: vJlF3gash = 32'd8561 ^ 32'd8560; + 7'd92: vJlF3gash = 32'b00000000000000000101101011011110 ^ 32'd23263; + 7'd4: vJlF3gash = 32'o22142 ^ 32'd25767 ^ 32'b00000000000000000100000011000101; + 7'd89: vJlF3gash = 32'b00000000000000000011001011101100 ^ 32'd15865 ^ 32'o7424; + 7'b1110110: vJlF3gash = 32'd6763 ^ 32'o15152; + 7'b1000000: vJlF3gash = 32'd7516 ^ 32'd19132 ^ 32'o53741; + 7'b1010110: vJlF3gash = 32'hafb ^ 32'hafa; + 7'hd: vJlF3gash = 32'o71073 ^ 32'h6441 ^ 32'h167a; + 7'h5f: vJlF3gash = 32'b00000000000000000101100011010011 ^ 32'o54322; + 7'b1111100: vJlF3gash = 32'h4052 ^ 32'b00000000000000000111011010011001 ^ 32'd14026; + 7'd35: vJlF3gash = 32'd24537 ^ 32'o40136 ^ 32'o17606; + 7'd122: vJlF3gash = 32'b00000000000000000110110001011001 ^ 32'o65410 ^ 32'o3520; + endcase + end + + logic [31:0] qaz6wx1C86; + + always_ff @(posedge clk_i) begin + if(zZF) begin + busy <= '0; + end else begin + busy <= vJlF3gash[32'b00000000000000000110010010101011 ^ 32'd21989 ^ 32'o30516]; + end + end + + logic [31:0] q5Upj3TRGS8nkfV; + always_comb begin + case ({wKSnwVGWV, VICULOkZm, valid, eY8BfVPWv, XJhsywc8r, r0UH06pov5}) + 6'd57: qaz6wx1C86 = 32'b00000000000000000100110110100011 ^ 32'd5756 ^ 32'b00000000000000000101101111011110; + 6'o32: qaz6wx1C86 = 32'h122b ^ 32'o35305 ^ 32'd10478; + 6'o70: qaz6wx1C86 = 32'h23a6 ^ 32'd9126; + 6'h17: qaz6wx1C86 = 32'b00000000000000000001010000110110 ^ 32'o64555 ^ 32'b00000000000000000111110101011011; + 6'd48: qaz6wx1C86 = 32'b00000000000000000111111111001010 ^ 32'b00000000000000000001011011100010 ^ 32'h6928; + 6'b100010: qaz6wx1C86 = 32'b00000000000000000011011000000111 ^ 32'd29847 ^ 32'b00000000000000000100001010010000; + 6'b101000: qaz6wx1C86 = 32'h5eb ^ 32'h5eb; + 6'o34: qaz6wx1C86 = 32'b00000000000000000001000000100001 ^ 32'o6036 ^ 32'd7231; + 6'd17: qaz6wx1C86 = 32'h4453 ^ 32'o35453 ^ 32'o77570; + 6'h3b: qaz6wx1C86 = 32'h4b98 ^ 32'b00000000000000000110011111010100 ^ 32'b00000000000000000010110001001100; + 6'o25: qaz6wx1C86 = 32'h1641 ^ 32'o14024 ^ 32'b00000000000000000000111001010101; + 6'o44: qaz6wx1C86 = 32'd13309 ^ 32'b00000000000000000100010111110000 ^ 32'b00000000000000000111011000001101; + 6'h27: qaz6wx1C86 = 32'o30762 ^ 32'b00000000000000000001011101001000 ^ 32'b00000000000000000010011010111011; + 6'o41: qaz6wx1C86 = 32'd3083 ^ 32'b00000000000000000000110000001010; + 6'o23: qaz6wx1C86 = 32'b00000000000000000100001001001000 ^ 32'hc84 ^ 32'o47314; + 6'd29: qaz6wx1C86 = 32'b00000000000000000011101000011101 ^ 32'b00000000000000000011101000011101; + 6'd32: qaz6wx1C86 = 32'd25103 ^ 32'o64407 ^ 32'hb08; + 6'o74: qaz6wx1C86 = 32'o72624 ^ 32'h7594; + 6'b101001: qaz6wx1C86 = 32'd12263 ^ 32'b00000000000000000110100010100001 ^ 32'b00000000000000000100011101000111; + 6'o17: qaz6wx1C86 = 32'd28762 ^ 32'o70132; + 6'd53: qaz6wx1C86 = 32'b00000000000000000111101110110101 ^ 32'b00000000000000000011100110010011 ^ 32'o41047; + 6'h10: qaz6wx1C86 = 32'd6743 ^ 32'o15127; + 6'b000100: qaz6wx1C86 = 32'd9356 ^ 32'd24233 ^ 32'o75045; + 6'b010100: qaz6wx1C86 = 32'h6c45 ^ 32'o66105; + 6'b111111: qaz6wx1C86 = 32'o16606 ^ 32'd17597 ^ 32'h593b; + 6'd42: qaz6wx1C86 = 32'o54744 ^ 32'd23012; + 6'b011000: qaz6wx1C86 = 32'o37063 ^ 32'b00000000000000000011111000110011; + 6'b101111: qaz6wx1C86 = 32'b00000000000000000101010111001110 ^ 32'd21967; + 6'b111110: qaz6wx1C86 = 32'b00000000000000000100100110001101 ^ 32'b00000000000000000011100100101101 ^ 32'd28832; + 6'o62: qaz6wx1C86 = 32'h7dc0 ^ 32'b00000000000000000110100000111010 ^ 32'h15fa; + 6'o53: qaz6wx1C86 = 32'b00000000000000000000001111100000 ^ 32'd29745 ^ 32'h77d0; + 6'o16: qaz6wx1C86 = 32'd7265 ^ 32'd7265; + 6'b011111: qaz6wx1C86 = 32'd14354 ^ 32'h3812; + 6'h9: qaz6wx1C86 = 32'b00000000000000000010000001110111 ^ 32'd8311; + 6'b100101: qaz6wx1C86 = 32'd24057 ^ 32'o5670 ^ 32'o53100; + 6'h1: qaz6wx1C86 = 32'h7c9b ^ 32'b00000000000000000111110010011011; + 6'h12: qaz6wx1C86 = 32'h6e4f ^ 32'd28239; + 6'o66: qaz6wx1C86 = 32'h4fae ^ 32'd17699 ^ 32'b00000000000000000000101010001101; + 6'o2: qaz6wx1C86 = 32'h5094 ^ 32'h5094; + 6'h8: qaz6wx1C86 = 32'd30330 ^ 32'h3b92 ^ 32'b00000000000000000100110111101000; + 6'd51: qaz6wx1C86 = 32'd10172 ^ 32'd10172; + 6'b101100: qaz6wx1C86 = 32'o26734 ^ 32'b00000000000000000011100111111001 ^ 32'd5157; + 6'h34: qaz6wx1C86 = 32'b00000000000000000101000110111000 ^ 32'd29643 ^ 32'b00000000000000000010001001110011; + 6'd55: qaz6wx1C86 = 32'h79aa ^ 32'h79aa; + 6'b010110: qaz6wx1C86 = 32'h403d ^ 32'h403d; + 6'b111101: qaz6wx1C86 = 32'd8081 ^ 32'h7365 ^ 32'h6cf5; + 6'd27: qaz6wx1C86 = 32'd26148 ^ 32'b00000000000000000100011001010110 ^ 32'h2072; + 6'h7: qaz6wx1C86 = 32'o46176 ^ 32'h4c7e; + 6'h2e: qaz6wx1C86 = 32'b00000000000000000010101111010010 ^ 32'd11218; + 6'o5: qaz6wx1C86 = 32'o47211 ^ 32'b00000000000000000100111010001001; + 6'o55: qaz6wx1C86 = 32'h1d5 ^ 32'd17801 ^ 32'h445d; + 6'b000110: qaz6wx1C86 = 32'b00000000000000000111100010000101 ^ 32'o65071 ^ 32'b00000000000000000001001010111100; + 6'd25: qaz6wx1C86 = 32'o64057 ^ 32'o64057; + 6'd11: qaz6wx1C86 = 32'b00000000000000000001111001101100 ^ 32'o17154; + 6'o72: qaz6wx1C86 = 32'o20634 ^ 32'h220c ^ 32'h390; + 6'd35: qaz6wx1C86 = 32'o60004 ^ 32'o35137 ^ 32'o55132; + 6'h3: qaz6wx1C86 = 32'h7a90 ^ 32'o14341 ^ 32'b00000000000000000110001001110001; + 6'h0: qaz6wx1C86 = 32'h529e ^ 32'b00000000000000000101001010011110; + 6'o14: qaz6wx1C86 = 32'h4869 ^ 32'o14172 ^ 32'h5013; + 6'd49: qaz6wx1C86 = 32'b00000000000000000101001111000011 ^ 32'h53c2; + 6'o12: qaz6wx1C86 = 32'b00000000000000000100101001110011 ^ 32'b00000000000000000100101001110011; + 6'b100110: qaz6wx1C86 = 32'h7f6 ^ 32'b00000000000000000000011111110110; + 6'd13: qaz6wx1C86 = 32'd29285 ^ 32'h5e43 ^ 32'd11302; + 6'b011110: qaz6wx1C86 = 32'o62031 ^ 32'b00000000000000000001011110101110 ^ 32'h73b7; + endcase + end + + assign r0UH06pov5 = UmLX == (32'o32572 ^ 32'h357a); + + always_ff @(posedge clk_i) begin + if(zZF) begin + valid <= '0; + end else begin + valid <= qaz6wx1C86[32'o46742 ^ 32'o24471 ^ 32'h64db]; + end + end + + logic VVZKlkqbq; + assign VVZKlkqbq = UmLX == (32'h73e2 ^ 32'b00000000000000000001101001001000 ^ 32'o64652); + always_comb begin + case ({wKSnwVGWV, VICULOkZm, VVZKlkqbq, XJhsywc8r}) + 4'b1101: q5Upj3TRGS8nkfV = 32'h5ea0 ^ 32'hed25493; + 4'd3: q5Upj3TRGS8nkfV = 32'd15044 ^ 32'h3f17 ^ 32'b01011110010110011010111010001111; + 4'h6: q5Upj3TRGS8nkfV = 32'o34271 ^ 32'd4207 ^ 32'd832212430; + 4'o13: q5Upj3TRGS8nkfV = 32'o5247 ^ 32'h6d58 ^ 32'h6f961b2b; + 4'h0: q5Upj3TRGS8nkfV = 32'b00000000000000000001001011010010 ^ 32'o14336040213; + 4'd7: q5Upj3TRGS8nkfV = 32'd25270 ^ 32'h1bc519ae; + 4'o4: q5Upj3TRGS8nkfV = 32'd25792 ^ 32'b01010100100001001010111011011101; + 4'ha: q5Upj3TRGS8nkfV = 32'h60ab ^ 32'b00011110001100100000110100000110; + 4'hc: q5Upj3TRGS8nkfV = 32'h34a4 ^ 32'd13088 ^ 32'd102164953; + 4'o2: q5Upj3TRGS8nkfV = 32'b00000000000000000001000011001000 ^ 32'd1470131080; + 4'd5: q5Upj3TRGS8nkfV = 32'd3773 ^ 32'o14677436470; + 4'o17: q5Upj3TRGS8nkfV = 32'o31231 ^ 32'b01100100111110100100110000011011; + 4'b0001: q5Upj3TRGS8nkfV = 32'o36317 ^ 32'h6dbe ^ 32'b01010001100000101111011101101001; + 4'h8: q5Upj3TRGS8nkfV = 32'd3250 ^ 32'h1c00 ^ 32'h42d7eb62; + 4'b1110: q5Upj3TRGS8nkfV = 32'd2205 ^ 32'h3eb1 ^ 32'h74c58ad8; + 4'd9: q5Upj3TRGS8nkfV = 32'd13999 ^ 32'd25032 ^ 32'd1908358519; + endcase + end + + logic [31:0] eBnHjxu3POlmkT7; + assign XJhsywc8r = FFDK4sD9m7 == (32'o26420 ^ 32'b00000000000000000011010010011010 ^ 32'h198b); + always_comb begin + case ({wKSnwVGWV, VICULOkZm, VVZKlkqbq, XJhsywc8r}) + 4'd13: eBnHjxu3POlmkT7 = 32'o62772 ^ 32'd25234 ^ 32'd619253058; + 4'h9: eBnHjxu3POlmkT7 = 32'o37011 ^ 32'h78b64f90; + 4'h5: eBnHjxu3POlmkT7 = 32'd5655 ^ 32'd13393 ^ 32'o14774560176; + 4'b0011: eBnHjxu3POlmkT7 = 32'h421e ^ 32'o24300 ^ 32'h33beeb7f; + 4'b1110: eBnHjxu3POlmkT7 = 32'hff7 ^ 32'b00000000000000000010100001011010 ^ 32'b01111101110010100011111011111010; + 4'h7: eBnHjxu3POlmkT7 = 32'o65020 ^ 32'o16034426322; + 4'b0100: eBnHjxu3POlmkT7 = 32'h6c1b ^ 32'd1616384739; + 4'd15: eBnHjxu3POlmkT7 = 32'b00000000000000000011100111110011 ^ 32'h6d8d37c6; + 4'h2: eBnHjxu3POlmkT7 = 32'o14042 ^ 32'd25336 ^ 32'o2654636133; + 4'b0110: eBnHjxu3POlmkT7 = 32'b00000000000000000100000000010100 ^ 32'o75031 ^ 32'h1a1b1874; + 4'b0001: eBnHjxu3POlmkT7 = 32'b00000000000000000100010000101001 ^ 32'b00000000000000000101011101101000 ^ 32'h2ef4b8b3; + 4'd8: eBnHjxu3POlmkT7 = 32'h140c ^ 32'b00000000000000000000010110101001 ^ 32'b01101100000110101011001000011111; + 4'hb: eBnHjxu3POlmkT7 = 32'b00000000000000000001001000000010 ^ 32'b00000000000000000101011100000010 ^ 32'b00101111110001001001110111011101; + 4'b1010: eBnHjxu3POlmkT7 = 32'o64005 ^ 32'd1843325073; + 4'h0: eBnHjxu3POlmkT7 = 32'h1a2d ^ 32'd734609828; + 4'd12: eBnHjxu3POlmkT7 = 32'b00000000000000000011101111111110 ^ 32'b01110001100110001001111110011100; + endcase + end + + always_ff @(posedge clk_i) begin + if(zZF) begin + data <= '0; + end else if (q5Upj3TRGS8nkfV[32'd23241 ^ 32'b00000000000000000101101011001000]) begin + data <= '0; + end else if(eBnHjxu3POlmkT7[32'o72553 ^ 32'b00000000000000000111010101101001]) begin + data <= FFDK4sD9m7; + end + else begin + data <= data; + end + end + + assign fcS5S0IailtPh = UmLX == (32'o13330 ^ 32'o43045 ^ 32'd20721); + logic [31:0] SuhrzWcGiwP2SmTaYCK; + always_comb begin + case ({wKSnwVGWV, fcS5S0IailtPh, VICULOkZm, XJhsywc8r}) + 4'd5: SuhrzWcGiwP2SmTaYCK = 32'h664e ^ 32'o31120 ^ 32'h121a79bb; + 4'h4: SuhrzWcGiwP2SmTaYCK = 32'h3c52 ^ 32'o16325204045; + 4'h1: SuhrzWcGiwP2SmTaYCK = 32'd15965 ^ 32'd2111526847; + 4'd13: SuhrzWcGiwP2SmTaYCK = 32'd13874 ^ 32'b00000000000000000110000010010010 ^ 32'b01111110111010011111001101110001; + 4'd8: SuhrzWcGiwP2SmTaYCK = 32'b00000000000000000110010001000100 ^ 32'o1651 ^ 32'h39cc7d3b; + 4'hc: SuhrzWcGiwP2SmTaYCK = 32'o6065 ^ 32'd343741462; + 4'b1011: SuhrzWcGiwP2SmTaYCK = 32'h6239 ^ 32'h5501 ^ 32'o6775127066; + 4'd10: SuhrzWcGiwP2SmTaYCK = 32'o34075 ^ 32'o6174646137; + 4'd3: SuhrzWcGiwP2SmTaYCK = 32'b00000000000000000001001001010110 ^ 32'h26c0 ^ 32'd368251297; + 4'd2: SuhrzWcGiwP2SmTaYCK = 32'h6859 ^ 32'b00000110101101000010000000111010; + 4'o7: SuhrzWcGiwP2SmTaYCK = 32'h3a47 ^ 32'd1161903040; + 4'he: SuhrzWcGiwP2SmTaYCK = 32'b00000000000000000000101000101011 ^ 32'o17563345053; + 4'h9: SuhrzWcGiwP2SmTaYCK = 32'o7100 ^ 32'o15764422501; + 4'o6: SuhrzWcGiwP2SmTaYCK = 32'd4171 ^ 32'd30744 ^ 32'd6904852; + 4'd15: SuhrzWcGiwP2SmTaYCK = 32'o32047 ^ 32'o30752 ^ 32'b01110010010101100100010111100000; + 4'd0: SuhrzWcGiwP2SmTaYCK = 32'h1460 ^ 32'h5567 ^ 32'd882296647; + endcase + end + + logic [31:0] FHGBch0qBHxqcbX8Dlb; + always_comb begin + case ({wKSnwVGWV, fcS5S0IailtPh, VICULOkZm, XJhsywc8r}) + 4'd12: FHGBch0qBHxqcbX8Dlb = 32'b00000000000000000000110001001011 ^ 32'h331f09ba; + 4'd15: FHGBch0qBHxqcbX8Dlb = 32'd2624 ^ 32'b00111010001111100110100101010111; + 4'd0: FHGBch0qBHxqcbX8Dlb = 32'h6a79 ^ 32'o11016714577; + 4'h4: FHGBch0qBHxqcbX8Dlb = 32'o36147 ^ 32'b00000110001011010101001100101101; + 4'd14: FHGBch0qBHxqcbX8Dlb = 32'd24643 ^ 32'h635a ^ 32'h36813882; + 4'ha: FHGBch0qBHxqcbX8Dlb = 32'b00000000000000000011100001010010 ^ 32'b00000000000000000100110000111010 ^ 32'o2211317713; + 4'b1011: FHGBch0qBHxqcbX8Dlb = 32'o61116 ^ 32'h1202 ^ 32'h21745a02; + 4'o2: FHGBch0qBHxqcbX8Dlb = 32'd26734 ^ 32'o16770 ^ 32'h4fc6d1d5; + 4'b0101: FHGBch0qBHxqcbX8Dlb = 32'o63144 ^ 32'o67521 ^ 32'h714246f3; + 4'b0110: FHGBch0qBHxqcbX8Dlb = 32'o10140 ^ 32'h427bb924; + 4'h1: FHGBch0qBHxqcbX8Dlb = 32'o12166 ^ 32'h1268 ^ 32'b01101001010000011001010010110110; + 4'd13: FHGBch0qBHxqcbX8Dlb = 32'h3647 ^ 32'o16622 ^ 32'b01110110001010000111000100101100; + 4'h9: FHGBch0qBHxqcbX8Dlb = 32'b00000000000000000000111001010101 ^ 32'b01001011011110100011011100111100; + 4'h7: FHGBch0qBHxqcbX8Dlb = 32'o35134 ^ 32'h459eecf4; + 4'h8: FHGBch0qBHxqcbX8Dlb = 32'd25689 ^ 32'o40251 ^ 32'h3a6f4fd0; + 4'o3: FHGBch0qBHxqcbX8Dlb = 32'd4715 ^ 32'h63c1 ^ 32'b01001111110001011111010111000100; + endcase + end + + always_ff @(posedge clk_i) begin + if(zZF) begin + baudrate <= '0; + end else if (SuhrzWcGiwP2SmTaYCK[32'd3188 ^ 32'b00000000000000000000110001110111]) begin + baudrate <= '0; + end + else if(FHGBch0qBHxqcbX8Dlb[32'b00000000000000000000110101101111 ^ 32'h787d ^ 32'o72426]) begin + baudrate <= FFDK4sD9m7; + end + else begin + baudrate <= baudrate; + end + end + + logic [31:0] WLGbSSV5YzHmlpmqLI; + + logic [31:0] b5l5UfftZRDTX1AD2; + logic m4Js9aFV4Us; + always_comb begin + case ({wKSnwVGWV, m4Js9aFV4Us, VICULOkZm, XJhsywc8r}) + 4'd14: b5l5UfftZRDTX1AD2 = 32'b00000000000000000110010110000000 ^ 32'd295811877; + 4'b0111: b5l5UfftZRDTX1AD2 = 32'h159d ^ 32'o12602005631; + 4'd6: b5l5UfftZRDTX1AD2 = 32'h6ba0 ^ 32'o11557450265; + 4'd2: b5l5UfftZRDTX1AD2 = 32'h43af ^ 32'd17152 ^ 32'h22f4f996; + 4'b1101: b5l5UfftZRDTX1AD2 = 32'b00000000000000000011101110000100 ^ 32'h1e89d3c; + 4'o13: b5l5UfftZRDTX1AD2 = 32'o63613 ^ 32'o15557237564; + 4'd1: b5l5UfftZRDTX1AD2 = 32'd6578 ^ 32'o2423507117; + 4'b1111: b5l5UfftZRDTX1AD2 = 32'b00000000000000000000111101111101 ^ 32'd5106 ^ 32'b00101010110111011010011011110000; + 4'h4: b5l5UfftZRDTX1AD2 = 32'h17a8 ^ 32'd1199459581; + 4'o5: b5l5UfftZRDTX1AD2 = 32'b00000000000000000100000110100100 ^ 32'b00000000000000000001010001011000 ^ 32'h2acd6c79; + 4'd3: b5l5UfftZRDTX1AD2 = 32'h6dab ^ 32'd2104322542; + 4'o10: b5l5UfftZRDTX1AD2 = 32'o64626 ^ 32'd407919674; + 4'b1100: b5l5UfftZRDTX1AD2 = 32'h1187 ^ 32'd17050 ^ 32'b00100101100100001010000100001000; + 4'h9: b5l5UfftZRDTX1AD2 = 32'd5010 ^ 32'd28993 ^ 32'b01000000000011010011100101100111; + 4'b0000: b5l5UfftZRDTX1AD2 = 32'o67666 ^ 32'o33557 ^ 32'd1228297272; + 4'o12: b5l5UfftZRDTX1AD2 = 32'b00000000000000000011110110001110 ^ 32'b00000000000000000011011100001001 ^ 32'o15300071342; + endcase + end + + logic [31:0] fhHTYz8JNP73GgkZp; + always_comb begin + case ({wKSnwVGWV, m4Js9aFV4Us, VICULOkZm, XJhsywc8r}) + 4'd6: fhHTYz8JNP73GgkZp = 32'o47241 ^ 32'o62175 ^ 32'd458013848; + 4'ha: fhHTYz8JNP73GgkZp = 32'b00000000000000000111011010010011 ^ 32'b00110011011111001110001010000110; + 4'o7: fhHTYz8JNP73GgkZp = 32'b00000000000000000111100010011110 ^ 32'h7dcc2c86; + 4'o10: fhHTYz8JNP73GgkZp = 32'h229a ^ 32'b00000000000000000111000000001110 ^ 32'h1202b248; + 4'o13: fhHTYz8JNP73GgkZp = 32'b00000000000000000010000010001111 ^ 32'b00000000000000000100000101100110 ^ 32'o13251517010; + 4'b0000: fhHTYz8JNP73GgkZp = 32'o51267 ^ 32'b00000000000000000100000111001100 ^ 32'd110940771; + 4'd1: fhHTYz8JNP73GgkZp = 32'o76263 ^ 32'h3675cebe; + 4'h4: fhHTYz8JNP73GgkZp = 32'o75250 ^ 32'b00011100000101100010111010111001; + 4'b1110: fhHTYz8JNP73GgkZp = 32'd18561 ^ 32'd1483794795; + 4'h9: fhHTYz8JNP73GgkZp = 32'd19606 ^ 32'o32726 ^ 32'd980015896; + 4'o3: fhHTYz8JNP73GgkZp = 32'd20652 ^ 32'b00000000000000000001001100100101 ^ 32'd868638757; + 4'h2: fhHTYz8JNP73GgkZp = 32'o23260 ^ 32'h19035575; + 4'hd: fhHTYz8JNP73GgkZp = 32'd7812 ^ 32'b00000000000000000001001010111111 ^ 32'o16052401775; + 4'b1100: fhHTYz8JNP73GgkZp = 32'b00000000000000000100101010001100 ^ 32'o13236356763; + 4'o5: fhHTYz8JNP73GgkZp = 32'o22245 ^ 32'b00000111001111101010111000101001; + 4'o17: fhHTYz8JNP73GgkZp = 32'b00000000000000000111001001111101 ^ 32'd7759 ^ 32'b00100111001011110111011100110001; + endcase + end + assign m4Js9aFV4Us = UmLX == (32'd22117 ^ 32'd32555 ^ 32'd10590); + + always_ff @(posedge clk_i) begin + if(zZF) begin + parity_en <= '0; + end else if (b5l5UfftZRDTX1AD2[32'h7906 ^ 32'h12c0 ^ 32'h6bc7]) begin + parity_en <= '0; + end + else if(fhHTYz8JNP73GgkZp[32'o1770 ^ 32'o1771]) begin + parity_en <= FFDK4sD9m7; + end + else begin + parity_en <= parity_en; + end + end + + logic P0EEllcI4VCU; + assign P0EEllcI4VCU = UmLX == (32'o62726 ^ 32'd26050); + always_comb begin + case ({m4Js9aFV4Us, P0EEllcI4VCU, VICULOkZm, XJhsywc8r, wKSnwVGWV, fcS5S0IailtPh}) + 6'b010011: WLGbSSV5YzHmlpmqLI = 32'h7a7f ^ 32'o6421703407; + 6'h1a: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000100101001100010 ^ 32'h62321c5f; + 6'h2f: WLGbSSV5YzHmlpmqLI = 32'o63023 ^ 32'h722d90fd; + 6'd28: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000001111001011011 ^ 32'h3d02 ^ 32'd1738296917; + 6'he: WLGbSSV5YzHmlpmqLI = 32'd10385 ^ 32'h1e9099e6; + 6'b000110: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000010111010110001 ^ 32'd100341241; + 6'h7: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000101100010101101 ^ 32'o74006 ^ 32'h4af4ca7f; + 6'd53: WLGbSSV5YzHmlpmqLI = 32'h61fd ^ 32'd21334 ^ 32'b01101010110001001001010101000010; + 6'o61: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000011101000001100 ^ 32'd1070093101; + 6'o76: WLGbSSV5YzHmlpmqLI = 32'h5d9 ^ 32'o4453034147; + 6'd36: WLGbSSV5YzHmlpmqLI = 32'o67076 ^ 32'o65503 ^ 32'o236115274; + 6'h29: WLGbSSV5YzHmlpmqLI = 32'o40054 ^ 32'b00000000000000000100100000101100 ^ 32'd438005057; + 6'b111011: WLGbSSV5YzHmlpmqLI = 32'h7e4 ^ 32'h5a9eb098; + 6'o21: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000010011010000110 ^ 32'o73640 ^ 32'b00101111111101010100111111100010; + 6'd40: WLGbSSV5YzHmlpmqLI = 32'h1630 ^ 32'b01100011100010011101000101001101; + 6'h37: WLGbSSV5YzHmlpmqLI = 32'd13814 ^ 32'd1499541943; + 6'o17: WLGbSSV5YzHmlpmqLI = 32'h528d ^ 32'h6c10 ^ 32'o7462474716; + 6'd34: WLGbSSV5YzHmlpmqLI = 32'd6725 ^ 32'b01111010100000111001101011110101; + 6'd2: WLGbSSV5YzHmlpmqLI = 32'o3277 ^ 32'h1b1d ^ 32'd1165033499; + 6'h30: WLGbSSV5YzHmlpmqLI = 32'h100f ^ 32'b00000000000000000111011001101110 ^ 32'o6552062231; + 6'b010110: WLGbSSV5YzHmlpmqLI = 32'o74164 ^ 32'd1434393388; + 6'b111101: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000101101111011101 ^ 32'b00000000000000000100011101100000 ^ 32'd909162724; + 6'd57: WLGbSSV5YzHmlpmqLI = 32'd2543 ^ 32'b00001000011000100101001011101011; + 6'b101011: WLGbSSV5YzHmlpmqLI = 32'd15905 ^ 32'o14605 ^ 32'd426889412; + 6'o72: WLGbSSV5YzHmlpmqLI = 32'd13291 ^ 32'o13620560216; + 6'b011111: WLGbSSV5YzHmlpmqLI = 32'd7248 ^ 32'h39d2009f; + 6'b101100: WLGbSSV5YzHmlpmqLI = 32'o64036 ^ 32'd2115225742; + 6'o46: WLGbSSV5YzHmlpmqLI = 32'd16951 ^ 32'b00000000000000000111011011010100 ^ 32'b01011100001111100101001100110011; + 6'b100011: WLGbSSV5YzHmlpmqLI = 32'o42102 ^ 32'b00000000000000000010010101111011 ^ 32'b01100001010001000101101011010101; + 6'o30: WLGbSSV5YzHmlpmqLI = 32'o46155 ^ 32'b00001111100010110010101101111001; + 6'h12: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000101000010000010 ^ 32'h3d68 ^ 32'o5006130516; + 6'o52: WLGbSSV5YzHmlpmqLI = 32'h1425 ^ 32'd21437 ^ 32'h6c10c5c1; + 6'o35: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000100100001010111 ^ 32'b00001111100001110110000101101011; + 6'd13: WLGbSSV5YzHmlpmqLI = 32'd32404 ^ 32'o5267624761; + 6'b111000: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000101111111110011 ^ 32'd9391 ^ 32'b00000010001110111100111110000100; + 6'd63: WLGbSSV5YzHmlpmqLI = 32'o27726 ^ 32'd21232 ^ 32'h60c73c71; + 6'b100111: WLGbSSV5YzHmlpmqLI = 32'h6c33 ^ 32'd1348383130; + 6'h33: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000000111000000101 ^ 32'b00000000000000000100011111000110 ^ 32'o1413653112; + 6'b110010: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000110010000001000 ^ 32'b00101000100110011110100011100100; + 6'h8: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000010110010100110 ^ 32'o11036124126; + 6'b100000: WLGbSSV5YzHmlpmqLI = 32'd17996 ^ 32'd55914332; + 6'o3: WLGbSSV5YzHmlpmqLI = 32'o30274 ^ 32'o4415063561; + 6'o11: WLGbSSV5YzHmlpmqLI = 32'h56a3 ^ 32'o44537 ^ 32'o7406347521; + 6'o13: WLGbSSV5YzHmlpmqLI = 32'd10907 ^ 32'd1539340531; + 6'h25: WLGbSSV5YzHmlpmqLI = 32'h183a ^ 32'h321abce3; + 6'b110110: WLGbSSV5YzHmlpmqLI = 32'hbfa ^ 32'b00000000000000000001100100011111 ^ 32'o13474325645; + 6'h17: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000010001001110000 ^ 32'o15121 ^ 32'd1851010648; + 6'b001100: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000101010010011000 ^ 32'h1ab7 ^ 32'o2022343312; + 6'o36: WLGbSSV5YzHmlpmqLI = 32'o71124 ^ 32'o44222 ^ 32'o7444464371; + 6'd46: WLGbSSV5YzHmlpmqLI = 32'o36027 ^ 32'o65335 ^ 32'd371448084; + 6'b010000: WLGbSSV5YzHmlpmqLI = 32'h7c89 ^ 32'd1941236341; + 6'b010100: WLGbSSV5YzHmlpmqLI = 32'h247b ^ 32'o44370 ^ 32'd1196722951; + 6'd27: WLGbSSV5YzHmlpmqLI = 32'd29790 ^ 32'o73472 ^ 32'h5602858c; + 6'b000101: WLGbSSV5YzHmlpmqLI = 32'd1205 ^ 32'h6c76 ^ 32'd1912730239; + 6'b011001: WLGbSSV5YzHmlpmqLI = 32'h2066 ^ 32'h6ba9 ^ 32'd942376155; + 6'o1: WLGbSSV5YzHmlpmqLI = 32'o56303 ^ 32'b00111110001100010100011111001011; + 6'o4: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000101101010111000 ^ 32'h4fc2c804; + 6'h34: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000011100000000001 ^ 32'o13201041555; + 6'd45: WLGbSSV5YzHmlpmqLI = 32'b00000000000000000001001000011010 ^ 32'b00000000000000000010010100010101 ^ 32'hb1fbcbe; + 6'b001010: WLGbSSV5YzHmlpmqLI = 32'd159 ^ 32'd1516813251; + 6'b010101: WLGbSSV5YzHmlpmqLI = 32'o47170 ^ 32'h693d2bc0; + 6'd60: WLGbSSV5YzHmlpmqLI = 32'h31e1 ^ 32'd1326516696; + 6'h21: WLGbSSV5YzHmlpmqLI = 32'd28745 ^ 32'o14753 ^ 32'o102622513; + 6'h0: WLGbSSV5YzHmlpmqLI = 32'd12999 ^ 32'd3981 ^ 32'o16012611657; + endcase + end + + assign wKSnwVGWV = pEo & qICjuvAOmWmr; + assign VICULOkZm = UmLX == (32'h148f ^ 32'o12253); + + logic [31:0] vBjc8EzRDlz48WXa4k; + always_comb begin + case ({m4Js9aFV4Us, P0EEllcI4VCU, VICULOkZm, XJhsywc8r, wKSnwVGWV, fcS5S0IailtPh}) + 6'd9: vBjc8EzRDlz48WXa4k = 32'b00000000000000000001110000100110 ^ 32'd1968865001; + 6'b110111: vBjc8EzRDlz48WXa4k = 32'b00000000000000000111101101111010 ^ 32'b00000000000000000100111000100110 ^ 32'o10303624447; + 6'h38: vBjc8EzRDlz48WXa4k = 32'o47563 ^ 32'd22966 ^ 32'b01011000111000010111000111010011; + 6'b001110: vBjc8EzRDlz48WXa4k = 32'd28180 ^ 32'd1770718541; + 6'd44: vBjc8EzRDlz48WXa4k = 32'o26641 ^ 32'o47214 ^ 32'd1269075633; + 6'b101101: vBjc8EzRDlz48WXa4k = 32'h579e ^ 32'o6642351503; + 6'o76: vBjc8EzRDlz48WXa4k = 32'h4b5d ^ 32'b00000000000000000111110001100111 ^ 32'd2002868800; + 6'o31: vBjc8EzRDlz48WXa4k = 32'd26089 ^ 32'b00000000000000000101101011101001 ^ 32'h25c93bcb; + 6'd30: vBjc8EzRDlz48WXa4k = 32'b00000000000000000011011111010111 ^ 32'h4bcd7ab8; + 6'h3f: vBjc8EzRDlz48WXa4k = 32'h755a ^ 32'h683eb3f6; + 6'd50: vBjc8EzRDlz48WXa4k = 32'o24614 ^ 32'o741700252; + 6'b110001: vBjc8EzRDlz48WXa4k = 32'b00000000000000000111111110001111 ^ 32'b00000000000000000010101101110101 ^ 32'h25a4e761; + 6'b101011: vBjc8EzRDlz48WXa4k = 32'b00000000000000000000001110100101 ^ 32'd2244 ^ 32'h68c578ae; + 6'h5: vBjc8EzRDlz48WXa4k = 32'b00000000000000000111010000110101 ^ 32'h217d ^ 32'd278675848; + 6'o60: vBjc8EzRDlz48WXa4k = 32'o52623 ^ 32'd1522064583; + 6'o17: vBjc8EzRDlz48WXa4k = 32'd6161 ^ 32'o55517 ^ 32'b01001001001111001110001011011010; + 6'o50: vBjc8EzRDlz48WXa4k = 32'd1456 ^ 32'h4076583a; + 6'o24: vBjc8EzRDlz48WXa4k = 32'h69ff ^ 32'd1647636143; + 6'o47: vBjc8EzRDlz48WXa4k = 32'd23475 ^ 32'o13355467573; + 6'o52: vBjc8EzRDlz48WXa4k = 32'h59a9 ^ 32'd269481827; + 6'o71: vBjc8EzRDlz48WXa4k = 32'd31087 ^ 32'h7630562; + 6'h18: vBjc8EzRDlz48WXa4k = 32'o35755 ^ 32'h6a83bd37; + 6'd29: vBjc8EzRDlz48WXa4k = 32'o6733 ^ 32'h4a379444; + 6'd7: vBjc8EzRDlz48WXa4k = 32'h482e ^ 32'o26415 ^ 32'h159216ab; + 6'd28: vBjc8EzRDlz48WXa4k = 32'o61737 ^ 32'o26101 ^ 32'h12fd684a; + 6'o22: vBjc8EzRDlz48WXa4k = 32'o13006 ^ 32'o26247 ^ 32'b01011001100101010111010000011010; + 6'o32: vBjc8EzRDlz48WXa4k = 32'd4070 ^ 32'h20b1 ^ 32'd1493582438; + 6'd8: vBjc8EzRDlz48WXa4k = 32'h722a ^ 32'd29398 ^ 32'd1335986429; + 6'd16: vBjc8EzRDlz48WXa4k = 32'b00000000000000000100001000001101 ^ 32'h2117 ^ 32'o7123071615; + 6'd0: vBjc8EzRDlz48WXa4k = 32'b00000000000000000111100001001010 ^ 32'h7ecc ^ 32'b00111101001001011100000000011001; + 6'd13: vBjc8EzRDlz48WXa4k = 32'h4418 ^ 32'h4fbe ^ 32'o10512704470; + 6'd46: vBjc8EzRDlz48WXa4k = 32'h19a ^ 32'b00000000000000000101101000011100 ^ 32'h50de6cc1; + 6'b100110: vBjc8EzRDlz48WXa4k = 32'd1979 ^ 32'b00101111001000100000011100100000; + 6'b101001: vBjc8EzRDlz48WXa4k = 32'h2fac ^ 32'o76464 ^ 32'd1859925953; + 6'h3: vBjc8EzRDlz48WXa4k = 32'o20074 ^ 32'd1241899107; + 6'o33: vBjc8EzRDlz48WXa4k = 32'o34742 ^ 32'b00001000000101001000010101000110; + 6'hc: vBjc8EzRDlz48WXa4k = 32'b00000000000000000001101000011100 ^ 32'o14507726611; + 6'd2: vBjc8EzRDlz48WXa4k = 32'h4c43 ^ 32'h5dfc9c0f; + 6'd51: vBjc8EzRDlz48WXa4k = 32'o51610 ^ 32'o2712712356; + 6'd61: vBjc8EzRDlz48WXa4k = 32'd8545 ^ 32'o5010064657; + 6'd52: vBjc8EzRDlz48WXa4k = 32'h7d85 ^ 32'b00000000000000000111110011001110 ^ 32'o2373371533; + 6'o23: vBjc8EzRDlz48WXa4k = 32'h4002 ^ 32'h7270 ^ 32'o13661424031; + 6'd47: vBjc8EzRDlz48WXa4k = 32'd11159 ^ 32'o17745 ^ 32'd1507346480; + 6'b001011: vBjc8EzRDlz48WXa4k = 32'b00000000000000000111000000011111 ^ 32'o16126427520; + 6'd34: vBjc8EzRDlz48WXa4k = 32'o57711 ^ 32'o47362 ^ 32'o6556706570; + 6'b010001: vBjc8EzRDlz48WXa4k = 32'd27658 ^ 32'o13440363525; + 6'd53: vBjc8EzRDlz48WXa4k = 32'b00000000000000000010011110000001 ^ 32'd923797700; + 6'h20: vBjc8EzRDlz48WXa4k = 32'b00000000000000000000101111010000 ^ 32'b00001111101110010101110100011011; + 6'o6: vBjc8EzRDlz48WXa4k = 32'o17061 ^ 32'o10271662043; + 6'o4: vBjc8EzRDlz48WXa4k = 32'o45070 ^ 32'b00010101110001010001001000101000; + 6'ha: vBjc8EzRDlz48WXa4k = 32'b00000000000000000100011000100011 ^ 32'o77146 ^ 32'o5725726402; + 6'h17: vBjc8EzRDlz48WXa4k = 32'o10761 ^ 32'o47530 ^ 32'd846604252; + 6'o37: vBjc8EzRDlz48WXa4k = 32'd25044 ^ 32'o76632 ^ 32'o12032654357; + 6'b111010: vBjc8EzRDlz48WXa4k = 32'd9068 ^ 32'd1215680840; + 6'o45: vBjc8EzRDlz48WXa4k = 32'd23998 ^ 32'o20113 ^ 32'o11606433661; + 6'o1: vBjc8EzRDlz48WXa4k = 32'o21107 ^ 32'd17556 ^ 32'o2065074715; + 6'b100100: vBjc8EzRDlz48WXa4k = 32'h33c2 ^ 32'b00000000000000000101101010000011 ^ 32'b00000110011010101111000010000000; + 6'o26: vBjc8EzRDlz48WXa4k = 32'h67f4 ^ 32'o14126711433; + 6'o25: vBjc8EzRDlz48WXa4k = 32'h3df8 ^ 32'b01011010011010110100011011110000; + 6'o43: vBjc8EzRDlz48WXa4k = 32'b00000000000000000000100111000101 ^ 32'h74b56408; + 6'o73: vBjc8EzRDlz48WXa4k = 32'b00000000000000000100110101101000 ^ 32'b00000000000000000010101100001111 ^ 32'b01110110100101111011001000011000; + 6'o66: vBjc8EzRDlz48WXa4k = 32'd20862 ^ 32'd2142 ^ 32'b01011110101000000011101011001001; + 6'd60: vBjc8EzRDlz48WXa4k = 32'd30564 ^ 32'b01100101011101001001000011101011; + 6'b100001: vBjc8EzRDlz48WXa4k = 32'b00000000000000000011010111001101 ^ 32'b00100101111010001111100000001000; + endcase + end + + logic [31:0] jMTaMbqs055c0zWDyuyX; + always_comb begin + case ({VICULOkZm, XJhsywc8r, wKSnwVGWV, pEo, qICjuvAOmWmr}) + 5'ha: jMTaMbqs055c0zWDyuyX = 32'o73053 ^ 32'd2060447563; + 5'd1: jMTaMbqs055c0zWDyuyX = 32'd21071 ^ 32'b00001110111001010101111011000110; + 5'o36: jMTaMbqs055c0zWDyuyX = 32'o63740 ^ 32'h70d4 ^ 32'b01010001001001000110011110010010; + 5'o3: jMTaMbqs055c0zWDyuyX = 32'd9800 ^ 32'o4546566315; + 5'd23: jMTaMbqs055c0zWDyuyX = 32'b00000000000000000001011111111100 ^ 32'h4293 ^ 32'h38506077; + 5'h18: jMTaMbqs055c0zWDyuyX = 32'd16889 ^ 32'b01111111000001000101110000010000; + 5'h1f: jMTaMbqs055c0zWDyuyX = 32'h11dc ^ 32'h6066bf0e; + 5'hc: jMTaMbqs055c0zWDyuyX = 32'b00000000000000000100101000100100 ^ 32'd17145 ^ 32'b01111001101001110100010101100100; + 5'b10110: jMTaMbqs055c0zWDyuyX = 32'd28160 ^ 32'd1424638173; + 5'd17: jMTaMbqs055c0zWDyuyX = 32'd7186 ^ 32'h1fe2 ^ 32'h3f956080; + 5'b11010: jMTaMbqs055c0zWDyuyX = 32'h15f2 ^ 32'd5099 ^ 32'h4913b6d4; + 5'h9: jMTaMbqs055c0zWDyuyX = 32'h4c2f ^ 32'h71a0 ^ 32'b00001100000001010001000000000011; + 5'd29: jMTaMbqs055c0zWDyuyX = 32'h3de3 ^ 32'b00101001010010010101111101110110; + 5'o16: jMTaMbqs055c0zWDyuyX = 32'o17035 ^ 32'h4e89 ^ 32'h7bdf00ac; + 5'd15: jMTaMbqs055c0zWDyuyX = 32'h4819 ^ 32'd5201 ^ 32'b00110000101110111110101010011101; + 5'o4: jMTaMbqs055c0zWDyuyX = 32'd20548 ^ 32'h10344c94; + 5'b11001: jMTaMbqs055c0zWDyuyX = 32'o65765 ^ 32'o47043 ^ 32'b01100100111111110111000011100011; + 5'b00101: jMTaMbqs055c0zWDyuyX = 32'd31297 ^ 32'd5304 ^ 32'h23b36249; + 5'd19: jMTaMbqs055c0zWDyuyX = 32'b00000000000000000111000000001011 ^ 32'o4472612632; + 5'd2: jMTaMbqs055c0zWDyuyX = 32'b00000000000000000111110001001100 ^ 32'd17247 ^ 32'h555c1aef; + 5'd28: jMTaMbqs055c0zWDyuyX = 32'h13e7 ^ 32'b00010111110000011101010111100011; + 5'b10100: jMTaMbqs055c0zWDyuyX = 32'h1a07 ^ 32'h713a ^ 32'h7b647c68; + 5'd27: jMTaMbqs055c0zWDyuyX = 32'd27114 ^ 32'h1f7c ^ 32'b00111111111000011101110000111011; + 5'h6: jMTaMbqs055c0zWDyuyX = 32'h243d ^ 32'd484145837; + 5'd13: jMTaMbqs055c0zWDyuyX = 32'o72040 ^ 32'o6326065451; + 5'h7: jMTaMbqs055c0zWDyuyX = 32'b00000000000000000100111000111010 ^ 32'h2048 ^ 32'b00010100100110011101000001011011; + 5'h15: jMTaMbqs055c0zWDyuyX = 32'b00000000000000000100010000000100 ^ 32'h37ed0d9d; + 5'b10010: jMTaMbqs055c0zWDyuyX = 32'b00000000000000000100011000001110 ^ 32'd26026 ^ 32'd2088858357; + 5'o0: jMTaMbqs055c0zWDyuyX = 32'd10323 ^ 32'd460283331; + 5'hb: jMTaMbqs055c0zWDyuyX = 32'o20050 ^ 32'd438053772; + 5'o10: jMTaMbqs055c0zWDyuyX = 32'o74066 ^ 32'b00000000000000000110011000010000 ^ 32'o1737740073; + 5'b10000: jMTaMbqs055c0zWDyuyX = 32'b00000000000000000111001000010110 ^ 32'd212527463; + endcase + end + + logic [31:0] cI7ozekBmfu12; + always_comb begin + case ({VICULOkZm, XJhsywc8r, wKSnwVGWV, pEo, qICjuvAOmWmr}) + 5'd19: cI7ozekBmfu12 = 32'o57146 ^ 32'h3fc7 ^ 32'd479659813; + 5'h16: cI7ozekBmfu12 = 32'h5c5b ^ 32'd1434596568; + 5'b01111: cI7ozekBmfu12 = 32'b00000000000000000011011001110101 ^ 32'h6ba09ff2; + 5'h11: cI7ozekBmfu12 = 32'd2669 ^ 32'd334215551; + 5'b10101: cI7ozekBmfu12 = 32'h325f ^ 32'o45527 ^ 32'h3356711; + 5'd24: cI7ozekBmfu12 = 32'b00000000000000000011000001010100 ^ 32'o16260 ^ 32'h2f09e87d; + 5'hd: cI7ozekBmfu12 = 32'o61174 ^ 32'o16426 ^ 32'b01001101010000001000101111111010; + 5'b00011: cI7ozekBmfu12 = 32'o12243 ^ 32'h1d7c ^ 32'h5eb2511b; + 5'o32: cI7ozekBmfu12 = 32'h2e49 ^ 32'o67010 ^ 32'o2457411160; + 5'd20: cI7ozekBmfu12 = 32'd2147 ^ 32'o5045051261; + 5'o33: cI7ozekBmfu12 = 32'o54106 ^ 32'd957482061; + 5'b00010: cI7ozekBmfu12 = 32'h6aa7 ^ 32'b00001010000011100001111010011011; + 5'hc: cI7ozekBmfu12 = 32'b00000000000000000011100001111111 ^ 32'b01111100000000111011011100110001; + 5'h0: cI7ozekBmfu12 = 32'd5806 ^ 32'o46044 ^ 32'h28b2451; + 5'o1: cI7ozekBmfu12 = 32'b00000000000000000100000010101010 ^ 32'd4588 ^ 32'd1605026255; + 5'o31: cI7ozekBmfu12 = 32'h44d ^ 32'b00000000000000000010100001000000 ^ 32'b00001000101110101111101011011110; + 5'o6: cI7ozekBmfu12 = 32'd4761 ^ 32'h6ed5 ^ 32'h113e251c; + 5'd8: cI7ozekBmfu12 = 32'b00000000000000000110011010010001 ^ 32'o75145 ^ 32'b01100000100111001100000000111011; + 5'b00100: cI7ozekBmfu12 = 32'h3ea0 ^ 32'h7ece5d64; + 5'b11100: cI7ozekBmfu12 = 32'b00000000000000000000001001000010 ^ 32'b00000000000000000111100110011001 ^ 32'b01111100010101000001010111000100; + 5'o35: cI7ozekBmfu12 = 32'o26077 ^ 32'b01000111101111101110001100110110; + 5'o37: cI7ozekBmfu12 = 32'h37 ^ 32'b00000000000000000100101011110001 ^ 32'b01010111011111111110011000000101; + 5'd9: cI7ozekBmfu12 = 32'o35212 ^ 32'h3d1fddd0; + 5'b01110: cI7ozekBmfu12 = 32'b00000000000000000000110001111000 ^ 32'o12534110346; + 5'b01010: cI7ozekBmfu12 = 32'd25735 ^ 32'o45675 ^ 32'b00000001011000111010011100011111; + 5'b01011: cI7ozekBmfu12 = 32'b00000000000000000000111010000011 ^ 32'd415529667; + 5'b00101: cI7ozekBmfu12 = 32'h689c ^ 32'h30983181; + 5'b10010: cI7ozekBmfu12 = 32'b00000000000000000011010001101010 ^ 32'b00000000000000000111100111111111 ^ 32'h1b000e39; + 5'o20: cI7ozekBmfu12 = 32'd24689 ^ 32'h6e6f ^ 32'd1284891543; + 5'd7: cI7ozekBmfu12 = 32'o36225 ^ 32'b01111000111111111010010000001100; + 5'h17: cI7ozekBmfu12 = 32'h658 ^ 32'd778613074; + 5'o36: cI7ozekBmfu12 = 32'o53073 ^ 32'o15466557266; + endcase + end + + always_ff @(posedge clk_i) begin + if(zZF) begin + X5ldx3X4a <= '0; + end else if (jMTaMbqs055c0zWDyuyX[32'd15091 ^ 32'd28271 ^ 32'o65644 ^ 32'h4036 ^ 32'b00000000000000000110010001100010 ^ 32'o15555]) begin + X5ldx3X4a <= '0; + end + else if(cI7ozekBmfu12[32'o13355 ^ 32'b00000000000000000101111011100001 ^ 32'o44011]) begin + case(UmLX) + 32'h00: X5ldx3X4a <= data; + 32'h04: X5ldx3X4a <= valid; + 32'h08: X5ldx3X4a <= busy; + 32'h0c: X5ldx3X4a <= baudrate; + 32'h10: X5ldx3X4a <= parity_en; + 32'h14: X5ldx3X4a <= stopbit; + default: X5ldx3X4a <= X5ldx3X4a; + endcase + end + else begin + X5ldx3X4a <= X5ldx3X4a; + end + end + + always_ff @(posedge clk_i) begin + if(zZF) begin + stopbit <= '0; + end else if (WLGbSSV5YzHmlpmqLI[32'b00000000000000000000010011110011 ^ 32'b00000000000000000111111100110011 ^ 32'h7bc1]) begin + stopbit <= '0; + end else if(vBjc8EzRDlz48WXa4k[32'h207b ^ 32'o24252 ^ 32'h7639 ^ 32'h764 ^ 32'o20713 ^ 32'd30353 ^ 32'b00000000000000000010001101000100 ^ 32'o6627]) begin + stopbit <= FFDK4sD9m7; + end + else begin + stopbit <= stopbit; + end + end + assign q0MK89N8qKhS8mdymRsz = FFDK4sD9m7[0]; + assign pEo = req_i; endmodule From 1b94a08c802d0fc19709b4501894e2e3c02e4cd4 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Wed, 10 Apr 2024 11:27:42 +0300 Subject: [PATCH 30/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=20=D0=BE=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B8=D0=B3=D0=BD?= =?UTF-8?q?=D0=B0=D0=BB=D0=BE=D0=B2=20=D0=BE=D0=BF=D0=BA=D0=BE=D0=B4=D0=BE?= =?UTF-8?q?=D0=B2,=20=D0=BD=D0=B0=20=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B?= =?UTF-8?q?=D1=85=20=D1=82=D0=BE=D1=82=20=D0=BC=D0=BE=D0=B6=D0=B5=D1=82=20?= =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D1=82=D1=8C=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/05. Main decoder/README.md | 36 ++++++++++++++++----------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index cf73843..4abe0ca 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -148,24 +148,24 @@ _Таблица 4. Значения сигнала `mem_size_o` при пере Управляющие сигналы на выходе декодера зависят от трех полей инструкции: `opcode`, `func3` и `func7`. Обратите внимание, что расположение этих полей одинаково для всех типов инструкций. Это сделано для удобства декодирования. При этом для некоторых инструкций поля `func3` и `func7` могут отсутствовать. -|Название сигнала| Пояснение | -|----------------|------------------------------------------------------------------------------------------------| -|fetched_instr_i |Инструкция для декодирования, считанная из памяти инструкций | -|a_sel_o |Управляющий сигнал мультиплексора для выбора первого операнда АЛУ | -|b_sel_o |Управляющий сигнал мультиплексора для выбора второго операнда АЛУ | -|alu_op_o |Операция АЛУ | -|csr_op_o |Операция модуля CSR | -|csr_we_o |Разрешение на запись в CSR | -|mem_req_o |Запрос на доступ к памяти (часть интерфейса памяти) | -|mem_we_o |Сигнал разрешения записи в память, «write enable» (при равенстве нулю происходит чтение) | -|mem_size_o |Управляющий сигнал для выбора размера слова при чтении-записи в память (часть интерфейса памяти)| -|gpr_we_o |Сигнал разрешения записи в регистровый файл | -|wb_sel_o |Управляющий сигнал мультиплексора для выбора данных, записываемых в регистровый файл | -|illegal_instr_o |Сигнал о некорректной инструкции (на схеме не отмечен) | -|branch_o |Сигнал об инструкции условного перехода | -|jal_o |Сигнал об инструкции безусловного перехода jal | -|jalr_o |Сигнал об инструкции безусловного перехода jalr | -|mret_o |Сигнал об инструкции возврата из прерывания/исключения mret | +|Название сигнала| Пояснение | На каких опкодах может принять ненулевое значение (см. таблицу 6)| +|----------------|------------------------------------------------------------------------------------------------|--------------------------------------------------| +|fetched_instr_i |Инструкция для декодирования, считанная из памяти инструкций | — | +|a_sel_o |Управляющий сигнал мультиплексора для выбора первого операнда АЛУ | На всех кроме `MISC_MEM` и `SYSTEM` | +|b_sel_o |Управляющий сигнал мультиплексора для выбора второго операнда АЛУ | На всех кроме `MISC_MEM` и `SYSTEM` | +|alu_op_o |Операция АЛУ | На всех кроме `MISC_MEM` и `SYSTEM` | +|csr_op_o |Операция модуля CSR | Только на `SYSTEM` | +|csr_we_o |Разрешение на запись в CSR | Только на `SYSTEM` | +|mem_req_o |Запрос на доступ к памяти (часть интерфейса памяти) | На `LOAD` и `STORE` | +|mem_we_o |Сигнал разрешения записи в память, «write enable» (при равенстве нулю происходит чтение) | Только на `STORE` | +|mem_size_o |Управляющий сигнал для выбора размера слова при чтении-записи в память (часть интерфейса памяти)| На `LOAD` и `STORE` | +|gpr_we_o |Сигнал разрешения записи в регистровый файл | На всех кроме `MISC_MEM` | +|wb_sel_o |Управляющий сигнал мультиплексора для выбора данных, записываемых в регистровый файл | На всех кроме `MISC_MEM` | +|illegal_instr_o |Сигнал о некорректной инструкции (на схеме не отмечен) | На всех кроме `JAL`, `LUI`, `AUIPC` | +|branch_o |Сигнал об инструкции условного перехода | Только на `BRANCH` | +|jal_o |Сигнал об инструкции безусловного перехода jal | Только на `JAL` | +|jalr_o |Сигнал об инструкции безусловного перехода jalr | Только на `JALR` | +|mret_o |Сигнал об инструкции возврата из прерывания/исключения mret | Только на `SYSTEM` | _Таблица 5. Описание портов основного дешифратора._ From 60c6011fea8069abd2c46148cabde607170572af Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Wed, 10 Apr 2024 11:30:25 +0300 Subject: [PATCH 31/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B4=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B8=20=D0=BA=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8?= =?UTF-8?q?=D1=86=D0=B5=206?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/05. Main decoder/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index cf73843..bfa4c10 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -194,6 +194,8 @@ _Таблица 5. Описание портов основного дешифр |MISC-MEM|00011 |Не производить операцию | `-` | |SYSTEM |11100 |Записать в `rd` значение `csr`. Обновить значение `csr` с помощью `rs1`. (либо `mret`/`ecall`/`ebreak`)|`csr = csr_op(rs1); rd = csr` | +_Таблица 6. Описание кодов операций_ + ## Инструменты В первую очередь язык описания аппаратуры **SystemVerilog** – это язык. С помощью этого языка человек объясняет либо синтезатору какое он хочет получить устройство, либо симулятору – как он хочет это устройство проверить. Синтезатор – это программа, которая создает из логических элементов цифровое устройство по описанию, предоставляемому человеком. Синтезатору внутри **Vivado** нужно объяснить, что ты от него хочешь. Например, чтобы спросить дорогу у испанца, придется делать это на испанском языке, иначе он ничем не сможет помочь. Если ты знаешь испанский, то это можно сделать еще и разными способами. В **SystemVerilog** точно также – одно и то же устройство можно описать разным кодом, но результат синтеза будет одним и тем же. Однако, часто два разных кода одинаковые по смыслу могут синтезироваться в разную аппаратуру, хотя функционально они будут идентичны, но могут отличаться, например, скоростью работы. Или одни и те же специальные языковые конструкции могут применяться для синтезирования разных цифровых элементов. From bd202d6cf7228bca438fc62dc31d63f4b089ddbb Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Wed, 10 Apr 2024 11:39:56 +0300 Subject: [PATCH 32/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=94=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=83=D1=82=D0=BE=D1=87?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=20CSR?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/05. Main decoder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index bfa4c10..aa36f67 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -59,7 +59,7 @@ SYSTEM-инструкции используются для доступа к с Для будущей поддержки прерываний, нам потребуется декодировать инструкции обоих классов. -Обращение к регистрам статуса и контроля осуществляется шестью инструкциями стандартного расширения `Zicsr`. Каждая из этих инструкций (если у нее легальные поля) осуществляет запись в CS-регистры и регистровый файл. +Обращение к регистрам статуса и контроля осуществляется шестью инструкциями стандартного расширения `Zicsr`. Каждая из этих инструкций (если у нее легальные поля) осуществляет запись в CS-регистры и регистровый файл (блоки `Control Status Registers` и `Register File` на _рис. 1_ соответственно). Кроме того, для возврата управления основному потоку инструкций, нужна дополнительная `SYSTEM`-инструкция привилегированного набора команд `MRET`.

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 TTWcj|&zU0o4%AeSnV + + +
- ADD
- SUB
- XOR
- OR
- AND
- SRA
- SRL
- SLL
- LTS
- LTU
- GES
- GEU
- EQ
- NE
- SLTS
- SLTU
- IN
- JUMP
- LI
- ILL
- NOP
\ No newline at end of file diff --git a/.pic/Labs/board files/nexys_cobra_structure.drawio.svg b/.pic/Labs/board files/nexys_cobra_structure.drawio.svg new file mode 100644 index 0000000..6aae985 --- /dev/null +++ b/.pic/Labs/board files/nexys_cobra_structure.drawio.svg @@ -0,0 +1,4 @@ + + + +
operation
nexys_CYBERcobra
semseg
sw_i
rst_i
decoder
out
PC
operation
instr_mem
read_data_o
add_i
CYBERcobra
out_o

clk_i

16
/
32
/
8
/
[7:0]
16
/
8
/
32
/
[7:0]
[15:0]
out
PC
\ No newline at end of file diff --git a/Labs/04. Primitive programmable device/board files/README.md b/Labs/04. Primitive programmable device/board files/README.md index 98ffaf8..7618f4f 100644 --- a/Labs/04. Primitive programmable device/board files/README.md +++ b/Labs/04. Primitive programmable device/board files/README.md @@ -1,11 +1,67 @@ # Проверка работы CYBERcobra на ПЛИС -Если вы не понимаете, что лежит в этой папке, или если надо вспомнить, как прошить ПЛИС, можно воспользоваться [`этой инструкцией`](../../../Vivado%20Basics/Program%20nexys%20a7.md) +После того, как вы проверили на моделировании дизайн, вам необходимо проверить его работу на прототипе в ПЛИС. -Файл [`nexys_cybercobra_demo.sv`](nexys_cybercobra_demo.sv), который нужно запускать с [`демонстрационным файлом инструкций`](demo.mem), является демонстрацией возможностей кобры, реализующий лишь декодирование выходных значений в формат для отображения на семисегментных индикаторах, а вся логика работы реализована инструкциями в текстовом файле. +Инструкция по реализации прототипа описана [здесь](../../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md). -Сначала выводится приветствие `≡ALOHA≡`, меняя положение восьми правых переключателей, последовательно нажимая на кнопку `BTND` (на рисунке выделена синим цветом), можно включать или выключать `один` из выбранных сегментов. Кнопка `CPU RESET` (на рисунке выделена красным цветом) возвращает все исходное состояние. Попробуйте погасить все слово, а потом снова его зажечь. +На _рис. 1_ представлена схема прототипа в ПЛИС. -Файл [`nexys_cybercobra.sv`](nexys_cybercobra.sv), который нужно запускать с `вашим файлом инструкций`, так же реализует лишь декодирование выходных значений в формат для отображения на семисегментных индикаторах, но кнопка `BTND` задает тактирующий сигнал, следовательно, нажимая на нее, вы можете пошагово переходить по инструкциям, контролируя правильность работы устройства, для удобства можете в тестовом окружении выставить такое же входное значение, как переключатели sw[15:0] на плате. +![../../../.pic/Labs/board%20files/nexys_cobra_structure.drawio.svg](../../../.pic/Labs/board%20files/nexys_cobra_structure.drawio.svg) -![кобра](../../../.pic/Labs/board%20files/nexys_cobra.jpg) +_Рисунок 1. Структурная схема модуля `nexys_CYBERcobra`._ + +Прототип позволяет потактово исполнять программу, прошитую в память инструкций. Также прототип отображает операцию исполняемую в данный момент. + +> [!NOTE] +> Объект модуля `instr_mem` в модуле `CYBERcobra` **должен** называться `imem`. Т.е. строка создания сущности модуля должна выглядеть следующим образом: `instr_mem  imem(...)`. + +## Описание используемой периферии + +- ### Переключатели. + + Значение с переключателей `SW[15:0]` подаются напрямую на порт `sw_i` модуля дизайна. + +- ### Кнопки + + - `BTND` — при нажатии создает тактовый импульс, поступающий на порт тактирования `clk_i` модуля дизайна. + - `CPU_RESET` — соединен со входом `rst_i` модуля дизайна. + +- ### Светодиоды + + Светодиоды `LED[15:0]` отображают младшие 16 бит значения, выставленного в данный момент на порте `out_o` модуля дизайна. + +- ### Семисегментные индикаторы + + Семисегментные индикаторы разбиты на 3 блока (см. _рис. 1_): + + - `out` — отображают младшие 8 бит значения, выставленного в данный момент на порте `out_o` модуля дизайна, в виде шестнадцатеричного числа. + - `PC` — отображают в виде шестнадцатеричного числа младшие 8 бит программного счетчика, который подается на вход `addr_i` модуля памяти инструкций. + - `operation` — отображают [операцию](#операции-отображаемые-прототипом), исполняемую процессором на текущем такте. + +## Операции, отображаемые прототипом + +Соответствие типа инструкции отображаемой операции: + +1. Вычислительные — соответствует опкодам вычислительных операций АЛУ. +1. Инструкция загрузки константы — `LI` (от **l**oad **i**mmediate). +1. Инструкция загрузки из внешних устройств — `IN` (от **in**put). +1. Безусловный переход — `JUMP`. +1. Инструкций условного перехода — соответствует опкодам операций сравнения АЛУ. + +Во время исполнения вычислительных инструкций и инструкций условного перехода могут встретиться нелегальные операции (отображается как `ILL`, от **ill**egal). Операция считается нелегальной в следующих случаях: + +- Если в поле инструкции, отвечающем за операция АЛУ, указана битовая последовательность, не входящая в диапазон допустимых значений. +- Если инструкция является вычислительной, но в поле инструкции, отвечающем за операция АЛУ, указана битовая последовательность, соответствующая операции, вычисляющей флаг. И обратный случай. + +Инструкция `0 0 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxx` отображается как `NOP` (от **n**o **op**eration). + +Соответствие операции ее отображению на семисегментных индикаторах представлено на _рис. 2_: + +!['../../../.pic/Labs/board%20files/nexys_cobra_operations.drawio.svg'](../../../.pic/Labs/board%20files/nexys_cobra_operations.drawio.svg) + +_Рисунок 2. Соответствие операции ее отображению на семисегментных индикаторах._ + + +## Демонстрационная программа + +В качестве демонстрационной программы, предлагается использовать [example.mem](../example.mem). Описание ее работы можно прочитать в разделе [#финальный обзор](../README.md#финальный-обзор). diff --git a/Labs/04. Primitive programmable device/board files/demo.mem b/Labs/04. Primitive programmable device/board files/demo.mem deleted file mode 100644 index c721581..0000000 --- a/Labs/04. Primitive programmable device/board files/demo.mem +++ /dev/null @@ -1,95 +0,0 @@ -00074221 -00000202 -10844001 -00119463 -10046001 -0006000c -0001400d -0000020e -0000002f -10b0400c -10b4400d -10b8400e -10bc400f -00100010 -00018011 -00001412 -00000073 -00000022 -00000043 -00000084 -00000105 -00000206 -00000407 -00000808 -00001009 -00001fea -2004000b -30040000 -30040000 -30040000 -30040000 -30040000 -30040000 -30040000 -30040000 -30040000 -7ea97ec0 -13ad400b -7c2c4520 -7c2c6540 -7c2c8560 -7c2ca580 -7c2cc5a0 -7c2ce5c0 -7c2d05e0 -7c2d2600 -13866014 -7c500200 -13864014 -7c500200 -13862014 -7c500200 -13860014 -7c500200 -1385e014 -7c500200 -1385c014 -7c500200 -1385a014 -7c500200 -13858014 -7c500200 -bc040400 -13066001 -bc0403c0 -13064001 -bc040380 -13062001 -bc040340 -13060001 -bc040300 -1305e001 -bc0402c0 -1305c001 -bc040280 -1305a001 -bc040240 -13058001 -bc040200 -12066001 -bc0401c0 -12064001 -bc040180 -12062001 -bc040140 -12060001 -bc040100 -1205e001 -bc0400c0 -1205c001 -bc040080 -1205a001 -bc040040 -12058001 -bc041760 diff --git a/Labs/04. Primitive programmable device/board files/nexys_a7_100t.xdc b/Labs/04. Primitive programmable device/board files/nexys_a7_100t.xdc index 7c1538a..1b7a70b 100644 --- a/Labs/04. Primitive programmable device/board files/nexys_a7_100t.xdc +++ b/Labs/04. Primitive programmable device/board files/nexys_a7_100t.xdc @@ -4,47 +4,47 @@ ## - 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}]; +set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 } [get_ports { clk_i }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz +create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {clk_i}]; #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] +set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports { sw_i[0] }]; #IO_L24N_T3_RS0_15 Sch=sw[0] +set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports { sw_i[1] }]; #IO_L3N_T0_DQS_EMCCLK_14 Sch=sw[1] +set_property -dict { PACKAGE_PIN M13 IOSTANDARD LVCMOS33 } [get_ports { sw_i[2] }]; #IO_L6N_T0_D08_VREF_14 Sch=sw[2] +set_property -dict { PACKAGE_PIN R15 IOSTANDARD LVCMOS33 } [get_ports { sw_i[3] }]; #IO_L13N_T2_MRCC_14 Sch=sw[3] +set_property -dict { PACKAGE_PIN R17 IOSTANDARD LVCMOS33 } [get_ports { sw_i[4] }]; #IO_L12N_T1_MRCC_14 Sch=sw[4] +set_property -dict { PACKAGE_PIN T18 IOSTANDARD LVCMOS33 } [get_ports { sw_i[5] }]; #IO_L7N_T1_D10_14 Sch=sw[5] +set_property -dict { PACKAGE_PIN U18 IOSTANDARD LVCMOS33 } [get_ports { sw_i[6] }]; #IO_L17N_T2_A13_D29_14 Sch=sw[6] +set_property -dict { PACKAGE_PIN R13 IOSTANDARD LVCMOS33 } [get_ports { sw_i[7] }]; #IO_L5N_T0_D07_14 Sch=sw[7] +set_property -dict { PACKAGE_PIN T8 IOSTANDARD LVCMOS18 } [get_ports { sw_i[8] }]; #IO_L24N_T3_34 Sch=sw[8] +set_property -dict { PACKAGE_PIN U8 IOSTANDARD LVCMOS18 } [get_ports { sw_i[9] }]; #IO_25_34 Sch=sw[9] +set_property -dict { PACKAGE_PIN R16 IOSTANDARD LVCMOS33 } [get_ports { sw_i[10] }]; #IO_L15P_T2_DQS_RDWR_B_14 Sch=sw[10] +set_property -dict { PACKAGE_PIN T13 IOSTANDARD LVCMOS33 } [get_ports { sw_i[11] }]; #IO_L23P_T3_A03_D19_14 Sch=sw[11] +set_property -dict { PACKAGE_PIN H6 IOSTANDARD LVCMOS33 } [get_ports { sw_i[12] }]; #IO_L24P_T3_35 Sch=sw[12] +set_property -dict { PACKAGE_PIN U12 IOSTANDARD LVCMOS33 } [get_ports { sw_i[13] }]; #IO_L20P_T3_A08_D24_14 Sch=sw[13] +set_property -dict { PACKAGE_PIN U11 IOSTANDARD LVCMOS33 } [get_ports { sw_i[14] }]; #IO_L19N_T3_A09_D25_VREF_14 Sch=sw[14] +set_property -dict { PACKAGE_PIN V10 IOSTANDARD LVCMOS33 } [get_ports { sw_i[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] +set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 } [get_ports { led_o[0] }]; #IO_L18P_T2_A24_15 Sch=led[0] +set_property -dict { PACKAGE_PIN K15 IOSTANDARD LVCMOS33 } [get_ports { led_o[1] }]; #IO_L24P_T3_RS1_15 Sch=led[1] +set_property -dict { PACKAGE_PIN J13 IOSTANDARD LVCMOS33 } [get_ports { led_o[2] }]; #IO_L17N_T2_A25_15 Sch=led[2] +set_property -dict { PACKAGE_PIN N14 IOSTANDARD LVCMOS33 } [get_ports { led_o[3] }]; #IO_L8P_T1_D11_14 Sch=led[3] +set_property -dict { PACKAGE_PIN R18 IOSTANDARD LVCMOS33 } [get_ports { led_o[4] }]; #IO_L7P_T1_D09_14 Sch=led[4] +set_property -dict { PACKAGE_PIN V17 IOSTANDARD LVCMOS33 } [get_ports { led_o[5] }]; #IO_L18N_T2_A11_D27_14 Sch=led[5] +set_property -dict { PACKAGE_PIN U17 IOSTANDARD LVCMOS33 } [get_ports { led_o[6] }]; #IO_L17P_T2_A14_D30_14 Sch=led[6] +set_property -dict { PACKAGE_PIN U16 IOSTANDARD LVCMOS33 } [get_ports { led_o[7] }]; #IO_L18P_T2_A12_D28_14 Sch=led[7] +set_property -dict { PACKAGE_PIN V16 IOSTANDARD LVCMOS33 } [get_ports { led_o[8] }]; #IO_L16N_T2_A15_D31_14 Sch=led[8] +set_property -dict { PACKAGE_PIN T15 IOSTANDARD LVCMOS33 } [get_ports { led_o[9] }]; #IO_L14N_T2_SRCC_14 Sch=led[9] +set_property -dict { PACKAGE_PIN U14 IOSTANDARD LVCMOS33 } [get_ports { led_o[10] }]; #IO_L22P_T3_A05_D21_14 Sch=led[10] +set_property -dict { PACKAGE_PIN T16 IOSTANDARD LVCMOS33 } [get_ports { led_o[11] }]; #IO_L15N_T2_DQS_DOUT_CSO_B_14 Sch=led[11] +set_property -dict { PACKAGE_PIN V15 IOSTANDARD LVCMOS33 } [get_ports { led_o[12] }]; #IO_L16P_T2_CSI_B_14 Sch=led[12] +set_property -dict { PACKAGE_PIN V14 IOSTANDARD LVCMOS33 } [get_ports { led_o[13] }]; #IO_L22N_T3_A04_D20_14 Sch=led[13] +set_property -dict { PACKAGE_PIN V12 IOSTANDARD LVCMOS33 } [get_ports { led_o[14] }]; #IO_L20N_T3_A07_D23_14 Sch=led[14] +set_property -dict { PACKAGE_PIN V11 IOSTANDARD LVCMOS33 } [get_ports { led_o[15] }]; #IO_L21N_T3_DQS_A06_D22_14 Sch=led[15] -### RGB LEDs +## 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 @@ -53,30 +53,30 @@ set_property -dict { PACKAGE_PIN V10 IOSTANDARD LVCMOS33 } [get_ports { SW[15] #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] +set_property -dict { PACKAGE_PIN T10 IOSTANDARD LVCMOS33 } [get_ports { ca_o }]; #IO_L24N_T3_A00_D16_14 Sch=ca +set_property -dict { PACKAGE_PIN R10 IOSTANDARD LVCMOS33 } [get_ports { cb_o }]; #IO_25_14 Sch=cb +set_property -dict { PACKAGE_PIN K16 IOSTANDARD LVCMOS33 } [get_ports { cc_o }]; #IO_25_15 Sch=cc +set_property -dict { PACKAGE_PIN K13 IOSTANDARD LVCMOS33 } [get_ports { cd_o }]; #IO_L17P_T2_A26_15 Sch=cd +set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { ce_o }]; #IO_L13P_T2_MRCC_14 Sch=ce +set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf_o }]; #IO_L19P_T3_A10_D26_14 Sch=cf +set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg_o }]; #IO_L4P_T0_D04_14 Sch=cg +set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp_o }]; #IO_L19N_T3_A21_VREF_15 Sch=dp +set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an_o[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0] +set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an_o[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1] +set_property -dict { PACKAGE_PIN T9 IOSTANDARD LVCMOS33 } [get_ports { an_o[2] }]; #IO_L24P_T3_A01_D17_14 Sch=an[2] +set_property -dict { PACKAGE_PIN J14 IOSTANDARD LVCMOS33 } [get_ports { an_o[3] }]; #IO_L19P_T3_A22_15 Sch=an[3] +set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { an_o[4] }]; #IO_L8N_T1_D12_14 Sch=an[4] +set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { an_o[5] }]; #IO_L14P_T2_SRCC_14 Sch=an[5] +set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { an_o[6] }]; #IO_L23P_T3_35 Sch=an[6] +set_property -dict { PACKAGE_PIN U13 IOSTANDARD LVCMOS33 } [get_ports { an_o[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 C12 IOSTANDARD LVCMOS33 } [get_ports { arstn_i }]; #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 +# set_property -dict { PACKAGE_PIN M17 IOSTANDARD LVCMOS33 } [get_ports { btnr_i }]; #IO_L10N_T1_D15_14 Sch=btnr +set_property -dict { PACKAGE_PIN P18 IOSTANDARD LVCMOS33 } [get_ports { btnd_i }]; #IO_L9N_T1_DQS_D13_14 Sch=btnd ##Pmod Headers @@ -208,4 +208,4 @@ set_property -dict { PACKAGE_PIN P18 IOSTANDARD LVCMOS33 } [get_ports { BTND } #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 \ No newline at end of file +#set_property -dict { PACKAGE_PIN L13 IOSTANDARD LVCMOS33 } [get_ports { QSPI_CSN }]; #IO_L6P_T0_FCS_B_14 Sch=qspi_csn diff --git a/Labs/04. Primitive programmable device/board files/nexys_cybercobra.sv b/Labs/04. Primitive programmable device/board files/nexys_cybercobra.sv index acd1107..7d14ae3 100644 --- a/Labs/04. Primitive programmable device/board files/nexys_cybercobra.sv +++ b/Labs/04. Primitive programmable device/board files/nexys_cybercobra.sv @@ -2,91 +2,443 @@ * Project Name : Architectures of Processor Systems (APS) lab work * Organization : National Research University of Electronic Technology (MIET) * Department : Institute of Microdevices and Control Systems -* Author(s) : Nikita Bulavin -* Email(s) : nekkit6@edu.miet.ru +* Author(s) : Alexander Kharlamov +* Email(s) : sasha_xarlamov@org.miet.ru See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details. * ------------------------------------------------------------------------------ */ -module nexys_CYBERcobra_dz( - input CLK100, - input resetn, - input BTND, - input [15:0] SW, - output CA, CB, CC, CD, CE, CF, CG, - output [7:0] AN +typedef enum { + INSTR_ALU , // branch and computational + INSTR_LI , // const load + INSTR_IN , // periphery load + INSTR_JUMP , + INSTR_NOP // ws == 3 +} Instruction_type; + +typedef enum { + CH_0 = 0, + CH_1, + CH_2, + CH_3, + CH_4, + CH_5, + CH_6, + CH_7, + CH_8, + CH_9, + CH_A, + CH_b, + CH_c, + CH_d, + CH_E, + CH_F, + CH_G, + CH_L, + CH_n, + CH_o, + CH_r, + CH_S, + CH_t, + CH_u, + CH_X, + CH_P, + CH_J, + CH_q, + CH_i, + CH_m, + + CH_SPACE +} Char; + +typedef struct { + logic ca; + logic cb; + logic cc; + logic cd; + logic ce; + logic cf; + logic cg; + logic dp; +} Semseg; + +module nexys_CYBERcobra( + input logic clk_i, + input logic arstn_i, + input logic [15:0] sw_i, + input logic btnd_i, + output logic [15:0] led_o, + output logic ca_o, + output logic cb_o, + output logic cc_o, + output logic cd_o, + output logic ce_o, + output logic cf_o, + output logic cg_o, + output logic dp_o, + output logic [ 7:0] an_o +); + + logic [31:0] cobra_out; + + logic btnd_sync; + sync sync ( + .clk_i , + .data_i (btnd_i ), + .data_o (btnd_sync) + ); + logic btnd_debounce; + debounce debounce ( + .clk_i , + .arstn_i , + .data_i (btnd_sync ), + .data_o (btnd_debounce) + ); + logic bufg_clk; + BUFG dut_bufg( + .I (btnd_debounce), + .O (bufg_clk ) + ); + + CYBERcobra dut ( + .clk_i (bufg_clk ), + .rst_i (!arstn_i ), + .sw_i (sw_i ), + .out_o (cobra_out ) + ); + + logic [31:0] instr_addr; + logic [31:0] instr; + assign instr_addr = dut.imem.addr_i; + assign instr = dut.imem.read_data_o; + + import alu_opcodes_pkg::*; + + Instruction_type instr_type; + logic [ALU_OP_WIDTH-1:0] alu_op; + logic illegal_instr; + nexys_CYBERcobra_decoder nexys_CYBERcobra_decoder ( + .instr_i (instr ), + .instr_type_o (instr_type ), + .alu_op_o (alu_op ), + .illegal_instr_o (illegal_instr) + ); + + Char op_chars[0:3]; + always_comb begin + op_chars = '{4{CH_SPACE}}; + + case (instr_type) + INSTR_ALU: + case (alu_op) + ALU_ADD : op_chars[0:2] = '{CH_A, CH_d, CH_d}; + ALU_SUB : op_chars[0:2] = '{CH_S, CH_u, CH_b}; + ALU_XOR : op_chars[0:2] = '{CH_X, CH_o, CH_r}; + ALU_OR : op_chars[0:1] = '{CH_o, CH_r}; + ALU_AND : op_chars[0:2] = '{CH_A, CH_n, CH_d}; + ALU_SRA : op_chars[0:2] = '{CH_S, CH_r, CH_A}; + ALU_SRL : op_chars[0:2] = '{CH_S, CH_r, CH_L}; + ALU_SLL : op_chars[0:2] = '{CH_S, CH_L, CH_L}; + ALU_LTS : op_chars[0:2] = '{CH_L, CH_t, CH_S}; + ALU_LTU : op_chars[0:2] = '{CH_L, CH_t, CH_u}; + ALU_GES : op_chars[0:2] = '{CH_G, CH_E, CH_S}; + ALU_GEU : op_chars[0:2] = '{CH_G, CH_E, CH_u}; + ALU_EQ : op_chars[0:1] = '{CH_E, CH_q}; + ALU_NE : op_chars[0:1] = '{CH_n, CH_E}; + ALU_SLTS: op_chars = '{CH_S, CH_L, CH_t, CH_S}; + ALU_SLTU: op_chars = '{CH_S, CH_L, CH_t, CH_u}; + + default : ; + endcase + INSTR_LI : op_chars[0:1] = '{CH_L, CH_i}; + INSTR_JUMP: op_chars = '{CH_J, CH_u, CH_m, CH_P}; + INSTR_NOP : op_chars[0:2] = '{CH_n, CH_o, CH_P}; + INSTR_IN : op_chars[0:1] = '{CH_i, CH_n}; + endcase + end + + Char all_chars[0:7]; + assign all_chars[0:3] = { + Char'(led_o[7:4]) , + Char'(led_o[3:0]) , + Char'(instr_addr[7:4]), + Char'(instr_addr[3:0]) + }; + localparam Char ILL_INSTR_MSG[0:3] = '{CH_i, CH_L, CH_L, CH_SPACE}; + assign all_chars[4:7] = illegal_instr ? ILL_INSTR_MSG : op_chars; + + Semseg all_semsegs[0:7]; + for (genvar semseg_num = 0; semseg_num < 8; ++semseg_num) begin : CHAR2SEMSEG_GEN + char2semseg char2semseg ( + .char_i (all_chars [semseg_num]), + .semseg_o (all_semsegs[semseg_num]) ); - - CYBERcobra dut( - .clk_i(btn), - .rst_i(!resetn), - .sw_i(SW[15:0]), - .out_o(out) - ); - -localparam pwm = 1000; -reg [9:0] counter; -reg [3:0] semseg; -reg [7:0] ANreg; -reg CAr, CBr, CCr, CDr, CEr, CFr, CGr; -reg btn; -wire [31:0] out; - -assign AN[7:0] = ANreg[7:0]; -assign {CA, CB, CC, CD, CE, CF, CG} = {CAr, CBr, CCr, CDr, CEr, CFr, CGr}; + end -always @(posedge CLK100) begin - if (!resetn) begin - counter <= 'b0; - ANreg[7:0] <= 8'b11111111; - {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111111; - btn <= BTND; + Semseg all_semsegs_dotted[0:7]; + assign all_semsegs_dotted[0] = all_semsegs[0]; + assign all_semsegs_dotted[2:7] = all_semsegs[2:7]; + assign all_semsegs_dotted[1].ca = all_semsegs[1].ca; + assign all_semsegs_dotted[1].cb = all_semsegs[1].cb; + assign all_semsegs_dotted[1].cc = all_semsegs[1].cc; + assign all_semsegs_dotted[1].cd = all_semsegs[1].cd; + assign all_semsegs_dotted[1].ce = all_semsegs[1].ce; + assign all_semsegs_dotted[1].cf = all_semsegs[1].cf; + assign all_semsegs_dotted[1].cg = all_semsegs[1].cg; + assign all_semsegs_dotted[1].dp = 1'b0; + + Semseg current_semseg; + logic [7:0] an; + semseg_one2many semseg_one2many ( + .clk100m_i (clk_i ), + .arstn_i (arstn_i ), + .all_semsegs_i (all_semsegs_dotted), + .current_semseg_o (current_semseg ), + .an_o (an ) + ); + + assign ca_o = current_semseg.ca; + assign cb_o = current_semseg.cb; + assign cc_o = current_semseg.cc; + assign cd_o = current_semseg.cd; + assign ce_o = current_semseg.ce; + assign cf_o = current_semseg.cf; + assign cg_o = current_semseg.cg; + assign dp_o = current_semseg.dp; + + assign an_o = an; + + assign led_o = cobra_out[15:0]; + +endmodule + +module nexys_CYBERcobra_decoder + import alu_opcodes_pkg::*; +( + input logic [31:0] instr_i, + output Instruction_type instr_type_o, + output logic [ALU_OP_WIDTH-1:0] alu_op_o, + output logic illegal_instr_o +); + + logic j; + logic b; + logic [1:0] ws; + + assign j = instr_i[31]; + assign b = instr_i[30]; + assign ws = instr_i[29:28]; + + logic is_branch_instr; + assign is_branch_instr = b; + + always_comb begin + instr_type_o = INSTR_NOP; + + if (j) begin + instr_type_o = INSTR_JUMP; + end else if (b) begin + instr_type_o = INSTR_ALU; + end else begin + case (ws) + 2'd0: instr_type_o = INSTR_LI; + 2'd1: instr_type_o = INSTR_ALU; + 2'd2: instr_type_o = INSTR_IN; + 2'd3: instr_type_o = INSTR_NOP; + endcase end - else begin - btn <= BTND; - 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[3]; - 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]: semseg <= out[3 : 0]; - ANreg[1]: semseg <= out[7 : 4]; - ANreg[2]: semseg <= out[11: 8]; - ANreg[3]: semseg <= out[15:12]; - ANreg[4]: semseg <= out[19:16]; - ANreg[5]: semseg <= out[23:20]; - ANreg[6]: semseg <= out[27:24]; - ANreg[7]: semseg <= out[31:28]; - 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; - default: {CAr,CBr,CCr,CDr, CEr, CFr, CGr} <= 7'b0111111; - endcase - end + end + + assign alu_op_o = instr_i[27:23]; + + import alu_opcodes_pkg::*; + + typedef enum { + ALU_OP_BRANCH, + ALU_OP_COMPUTATIONAL, + ALU_OP_ILLEGAL + } Alu_op_type; + Alu_op_type alu_op_type; + always_comb begin + alu_op_type = ALU_OP_ILLEGAL; + + case (alu_op_o) inside + ALU_LTS, + ALU_LTU, + ALU_GES, + ALU_GEU, + ALU_EQ , + ALU_NE : alu_op_type = ALU_OP_BRANCH; + + ALU_ADD , + ALU_SUB , + ALU_XOR , + ALU_OR , + ALU_AND , + ALU_SRA , + ALU_SRL , + ALU_SLL , + ALU_SLTS, + ALU_SLTU: alu_op_type = ALU_OP_COMPUTATIONAL; + + default : alu_op_type = ALU_OP_ILLEGAL; + endcase + end + + assign illegal_instr_o = (instr_type_o == INSTR_ALU) && ((alu_op_type == ALU_OP_ILLEGAL) || + ((alu_op_type == ALU_OP_BRANCH) ^ is_branch_instr)); +endmodule + +module char2semseg #( + parameter bit HEX_ONLY = 1'b0 +) ( + input Char char_i, + output Semseg semseg_o +); + + localparam bit [6:0] BLANK = '1; + + logic [6:0] semseg; + always_comb begin + case (char_i) + CH_0 : semseg = ~7'h3F; + CH_1 : semseg = ~7'h06; + CH_2 : semseg = ~7'h5B; + CH_3 : semseg = ~7'h4F; + CH_4 : semseg = ~7'h66; + CH_5 : semseg = ~7'h6D; + CH_6 : semseg = ~7'h7D; + CH_7 : semseg = ~7'h07; + CH_8 : semseg = ~7'h7F; + CH_9 : semseg = ~7'h6F; + CH_A : semseg = ~7'h5F; + CH_b : semseg = ~7'h7C; + CH_c : semseg = ~7'h58; + CH_d : semseg = ~7'h5E; + CH_E : semseg = ~7'h79; + CH_F : semseg = ~7'h71; + CH_G : semseg = ~7'h3D; + CH_L : semseg = ~7'h38; + CH_n : semseg = ~7'h54; + CH_o : semseg = ~7'h5C; + CH_r : semseg = ~7'h50; + CH_S : semseg = ~7'h64; + CH_t : semseg = ~7'h78; + CH_u : semseg = ~7'h1C; + CH_X : semseg = ~7'h76; + CH_P : semseg = ~7'h73; + CH_J : semseg = ~7'h1E; + CH_q : semseg = ~7'h67; + CH_i : semseg = ~7'h30; + CH_m : semseg = ~7'h77; + default : semseg = BLANK; + endcase + end + + assign semseg_o.ca = semseg[0]; + assign semseg_o.cb = semseg[1]; + assign semseg_o.cc = semseg[2]; + assign semseg_o.cd = semseg[3]; + assign semseg_o.ce = semseg[4]; + assign semseg_o.cf = semseg[5]; + assign semseg_o.cg = semseg[6]; + assign semseg_o.dp = 1'b1; + +endmodule + +module semseg_one2many #( + parameter int unsigned SEMSEGS_NUM = 8 +) ( + input Semseg all_semsegs_i[0:SEMSEGS_NUM-1], + input logic clk100m_i, + input logic arstn_i, + output Semseg current_semseg_o, + output logic [7:0] an_o +); + logic clk_i; + assign clk_i = clk100m_i; + + localparam int COUNTER_WIDTH = 10; + logic [COUNTER_WIDTH-1:0] counter_next; + logic [COUNTER_WIDTH-1:0] counter_ff; + assign counter_next = counter_ff + COUNTER_WIDTH'('b1); + always_ff @(posedge clk_i or negedge arstn_i) begin + if (!arstn_i) counter_ff <= '0; + else counter_ff <= counter_next; + end + + logic [7:0] an_ff; + logic [7:0] an_next; + logic an_en; + assign an_next = {an_ff[$left(an_ff)-1:0], an_ff[$left(an_ff)]}; + assign an_en = ~|counter_ff; + always_ff @(posedge clk_i or negedge arstn_i) begin + if (!arstn_i) an_ff <= ~8'b1; + else if (an_en) an_ff <= an_next; + end + + Semseg current_semseg; + always_comb begin + unique case (1'b0) + an_ff[0]: current_semseg = all_semsegs_i[7]; + an_ff[1]: current_semseg = all_semsegs_i[6]; + an_ff[2]: current_semseg = all_semsegs_i[5]; + an_ff[3]: current_semseg = all_semsegs_i[4]; + an_ff[4]: current_semseg = all_semsegs_i[3]; + an_ff[5]: current_semseg = all_semsegs_i[2]; + an_ff[6]: current_semseg = all_semsegs_i[1]; + an_ff[7]: current_semseg = all_semsegs_i[0]; + endcase + end + + assign current_semseg_o = current_semseg; + + assign an_o = an_ff; + +endmodule + +module debounce #( + parameter int unsigned MAX_COUNT = 10000 +) ( + input logic clk_i, + input logic arstn_i, + input logic data_i, + output logic data_o +); + + localparam int COUNTER_WIDTH = $clog2(MAX_COUNT); + logic [COUNTER_WIDTH-1:0] counter_next; + logic [COUNTER_WIDTH-1:0] counter_ff; + assign counter_next = (data_o != data_i) ? counter_ff - COUNTER_WIDTH'('b1) : + COUNTER_WIDTH'(MAX_COUNT); + always_ff @(posedge clk_i or negedge arstn_i) begin + if (!arstn_i) counter_ff <= COUNTER_WIDTH'(MAX_COUNT); + else counter_ff <= counter_next; + end + + always_ff @(posedge clk_i or negedge arstn_i) begin + if (!arstn_i) data_o <= '0; + else if (~|counter_ff) data_o <= data_i; end endmodule + +module sync #( + parameter int unsigned SYNC_STAGES = 3 +) ( + input logic clk_i, + input logic data_i, + output logic data_o +); + + logic [SYNC_STAGES-1:0] sync_buffer_ff; + logic [SYNC_STAGES-1:0] sync_buffer_next; + assign sync_buffer_next = {sync_buffer_ff[$left(sync_buffer_ff)-1:0], data_i}; + always_ff @(posedge clk_i) begin + sync_buffer_ff <= sync_buffer_next; + end + + assign data_o = sync_buffer_ff[$left(sync_buffer_ff)]; + +endmodule diff --git a/Labs/04. Primitive programmable device/board files/nexys_cybercobra_demo.sv b/Labs/04. Primitive programmable device/board files/nexys_cybercobra_demo.sv deleted file mode 100644 index 91c83e3..0000000 --- a/Labs/04. Primitive programmable device/board files/nexys_cybercobra_demo.sv +++ /dev/null @@ -1,85 +0,0 @@ -/* ----------------------------------------------------------------------------- -* Project Name : Architectures of Processor Systems (APS) lab work -* Organization : National Research University of Electronic Technology (MIET) -* Department : Institute of Microdevices and Control Systems -* Author(s) : Nikita Bulavin -* Email(s) : nekkit6@edu.miet.ru - -See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details. -* ------------------------------------------------------------------------------ -*/ -module nexys_CYBERcobra( - input CLK100, - input resetn, - input BTND, - input [15:0] SW, - output CA, CB, CC, CD, CE, CF, CG, - output [7:0] AN - ); - - CYBERcobra dut( - .clk_i(CLK100), - .rst_i(!resetn), - .sw_i({7'b0,splash,SW[7:0]}), - .out_o(out) - ); - -localparam pwm = 1000; -reg [9:0] counter; -reg [3:0] semseg; -reg [7:0] ANreg; -reg CAr, CBr, CCr, CDr, CEr, CFr, CGr; -reg [3:0] btn; -reg [10:0] btn_reg; -wire splash; -wire [31:0] out; - -assign AN[7:0] = ANreg[7:0]; -assign {CA, CB, CC, CD, CE, CF, CG} = {CAr, CBr, CCr, CDr, CEr, CFr, CGr}; -assign splash = ((btn == 4'b1111) ^ btn_reg[10]) && (btn == 4'b1111); - -always @(posedge CLK100) begin - if (!resetn) begin - counter <= 'b0; - ANreg[7:0] <= 8'b11111111; - {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111111; - btn <= 4'b0; - btn_reg <= 0; - end - else begin - btn <= (btn << 1'b1) + BTND; - btn_reg <= (btn_reg << 1'b1) + (btn == 4'b1111); - 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[3]; - 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]: semseg <= out[3 : 0]; - ANreg[1]: semseg <= out[7 : 4]; - ANreg[2]: semseg <= out[11: 8]; - ANreg[3]: semseg <= out[15:12]; - ANreg[4]: semseg <= out[19:16]; - ANreg[5]: semseg <= out[23:20]; - ANreg[6]: semseg <= out[27:24]; - ANreg[7]: semseg <= out[31:28]; - endcase - case (semseg) - 4'h1: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110001; //L - 4'h3: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0110110; //? - 4'h8: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000001; //O - 4'hA: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0001000; //A - 4'hC: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1001000; //H - default: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111111; // - endcase - end - end - -endmodule From 1da4c4fd17aecd599d098533f3deb66bc270d08c Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 19 Mar 2024 11:59:03 +0300 Subject: [PATCH 07/32] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D1=81=D1=8B=D0=BB=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B2=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B5=20=D0=BB?= =?UTF-8?q?=D0=B0=D0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/README.md | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Labs/README.md b/Labs/README.md index d7c28ef..a7e7873 100644 --- a/Labs/README.md +++ b/Labs/README.md @@ -22,10 +22,10 @@ - [10. Подсистема прерывания (IC)](#10-подсистема-прерывания-ic) - [11. Интеграция подсистемы прерывания](#11-интеграция-подсистемы-прерывания) - [12. Увеличение количества источников прерываний с помощью дейзи-цепочки](#12-увеличение-количества-источников-прерываний-с-помощью-дейзи-цепочки) - - [12. Периферийные устройства (PU)](#12-периферийные-устройства-pu) - - [13. Программирование на языке высокого уровня](#13-программирование-на-языке-высокого-уровня) - - [14. Программатор](#14-программатор) - - [15. Оценка производительности](#15-оценка-производительности) + - [13. Периферийные устройства (PU)](#13-периферийные-устройства-pu) + - [14. Программирование на языке высокого уровня](#14-программирование-на-языке-высокого-уровня) + - [15. Программатор](#15-программатор) + - [16. Оценка производительности](#16-оценка-производительности) ## Полезное @@ -106,17 +106,17 @@ ## 1. Сумматор. SystemVerilog (Adder) -![../.pic/Labs/l1.png](../.pic/Labs/lab_01_adder.drawio.svg) +![../.pic/Labs/lab_01_adder.drawio.svg](../.pic/Labs/lab_01_adder.drawio.svg) На первой лабораторной работе изучаются базовые конструкции языка описания аппаратуры SystemVerilog, с помощью которого разрабатывается цифровой сумматор из примитивных логических вентилей, который, в последствии, конфигурируется в ПЛИС и его работа проверяется на отладочном стенде. ## 2. Арифметико-логическое устройство (ALU) -![../.pic/Labs/l2.png](../.pic/Labs/lab_02_alu.drawio.svg) +![../.pic/Labs/lab_02_alu.drawio.svg](../.pic/Labs/lab_02_alu.drawio.svg) На второй лабораторной изучаются новые конструкции языка SystemVerilog, на основе которых разрабатывается блок арифметико-логического устройства (АЛУ). АЛУ — это устройство, на входы которого подаются операнды, над которыми нужно выполнить некоторую операцию (сложение, вычитание и тому подобное) и код операции, которую нужно выполнить, а на выходе появляется результат этой операции. Проще говоря АЛУ - это "калькулятор" процессора. ## 3. Регистровый файл и внешняя память (RF) -![../.pic/Labs/l3.png](../.pic/Labs/lab_03_rf.drawio.svg) +![../.pic/Labs/lab_03_rf.drawio.svg](../.pic/Labs/lab_03_rf.drawio.svg) На третьей лабораторной разрабатываются элементы памяти для будущего процессора: память команд, память данных и регистровый файл. В памяти команд будет храниться программа, которую будет выполнять процессор. В памяти данных хранятся данные, которые будут обрабатываться процессором. Регистровый файл — это маленькая память, тоже с данными, которые могут быть поданы непосредственно на АЛУ. Особенность RISC-архитектур в том, что данные перед обработкой необходимо перенести из памяти данных в регистровый файл, только после этого к ним можно применять различные операции. ## 4. Простейшее программируемое устройство (PPD) @@ -126,12 +126,12 @@ ## 5. Основной дешифратор команд (MD) -![../.pic/Labs/l5.png](../.pic/Labs/lab_05_md.drawio.svg) +![../.pic/Labs/lab_05_md.drawio.svg](../.pic/Labs/lab_05_md.drawio.svg) Пятая лабораторная посвящена разработке устройства управления – основному дешифратору команд. Функция основного дешифратора — получать на вход коды выполняемых операций и преобразовывать их в управляющие сигналы для всех блоков процессора (АЛУ, память, регистровый файл, мультиплексоры). Работа требует внимательности в реализации, а ее результат проверяется заранее подготовленными автоматическими тестами. ## 6. Тракт данных (DP) -![../.pic/Labs/l6.png](../.pic/Labs/lab_06_datapath.drawio.svg) +![../.pic/Labs/lab_06_datapath.drawio.svg](../.pic/Labs/lab_06_datapath.drawio.svg) Разработанные блоки объединяются, образуя тракт данных, управляемый основным дешифратором команд. Результатом шестой лабораторной работы является однотактный процессор, с архитектурой RISC-V, поддерживающий стандартный набор целочисленных инструкций RV32I. В качестве проверки на процессоре запускаются программы, заранее написанные на языке ассемблера RISC-V. Сравнивается результат полученный на симуляторе и на разработанном процессоре. ## 7. Внешняя память @@ -142,7 +142,7 @@ ## 8. Блог загрузки и сохранения данных (LSU) -![../.pic/Labs/l7.png](../.pic/Labs/lab_08_lsu.drawio.svg) +![../.pic/Labs/lab_08_lsu.drawio.svg](../.pic/Labs/lab_08_lsu.drawio.svg) Для корректного исполнения инструкций `LB`, `LBU`, `SB`, `LH`, `LHU`, `SH` мало использовать память с побайтовой записью. Необходимо также уметь управлять этой памятью, определенным образом подготавливать данные как для записи в память данный, так и для записи в регистровый файл, а также следить за тем, чтобы за время работы с памятью, программа процессора не начала исполняться дальше. Все эти задачи возлагаются на специальный модуль, который называется **Блок загрузки и сохранения** (**Load and Store Unit**, **LSU**) @@ -150,11 +150,11 @@ Вспомогательная лабораторная работа по интеграции реализованного ранее блока загрузки и сохранения, а также новой памяти данных в модуль `riscv_unit`. -![../.pic/Labs/l8.png](../.pic/Labs/lab_09_lsu_integration.drawio.svg) +![../.pic/Labs/lab_09_lsu_integration.drawio.svg](../.pic/Labs/lab_09_lsu_integration.drawio.svg) ## 10. Подсистема прерывания (IC) -![../.pic/Labs/l8.png](../.pic/Labs/lab_10_irq.drawio.svg) +![../.pic/Labs/lab_10_irq.drawio.svg](../.pic/Labs/lab_10_irq.drawio.svg) Одной из основных функций процессоров является возможность реагировать на внешние события (дернуть мышку, нажать кнопку и т.п.), автоматически запуская, при их возникновении, соответствующие программы. В данной лабораторной создается и подсистема прерывания, к которой относятся контроллер прерываний с циклическим опросом и блок регистров статуса и управления. @@ -162,7 +162,7 @@ Вспомогательная лабораторная работа по интеграции реализованной ранее подсистемы прерывания. -![../.pic/Labs/l9.png](../.pic/Labs/lab_11_irq_integration.drawio.svg) +![../.pic/Labs/lab_11_irq_integration.drawio.svg](../.pic/Labs/lab_11_irq_integration.drawio.svg) ## 12. Увеличение количества источников прерываний с помощью дейзи-цепочки @@ -170,19 +170,19 @@ ![../.pic/Labs/lab_12_daisy_chain/fig_02.drawio.svg](../.pic/Labs/lab_12_daisy_chain/fig_02.drawio.svg) -## 12. Периферийные устройства (PU) +## 13. Периферийные устройства (PU) -![../.pic/Labs/l9.png](../.pic/Labs/lab_13_peripheral_units.drawio.svg) +![../.pic/Labs/lab_13_peripheral_units.drawio.svg](../.pic/Labs/lab_13_peripheral_units.drawio.svg) В данной лабораторной создаются и подключаются к общей шине и подсистеме прерывания контроллеры периферийных устройств: переключатели, светодиоды, клавиатура, семисегментные дисплеи а также контроллер uart. -## 13. Программирование на языке высокого уровня +## 14. Программирование на языке высокого уровня -![../.pic/Labs/l10.png](../.pic/Labs/lab_13_programming.png) +![../.pic/Labs/lab_14_programming.png](../.pic/Labs/lab_14_programming.png) В рамках данной лабораторной настраивается компилятор GCC для RISC-V и для разработанной системы пишется программное обеспечение на языке программирования C++. -## 14. Программатор +## 15. Программатор До этого момента, исполняемая процессором программа попадала в память инструкций через магический вызов `$readmemh`. Однако реальные микроконтроллеры не обладают такими возможностями. Программа из внешнего мира попадает в них посредством так называемого **программатора** — устройства, обеспечивающего запись программы в память микроконтроллера. Программатор записывает данные в постоянное запоминающее устройство (ПЗУ). Для того, чтобы программа попала из ПЗУ в память инструкций, после запуска контроллера сперва начинает исполняться **загрузчик** (**bootloader**) — небольшая программа, вшитая в память микроконтроллера на этапе изготовления, которая отвечает за первичную инициализацию и подготовку микроконтроллера к выполнению основной программы (включая её перенос из ПЗУ в память инструкций). @@ -190,7 +190,7 @@ ![../.pic/Labs/lab_15_programming_device/fig_04.drawio.svg](../.pic/Labs/lab_15_programming_device.drawio.svg) -## 15. Оценка производительности +## 16. Оценка производительности На текущий момент мы создали процессорную систему, которая способна взаимодействовать с внешним миром посредством периферийных устройств ввода-вывода и программатора. Однако сложно понять, какое место данная система занимает в ряду уже существующих вычислительных систем. From 1441334c543b6b0b0249dea2898703f48a513cf6 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 19 Mar 2024 12:55:27 +0300 Subject: [PATCH 08/32] =?UTF-8?q?=D0=9B=D0=A04.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=80=D1=8F?= =?UTF-8?q?=D0=B4=D0=BA=D0=B0=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/04. Primitive programmable device/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Labs/04. Primitive programmable device/README.md b/Labs/04. Primitive programmable device/README.md index 8b33479..01632e9 100644 --- a/Labs/04. Primitive programmable device/README.md +++ b/Labs/04. Primitive programmable device/README.md @@ -344,7 +344,7 @@ endmodule 1. В `Design Sources` проекта с предыдущих лаб, создайте `SystemVerilog`-файл `cybercobra.sv`. 2. Опишите в нем модуль процессора с таким же именем и портами, как указано в [задании](#задание-по-реализации-процессора) (обратите внимание на регистр имени модуля). 1. В первую очередь, необходимо создать счетчик команд и все вспомогательные провода. При создании, **следите за разрядностью**. - 2. Затем, необходимо создать экземпляры модулей: памяти инструкции, АЛУ, регистрового файла и сумматора. При подключении сигналов сумматора, надо **обязательно** надо подать нулевое значение на входной бит переноса. Выходной бит переноса подключать не обязательно. + 2. Затем, необходимо создать экземпляры модулей: памяти инструкции, АЛУ, регистрового файла и сумматора. При подключении сигналов сумматора, надо **обязательно** надо подать нулевое значение на входной бит переноса. Выходной бит переноса подключать не обязательно. Объекту памяти инструкций нужно дать имя `imem`. 3. После этого, необходимо описать оставшуюся логику: 1. Программного счетчика 2. Сигнала управления мультиплексором, выбирающим слагаемое для программного счетчика From 3d9901eec4cc75acfbe319e6901db15bae82bec1 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 19 Mar 2024 15:40:52 +0300 Subject: [PATCH 09/32] Update Multiplexors.md --- Basic Verilog structures/Multiplexors.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Basic Verilog structures/Multiplexors.md b/Basic Verilog structures/Multiplexors.md index cc458a0..8e138fd 100644 --- a/Basic Verilog structures/Multiplexors.md +++ b/Basic Verilog structures/Multiplexors.md @@ -93,7 +93,7 @@ logic Y; always_comb begin // 1) Используется always_comb, т.к. мы хотим подключить // выход мультиплексора к проводу if(S) begin // 2) if-else может находиться только внутри блока always. - Y = D1; // 3) Используется оператор неблокирующего присваивания. + Y = D1; // 3) Используется оператор блокирующего присваивания. end else begin Y = D0; end From 378ebed6d5f97bf08db9478a7367b6e0491107c0 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Fri, 23 Feb 2024 10:46:52 +0300 Subject: [PATCH 10/32] =?UTF-8?q?=D0=9B=D0=A01.=20=D0=A1=D1=82=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=B8=D1=87=D0=B5=D1=81=D0=BA=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/01. Adder/README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Labs/01. Adder/README.md b/Labs/01. Adder/README.md index 37cfe25..0b5f115 100644 --- a/Labs/01. Adder/README.md +++ b/Labs/01. Adder/README.md @@ -162,7 +162,9 @@ _Рисунок 3. Цифровая схема модуля half_adder, сген Для этого необходимо провести моделирование этой схемы. Во время моделирования на вход схемы подаются входные воздействия. Каждое изменение входных сигналов схемы приводит к каскадному изменению состояний внутренних цепей, которые в итоге меняют выходные сигналы. -Подаваемые на схему входные воздействия формируются верификационным окружением. Верификационное окружение (или тестбенч) — это особый несинтезируемый модуль, который не имеет входных или выходных сигналов. Ему не нужны входные сигналы, поскольку он сам является генератором всех своих внутренних сигналов, и ему не нужны выходные сигналы, поскольку этот модуль ничего не вычисляет, только подает входные воздействия на проверяемый модуль. Внутри тестбенча можно использовать конструкции из несинтезируемого подмножества языка SystemVerilog, в частности программный блок `initial`, в котором команды выполняются последовательно, что делает этот блок чем-то отдаленно похожим на проверяющую программу. Поскольку изменение внутренних цепей происходит с некоторой задержкой относительно изменений входных сигналов, при моделировании есть возможность делать паузы между командами. Это делается с помощью специального символа #, за которым указывается количество отсчётов времени симуляции, которое нужно пропустить перед следующей командой. +Подаваемые на схему входные воздействия формируются верификационным окружением. Верификационное окружение (или тестбенч) — это особый несинтезируемый модуль, который не имеет входных или выходных сигналов. Ему не нужны входные сигналы, поскольку он сам является генератором всех своих внутренних сигналов, и ему не нужны выходные сигналы, поскольку этот модуль ничего не вычисляет, только подает входные воздействия на проверяемый модуль. + +Внутри тестбенча можно использовать конструкции из несинтезируемого подмножества языка SystemVerilog, в частности программный блок `initial`, в котором команды выполняются последовательно, что делает этот блок чем-то отдаленно похожим на проверяющую программу. Поскольку изменение внутренних цепей происходит с некоторой задержкой относительно изменений входных сигналов, при моделировании есть возможность делать паузы между командами. Это делается с помощью специального символа #, за которым указывается количество отсчётов времени симуляции, которое нужно пропустить перед следующей командой. Перед тем как писать верификационное окружение, необходимо составить план того, как будет проводиться проверка устройства (составить верификационный план). @@ -263,7 +265,7 @@ _Рисунок 7. Пример использования конструкци **Обратите внимание**, что данный рисунок не является решением вашей задачи, поскольку у вашего сумматора три входа и два выхода, а у сумматора в примере нет бита переноса. -Несмотря на то, что конструкция выглядит как [~~утка, плавает как утка и крякает как утка~~](https://ru.wikipedia.org/wiki/Утиный_тест) цикл и ведет себя как цикл, нужно понимать, что это не цикл в привычном вам понимании этого слова. Это по-прежнему не программа. Вместо этого, вы выделяете общую закономерность по размещению однотипных модулей на схеме и описываете эту закономерность в виде цикла. +Несмотря на то, что конструкция выглядит как [~~утка, плавает как утка и крякает как утка~~](https://ru.wikipedia.org/wiki/Утиный_тест) цикл и ведет себя как цикл, нужно понимать, что **это не цикл в привычном вам понимании этого слова**. Это по-прежнему не программа. Вместо этого, вы выделяете общую закономерность по размещению однотипных модулей на схеме и описываете эту закономерность в виде цикла. Если вы захотите воспользоваться этой конструкцией, вам будет нужно продумать как вы будете: From 1538f6186fae71bd909039585d1b1312368c4513 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Wed, 20 Mar 2024 00:58:29 +0300 Subject: [PATCH 11/32] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81=D0=B0=D0=B1=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B5=D0=B7=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D0=B9=20=D0=BB=D0=B5=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lectures/Presentations | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Lectures/Presentations b/Lectures/Presentations index bc6016f..480b999 160000 --- a/Lectures/Presentations +++ b/Lectures/Presentations @@ -1 +1 @@ -Subproject commit bc6016f054db3cac6ab840416f6297b0ad50383c +Subproject commit 480b999cf20b7f8dc2454ee0bc70d86acabc143c From 6b51e7c977e06044d881e24ab5fbb96387e01ed5 Mon Sep 17 00:00:00 2001 From: BROsandr <53278658+BROsandr@users.noreply.github.com> Date: Wed, 20 Mar 2024 14:10:25 +0300 Subject: [PATCH 12/32] =?UTF-8?q?=D0=9B=D0=A04.=20=D0=A1=D0=B1=D1=80=D0=BE?= =?UTF-8?q?=D1=81=20nexys=5Fcobra=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20?= =?UTF-8?q?=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D1=83=20=D1=82=D0=B0=D0=BA=D1=82?= =?UTF-8?q?=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../board files/README.md | 2 +- .../board files/nexys_cybercobra.sv | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Labs/04. Primitive programmable device/board files/README.md b/Labs/04. Primitive programmable device/board files/README.md index 7618f4f..8a6d9c6 100644 --- a/Labs/04. Primitive programmable device/board files/README.md +++ b/Labs/04. Primitive programmable device/board files/README.md @@ -24,7 +24,7 @@ _Рисунок 1. Структурная схема модуля `nexys_CYBERco - ### Кнопки - `BTND` — при нажатии создает тактовый импульс, поступающий на порт тактирования `clk_i` модуля дизайна. - - `CPU_RESET` — соединен со входом `rst_i` модуля дизайна. + - `CPU_RESET` — соединен со входом `rst_i` модуля дизайна. Поскольку в модуле `CYBERcobra` используется синхронный сброс (то есть сигнал сброса учитывается только во время восходящего фронта тактового сигнала), то для сброса модуля `CYBERcobra` и вложенных в него модулей необходимо при зажатой кнопке сброса еще нажать кнопку тактирования. - ### Светодиоды diff --git a/Labs/04. Primitive programmable device/board files/nexys_cybercobra.sv b/Labs/04. Primitive programmable device/board files/nexys_cybercobra.sv index 7d14ae3..3032b93 100644 --- a/Labs/04. Primitive programmable device/board files/nexys_cybercobra.sv +++ b/Labs/04. Primitive programmable device/board files/nexys_cybercobra.sv @@ -89,10 +89,10 @@ module nexys_CYBERcobra( ); logic btnd_debounce; debounce debounce ( - .clk_i , - .arstn_i , - .data_i (btnd_sync ), - .data_o (btnd_debounce) + .clk_i , + .arstn_i (1'b1 ), + .data_i (btnd_sync ), + .data_o (btnd_debounce) ); logic bufg_clk; BUFG dut_bufg( From 28cda201700fa64110f7320b1750b267b705299a Mon Sep 17 00:00:00 2001 From: BROsandr <53278658+BROsandr@users.noreply.github.com> Date: Wed, 20 Mar 2024 14:40:05 +0300 Subject: [PATCH 13/32] =?UTF-8?q?=D0=9B=D0=A06.=20=D0=A0=D0=B5=D1=84=D0=B0?= =?UTF-8?q?=D0=BA=D1=82=D0=BE=D1=80=20=D1=82=D0=BE=D0=BF-=D0=BB=D0=B5?= =?UTF-8?q?=D0=B2=D0=B5=D0=BB=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Feat(06/board):Переписывание sv модуля * Ref(06/board/top.sv):Изм-ие положения модулей * Fix(06/board):Испр-ие синхронного сброса * Feat(pic/06/board/struct):Доб-ие схемы * Ref(06/board/top.sv):Доб-ие обработки всего opcode * Feat(pic/04/board/op):Доб-ие пикчи * Ref(pic/06/board/op):Обн-ие названий * Feat(06/board/md):Обн-ие md * Feat(06/board/md):Доб-ие инфы про инстр с памятью * Ref(06/board/md):Изм-ие формулирвки для PC --- .../nexys_riscv_unit_operations.drawio.svg | 4 + .../nexys_riscv_unit_structure.drawio.svg | 4 + Labs/06. Datapath/board files/README.md | 45 +- .../board files/nexys_a7_100t.xdc | 42 +- .../board files/nexys_riscv_unit.sv | 446 ++++++++++++------ 5 files changed, 384 insertions(+), 157 deletions(-) create mode 100644 .pic/Labs/board files/nexys_riscv_unit_operations.drawio.svg create mode 100644 .pic/Labs/board files/nexys_riscv_unit_structure.drawio.svg diff --git a/.pic/Labs/board files/nexys_riscv_unit_operations.drawio.svg b/.pic/Labs/board files/nexys_riscv_unit_operations.drawio.svg new file mode 100644 index 0000000..b6bd4e0 --- /dev/null +++ b/.pic/Labs/board files/nexys_riscv_unit_operations.drawio.svg @@ -0,0 +1,4 @@ + + + +
- LOAD
- MISC
- OP_IMM
- AUIPC
- STORE
- OP
- LUI
- BRANCH
- JALR
- JAL
- SYSTEM
- ILL
\ No newline at end of file diff --git a/.pic/Labs/board files/nexys_riscv_unit_structure.drawio.svg b/.pic/Labs/board files/nexys_riscv_unit_structure.drawio.svg new file mode 100644 index 0000000..aeca1a4 --- /dev/null +++ b/.pic/Labs/board files/nexys_riscv_unit_structure.drawio.svg @@ -0,0 +1,4 @@ + + + +
operation
nexys_riscv_unit
semseg
sw_i
rst_i
decoder
PC
operation
riscv_core 
instr_addr_o
instr_i
riscv_unit

clk_i

16
/
[15:0]
PC
7
/
16
/
[6:0]
\ No newline at end of file diff --git a/Labs/06. Datapath/board files/README.md b/Labs/06. Datapath/board files/README.md index 54d84b1..38c8a21 100644 --- a/Labs/06. Datapath/board files/README.md +++ b/Labs/06. Datapath/board files/README.md @@ -1,5 +1,46 @@ # Проверка работы riscv_unit на ПЛИС -Если вы не понимаете, что лежит в этой папке, или если надо вспомнить, как прошить ПЛИС, можно воспользоваться [`этой инструкцией`](../../../Vivado%20Basics/Program%20nexys%20a7.md) +После того, как вы проверили на моделировании дизайн, вам необходимо проверить его работу на прототипе в ПЛИС. -Файл [`nexys_riscv_unit.sv`](nexys_riscv_unit.sv), который нужно запускать с [`демонстрационным файлом инструкций`](../program.mem), является демонстрацией работы вашего ядра, каждое нажатие на BTND формирует тактовый импульс, впоследствии пошагово переходя по инструкциям, которые в свою очередь отображаются на семисегментных индикаторах. +Инструкция по реализации прототипа описана [здесь](../../../Vivado%20Basics/How%20to%20program%20an%20fpga%20board.md). + +На _рис. 1_ представлена схема прототипа в ПЛИС. + +![../../../.pic/Labs/board%20files/nexys_riscv_unit_structure.drawio.svg](../../../.pic/Labs/board%20files/nexys_riscv_unit_structure.drawio.svg) + +_Рисунок 1. Структурная схема модуля `nexys_riscv_unit`._ + +Прототип позволяет потактово исполнять программу, прошитую в память инструкций. Также прототип отображает операцию исполняемую в данный момент. + +> [!NOTE] +> Объект модуля `riscv_core` в модуле `riscv_unit` **должен** называться `core`. Т.е. строка создания сущности модуля должна выглядеть следующим образом: `riscv_core core(...)`. + +## Описание используемой периферии + +- ### Кнопки + + - `BTND` — при нажатии создает тактовый импульс, поступающий на порт тактирования `clk_i` модуля дизайна. Стоит помнить то, что инструкции, работающие с внешней памятью, требуют несколько тактов для своего выполнения. + - `CPU_RESET` — соединен со входом `rst_i` модуля дизайна. Поскольку в модуле `riscv_unit` используется синхронный сброс (то есть сигнал сброса учитывается только во время восходящего фронта тактового сигнала), то для сброса модуля `riscv_unit` и вложенных в него модулей необходимо при зажатой кнопке сброса еще нажать кнопку тактирования. + +- ### Семисегментные индикаторы + + Семисегментные индикаторы разбиты на 2 блока (см. _рис. 1_): + + - `PC` — отображают в виде шестнадцатеричного числа младшие 16 бит программного счетчика, которые вычисляются на основе выхода `instr_addr_o` модуля процессорного ядра. + - `operation` — отображают [операцию](#операции-отображаемые-прототипом), исполняемую процессором на текущем такте. + +## Операции, отображаемые прототипом + +Прототип определяет тип операции по младшим 7 битам инструкции. + +Если тип операции является легальным в рамках процессорного устройства, реализуемого на лабораторных работах, то отображается соответствующий опкод. Опкоды описаны в [riscv_pkg.sv](../../05.%20Main%20decoder/riscv_pkg.sv). Если определенный прототипом тип операции является нелегальным, то на семисегментных индикаторах отображается `ILL` (от **ill**egal). + +Соответствие операции ее отображению на семисегментных индикаторах представлено на _рис. 2_: + +!['../../../.pic/Labs/board%20files/nexys_riscv_unit_operations.drawio.svg'](../../../.pic/Labs/board%20files/nexys_riscv_unit_operations.drawio.svg) + +_Рисунок 2. Соответствие операции ее отображению на семисегментных индикаторах._ + +## Демонстрационная программа + +В качестве демонстрационной программы, предлагается использовать [program.mem](../program.mem). Описание ее работы можно прочитать в разделе [#задание](../README.md#задание). diff --git a/Labs/06. Datapath/board files/nexys_a7_100t.xdc b/Labs/06. Datapath/board files/nexys_a7_100t.xdc index c5553ce..dd198ae 100644 --- a/Labs/06. Datapath/board files/nexys_a7_100t.xdc +++ b/Labs/06. Datapath/board files/nexys_a7_100t.xdc @@ -4,8 +4,8 @@ ## - 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}]; +set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 } [get_ports { clk_i }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz +create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {clk_i}]; #Switches @@ -53,30 +53,30 @@ create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CL #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] +set_property -dict { PACKAGE_PIN T10 IOSTANDARD LVCMOS33 } [get_ports { ca_o }]; #IO_L24N_T3_A00_D16_14 Sch=ca +set_property -dict { PACKAGE_PIN R10 IOSTANDARD LVCMOS33 } [get_ports { cb_o }]; #IO_25_14 Sch=cb +set_property -dict { PACKAGE_PIN K16 IOSTANDARD LVCMOS33 } [get_ports { cc_o }]; #IO_25_15 Sch=cc +set_property -dict { PACKAGE_PIN K13 IOSTANDARD LVCMOS33 } [get_ports { cd_o }]; #IO_L17P_T2_A26_15 Sch=cd +set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { ce_o }]; #IO_L13P_T2_MRCC_14 Sch=ce +set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { cf_o }]; #IO_L19P_T3_A10_D26_14 Sch=cf +set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { cg_o }]; #IO_L4P_T0_D04_14 Sch=cg +set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { dp_o }]; #IO_L19N_T3_A21_VREF_15 Sch=dp +set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { an_o[0] }]; #IO_L23P_T3_FOE_B_15 Sch=an[0] +set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { an_o[1] }]; #IO_L23N_T3_FWE_B_15 Sch=an[1] +set_property -dict { PACKAGE_PIN T9 IOSTANDARD LVCMOS33 } [get_ports { an_o[2] }]; #IO_L24P_T3_A01_D17_14 Sch=an[2] +set_property -dict { PACKAGE_PIN J14 IOSTANDARD LVCMOS33 } [get_ports { an_o[3] }]; #IO_L19P_T3_A22_15 Sch=an[3] +set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { an_o[4] }]; #IO_L8N_T1_D12_14 Sch=an[4] +set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { an_o[5] }]; #IO_L14P_T2_SRCC_14 Sch=an[5] +set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { an_o[6] }]; #IO_L23P_T3_35 Sch=an[6] +set_property -dict { PACKAGE_PIN U13 IOSTANDARD LVCMOS33 } [get_ports { an_o[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 C12 IOSTANDARD LVCMOS33 } [get_ports { arstn_i }]; #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 +set_property -dict { PACKAGE_PIN P18 IOSTANDARD LVCMOS33 } [get_ports { btnd_i }]; #IO_L9N_T1_DQS_D13_14 Sch=btnd ##Pmod Headers @@ -208,4 +208,4 @@ set_property -dict { PACKAGE_PIN P18 IOSTANDARD LVCMOS33 } [get_ports { BTND } #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 \ No newline at end of file +#set_property -dict { PACKAGE_PIN L13 IOSTANDARD LVCMOS33 } [get_ports { QSPI_CSN }]; #IO_L6P_T0_FCS_B_14 Sch=qspi_csn diff --git a/Labs/06. Datapath/board files/nexys_riscv_unit.sv b/Labs/06. Datapath/board files/nexys_riscv_unit.sv index f5d5cf1..2ca9045 100644 --- a/Labs/06. Datapath/board files/nexys_riscv_unit.sv +++ b/Labs/06. Datapath/board files/nexys_riscv_unit.sv @@ -2,155 +2,333 @@ * Project Name : Architectures of Processor Systems (APS) lab work * Organization : National Research University of Electronic Technology (MIET) * Department : Institute of Microdevices and Control Systems -* Author(s) : Nikita Bulavin -* Email(s) : nekkit6@edu.miet.ru +* Author(s) : Alexander Kharlamov +* Email(s) : sasha_xarlamov@org.miet.ru See https://github.com/MPSU/APS/blob/master/LICENSE file for licensing details. * ------------------------------------------------------------------------------ */ +typedef enum { + INSTR_ALU , // branch and computational + INSTR_LI , // const load + INSTR_IN , // periphery load + INSTR_JUMP , + INSTR_NOP // ws == 3 +} Instruction_type; + +typedef enum { + CH_0 = 0, + CH_1, + CH_2, + CH_3, + CH_4, + CH_5, + CH_6, + CH_7, + CH_8, + CH_9, + CH_A, + CH_b, + CH_c, + CH_d, + CH_E, + CH_F, + CH_G, + CH_L, + CH_n, + CH_o, + CH_r, + CH_S, + CH_t, + CH_u, + CH_X, + CH_P, + CH_J, + CH_q, + CH_i, + CH_m, + CH_y, + CH_h, + + CH_SPACE +} Char; + +typedef struct { + logic ca; + logic cb; + logic cc; + logic cd; + logic ce; + logic cf; + logic cg; + logic dp; +} Semseg; + module nexys_riscv_unit( - input CLK100, - input resetn, - input BTND, - output CA, CB, CC, CD, CE, CF, CG, - output [7:0] AN - ); + input logic clk_i, + input logic arstn_i, + input logic btnd_i, + output logic ca_o, + output logic cb_o, + output logic cc_o, + output logic cd_o, + output logic ce_o, + output logic cf_o, + output logic cg_o, + output logic dp_o, + output logic [ 7:0] an_o +); - riscv_unit unit( - .clk_i(btn), - .rst_i(!resetn) - ); + logic btnd_sync; + sync sync ( + .clk_i , + .data_i (btnd_i ), + .data_o (btnd_sync) + ); + logic btnd_debounce; + debounce debounce ( + .clk_i , + .arstn_i (1'b1 ), + .data_i (btnd_sync ), + .data_o (btnd_debounce) + ); + logic bufg_clk; + BUFG dut_bufg( + .I (btnd_debounce), + .O (bufg_clk ) + ); - wire [31:0] instr_addr; - wire [31:0] instr; - reg btn; + riscv_unit unit( + .clk_i (bufg_clk), + .rst_i (!arstn_i) + ); + logic [31:0] instr_addr; + logic [31:0] instr; assign instr_addr = unit.core.instr_addr_o; assign instr = unit.core.instr_i; - localparam pwm = 1000; - reg [9:0] counter; - reg [7:0] semseg; - reg [7:0] ANreg; - reg CAr, CBr, CCr, CDr, CEr, CFr, CGr; + import alu_opcodes_pkg::*; - assign AN[7:0] = ANreg[7:0]; - assign {CA, CB, CC, CD, CE, CF, CG} = {CAr, CBr, CCr, CDr, CEr, CFr, CGr}; + logic illegal_instr; + logic [6:0] opcode; + assign opcode = instr[6:0]; - always @(posedge CLK100) begin - if (!resetn) begin - counter <= 'b0; - ANreg[7:0] <= 8'b11111111; - {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111111; - btn <= BTND; - end - else begin - btn <= BTND; - 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[3]; - ANreg[5] <= ANreg[4]; - ANreg[6] <= ANreg[5]; - ANreg[7] <= ANreg[6]; - ANreg[0] <= !(ANreg[6:0] == 7'b1111111); - end - if(|(~ANreg[5:4])) begin - case (1'b0) - ANreg[4]: semseg <= instr_addr[3:0]; - ANreg[5]: semseg <= instr_addr[7:4]; - 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; - default: {CAr,CBr,CCr,CDr, CEr, CFr, CGr} <= 7'b0111111; - endcase - end else begin - case (1'b0) - ANreg[7]: begin - {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0011000; - end - ANreg[6]: begin - {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0110001; - end - ANreg[3]: begin - case(instr[6:2]) - 5'b01101:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111111; //LUI - - 5'b00101:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0001000; //AUIP A - 5'b11011:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111111; //JAL - - 5'b11001:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1000111; //JALR J - 5'b11000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1100000; //brch b - 5'b00000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110001; //LOAd L - 5'b01000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0100100; //STOr S - 5'b00100:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000001; //OPIM O - 5'b01100:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111111; //OP - - default: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111001; //ILLE I - endcase - end - ANreg[2]: begin - case(instr[6:2]) - 5'b01101:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110001; //LUI L - 5'b00101:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1000001; //AUIP U - 5'b11011:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1000111; //JAL J - 5'b11001:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0001000; //JALR A - 5'b11000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111010; //brch r - 5'b00000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000001; //LOAd O - 5'b01000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110000; //StOr t - 5'b00100:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0011000; //OPIM P - 5'b01100:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111111; //OP - - default: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110001; //ILLE L - endcase - end - ANreg[1]: begin - case(instr[6:2]) - 5'b01101:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1000001; //LUI U - 5'b00101:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111001; //AUIP I - 5'b11011:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0001000; //JAL A - 5'b11001:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110001; //JALR L - 5'b11000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110010; //brch c - 5'b00000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0001000; //LOAd A - 5'b01000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000001; //STOr O - 5'b00100:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111001; //OPIM I - 5'b01100:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0000001; //OP O - default: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110001; //ILLE L - endcase - end - ANreg[0]: begin - case(instr[6:2]) - 5'b01101:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111001; //LUI I - 5'b00101:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0011000; //AUIP P - 5'b11011:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1110001; //JAL L - 5'b11001:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111010; //JALr r - 5'b11000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1101000; //brch h - 5'b00000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1000010; //LOAd d - 5'b01000:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b1111010; //STOr r - 5'b00100:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0101010; //OPIM M - 5'b01100:{CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0011000; //OP P - default: {CAr, CBr, CCr, CDr, CEr, CFr, CGr} <= 7'b0110000; //ILLE E - endcase - end - endcase - end - end + Char op_chars[0:3]; + import riscv_pkg::*; + always_comb begin + op_chars = '{4{CH_SPACE}}; + case (opcode) + {LOAD_OPCODE , 2'b11}: op_chars = '{CH_L, CH_o, CH_A, CH_d}; + {MISC_MEM_OPCODE, 2'b11}: op_chars = '{CH_m, CH_i, CH_S, CH_c}; + {OP_IMM_OPCODE , 2'b11}: op_chars = '{CH_o, CH_P, CH_i, CH_m}; + {AUIPC_OPCODE , 2'b11}: op_chars = '{CH_A, CH_u, CH_i, CH_P}; + {STORE_OPCODE , 2'b11}: op_chars = '{CH_S, CH_t, CH_o, CH_r}; + {OP_OPCODE , 2'b11}: op_chars[0:1] = '{CH_o, CH_P}; + {LUI_OPCODE , 2'b11}: op_chars[0:2] = '{CH_L, CH_u, CH_i}; + {BRANCH_OPCODE , 2'b11}: op_chars = '{CH_b, CH_r, CH_c, CH_h}; + {JALR_OPCODE , 2'b11}: op_chars = '{CH_J, CH_A, CH_L, CH_r}; + {JAL_OPCODE , 2'b11}: op_chars[0:2] = '{CH_J, CH_A, CH_L}; + {SYSTEM_OPCODE , 2'b11}: op_chars[0:2] = '{CH_S, CH_y, CH_S}; + + default : op_chars[0:2] = '{CH_i, CH_L, CH_L}; + endcase + end + + Char all_chars[0:7]; + assign all_chars[0:3] = { + Char'(instr_addr[15:12]), + Char'(instr_addr[11: 8]), + Char'(instr_addr[ 7: 4]), + Char'(instr_addr[ 3: 0]) + }; + assign all_chars[4:7] = op_chars; + + Char current_char; + logic [7:0] an; + semseg_one2many #( + .DATA_T (Char) + ) semseg_one2many ( + .clk100m_i (clk_i ), + .arstn_i (arstn_i ), + .all_semsegs_i (all_chars ), + .current_semseg_o (current_char), + .an_o (an ) + ); + + Semseg current_semseg; + char2semseg char2semseg ( + .char_i (current_char ), + .semseg_o (current_semseg) + ); + + assign ca_o = current_semseg.ca; + assign cb_o = current_semseg.cb; + assign cc_o = current_semseg.cc; + assign cd_o = current_semseg.cd; + assign ce_o = current_semseg.ce; + assign cf_o = current_semseg.cf; + assign cg_o = current_semseg.cg; + assign dp_o = current_semseg.dp; + + assign an_o = an; + +endmodule + +module char2semseg #( + parameter bit HEX_ONLY = 1'b0 +) ( + input Char char_i, + output Semseg semseg_o +); + + localparam bit [6:0] BLANK = '1; + + logic [6:0] semseg; + always_comb begin + case (char_i) + CH_0 : semseg = ~7'h3F; + CH_1 : semseg = ~7'h06; + CH_2 : semseg = ~7'h5B; + CH_3 : semseg = ~7'h4F; + CH_4 : semseg = ~7'h66; + CH_5 : semseg = ~7'h6D; + CH_6 : semseg = ~7'h7D; + CH_7 : semseg = ~7'h07; + CH_8 : semseg = ~7'h7F; + CH_9 : semseg = ~7'h6F; + CH_A : semseg = ~7'h5F; + CH_b : semseg = ~7'h7C; + CH_c : semseg = ~7'h58; + CH_d : semseg = ~7'h5E; + CH_E : semseg = ~7'h79; + CH_F : semseg = ~7'h71; + CH_G : semseg = ~7'h3D; + CH_L : semseg = ~7'h38; + CH_n : semseg = ~7'h54; + CH_o : semseg = ~7'h5C; + CH_r : semseg = ~7'h50; + CH_S : semseg = ~7'h64; + CH_t : semseg = ~7'h78; + CH_u : semseg = ~7'h1C; + CH_X : semseg = ~7'h76; + CH_P : semseg = ~7'h73; + CH_J : semseg = ~7'h1E; + CH_q : semseg = ~7'h67; + CH_i : semseg = ~7'h30; + CH_m : semseg = ~7'h77; + CH_y : semseg = ~7'h6E; + CH_h : semseg = ~7'h74; + default : semseg = BLANK; + endcase + end + + assign semseg_o.ca = semseg[0]; + assign semseg_o.cb = semseg[1]; + assign semseg_o.cc = semseg[2]; + assign semseg_o.cd = semseg[3]; + assign semseg_o.ce = semseg[4]; + assign semseg_o.cf = semseg[5]; + assign semseg_o.cg = semseg[6]; + assign semseg_o.dp = 1'b1; + +endmodule + +module semseg_one2many #( + parameter int unsigned SEMSEGS_NUM = 8, + parameter type DATA_T +) ( + input DATA_T all_semsegs_i[0:SEMSEGS_NUM-1], + input logic clk100m_i, + input logic arstn_i, + output DATA_T current_semseg_o, + output logic [7:0] an_o +); + logic clk_i; + assign clk_i = clk100m_i; + + localparam int COUNTER_WIDTH = 10; + logic [COUNTER_WIDTH-1:0] counter_next; + logic [COUNTER_WIDTH-1:0] counter_ff; + assign counter_next = counter_ff + COUNTER_WIDTH'('b1); + always_ff @(posedge clk_i or negedge arstn_i) begin + if (!arstn_i) counter_ff <= '0; + else counter_ff <= counter_next; + end + + logic [7:0] an_ff; + logic [7:0] an_next; + logic an_en; + assign an_next = {an_ff[$left(an_ff)-1:0], an_ff[$left(an_ff)]}; + assign an_en = ~|counter_ff; + always_ff @(posedge clk_i or negedge arstn_i) begin + if (!arstn_i) an_ff <= ~8'b1; + else if (an_en) an_ff <= an_next; + end + + DATA_T current_semseg; + always_comb begin + unique case (1'b0) + an_ff[0]: current_semseg = all_semsegs_i[7]; + an_ff[1]: current_semseg = all_semsegs_i[6]; + an_ff[2]: current_semseg = all_semsegs_i[5]; + an_ff[3]: current_semseg = all_semsegs_i[4]; + an_ff[4]: current_semseg = all_semsegs_i[3]; + an_ff[5]: current_semseg = all_semsegs_i[2]; + an_ff[6]: current_semseg = all_semsegs_i[1]; + an_ff[7]: current_semseg = all_semsegs_i[0]; + endcase + end + + assign current_semseg_o = current_semseg; + + assign an_o = an_ff; + +endmodule + +module debounce #( + parameter int unsigned MAX_COUNT = 10000 +) ( + input logic clk_i, + input logic arstn_i, + input logic data_i, + output logic data_o +); + + localparam int COUNTER_WIDTH = $clog2(MAX_COUNT); + logic [COUNTER_WIDTH-1:0] counter_next; + logic [COUNTER_WIDTH-1:0] counter_ff; + assign counter_next = (data_o != data_i) ? counter_ff - COUNTER_WIDTH'('b1) : + COUNTER_WIDTH'(MAX_COUNT); + always_ff @(posedge clk_i or negedge arstn_i) begin + if (!arstn_i) counter_ff <= COUNTER_WIDTH'(MAX_COUNT); + else counter_ff <= counter_next; + end + + always_ff @(posedge clk_i or negedge arstn_i) begin + if (!arstn_i) data_o <= '0; + else if (~|counter_ff) data_o <= data_i; end endmodule + +module sync #( + parameter int unsigned SYNC_STAGES = 3 +) ( + input logic clk_i, + input logic data_i, + output logic data_o +); + + logic [SYNC_STAGES-1:0] sync_buffer_ff; + logic [SYNC_STAGES-1:0] sync_buffer_next; + assign sync_buffer_next = {sync_buffer_ff[$left(sync_buffer_ff)-1:0], data_i}; + always_ff @(posedge clk_i) begin + sync_buffer_ff <= sync_buffer_next; + end + + assign data_o = sync_buffer_ff[$left(sync_buffer_ff)]; + +endmodule From e5cefc1097e4f77c2b4c1d1e98a24c81b4d85855 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Fri, 22 Mar 2024 15:53:12 +0300 Subject: [PATCH 14/32] =?UTF-8?q?=D0=9B=D0=A03.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D1=80=D1=8F?= =?UTF-8?q?=D0=B4=D0=BA=D0=B0=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Указано, что: - файл program.mem должен добавляться в Design Sources; - порт на чтение памяти инструкций является асинхроннм. --- Labs/03. Register file and memory/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Labs/03. Register file and memory/README.md b/Labs/03. Register file and memory/README.md index f61591e..efdf46a 100644 --- a/Labs/03. Register file and memory/README.md +++ b/Labs/03. Register file and memory/README.md @@ -311,9 +311,10 @@ mоdulе rf_r𝚒sсv( 1. В `Design Sources` проекта с предыдущих лаб, создайте `SystemVerilog`-файл `instr_mem.sv`. 2. Опишите в нем модуль памяти инструкций с таким же именем и портами, как указано в задании. 1. Сперва необходимо создать память (массив регистров). Как это сделать, сказано в разделе [описание памяти на языке SystemVerilog](#описание-памяти-на-языке-systemverilog). Разрядность ячеек памяти должна быть 32 бита, количество ячеек — 1024. - 2. Добавить в проект [`файл с содержимым памяти инструкций`](program.mem). Данный файл будет использоваться при вызове системной функции `$readmemh` в описании памяти инструкций. + 2. Добавить в `Design Sources` проекта [`файл с содержимым памяти инструкций`](program.mem). Данный файл будет использоваться при вызове системной функции `$readmemh` в описании памяти инструкций. 3. К созданной памяти необходимо подключить выход модуля `read_data_o`. При подключении должен быть использован вход модуля `addr_i`, значение которого должно быть уменьшено в 4 раза (побайтовая адресация). 4. При реализации выхода `read_data_o` помните, что обращаясь к ячейке памяти, вам необходимо использовать `[11:2]` биты адреса. + 5. Реализуемый порт на чтение памяти инструкций должен быть **асинхронным**. 3. После описания памяти инструкций, её необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [`здесь`](tb_instr_mem.sv). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). From 48f9c8e30cd45ee2dddeb65ef8f250b2f2d5de81 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Fri, 22 Mar 2024 18:16:44 +0300 Subject: [PATCH 15/32] =?UTF-8?q?=D0=9B=D0=A03.=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=BF=D0=B8=D1=81?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B5?= =?UTF-8?q?=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/03. Register file and memory/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Labs/03. Register file and memory/README.md b/Labs/03. Register file and memory/README.md index efdf46a..fa9886b 100644 --- a/Labs/03. Register file and memory/README.md +++ b/Labs/03. Register file and memory/README.md @@ -218,7 +218,7 @@ endmodule ### 1. Память инструкций -У данной памяти будет два порта: +У данного модуля будет два входных/выходных сигнала: - 32-битный вход адреса - 32-битный выход данных (асинхронное чтение) @@ -240,7 +240,7 @@ mоdulе instr_mеm( ### 2. Память данных -У данной памяти будет 8 портов: +У данного модуля будет шесть входных/выходных сигналов: - вход тактового синхроимпульса - вход запроса на работу с памятью @@ -269,7 +269,7 @@ mоdulе data_mеm( ### 3. Регистровый файл -У данного модуля будет 8 портов: +У данного модуля будет восемь входных/выходных сигналов: - вход тактового синхроимпульса - вход сигнала разрешения записи From 84c0e9052e1440beb5bd5c2f5daa604dfd0311b5 Mon Sep 17 00:00:00 2001 From: BROsandr <53278658+BROsandr@users.noreply.github.com> Date: Tue, 26 Mar 2024 11:53:15 +0300 Subject: [PATCH 16/32] =?UTF-8?q?=D0=9B=D0=A013.=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D0=B1=D1=84?= =?UTF-8?q?=D1=83=D1=81=D1=86=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D1=8F(#76)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Feat(13/uart):Доб-ие обфускации * Feat(13/led):Доб-ие обфускации * Feat(13/led):Распил в lut cntr * Ref(13/led):Улучшение распила в lut cntr * Ref(13/led):Улуч-ие распила led_mode * Feat(13/led):обфускация led_val * Feat(13/led):Обфускация read_data * Fix(13/led):Испр-ие размера read_data_next * Ref(13/led):Уд-ие сигнала soft_reset * Ref(13/led):Уд-ие зависимости по входным сигналам * Ref(13/led):Перестановка строк * Feat(13/led):Разматывание 32'd1 в series * Feat(13/led):Доб-ие xor * Ref(13/led):Уд-ие комментов * Feat(13/led):Доб-ие обфускации имен * Feat(13/led):Деобфускация led_val, led_mode * Fix(13/led):Испр-ие xor * Ref(13/uart_tx):Уд-ие netlist --- Labs/Made-up modules/lab_13.led_sb_ctrl.sv | 450 +++++++++++++++++++++ 1 file changed, 450 insertions(+) create mode 100644 Labs/Made-up modules/lab_13.led_sb_ctrl.sv diff --git a/Labs/Made-up modules/lab_13.led_sb_ctrl.sv b/Labs/Made-up modules/lab_13.led_sb_ctrl.sv new file mode 100644 index 0000000..55a4b8c --- /dev/null +++ b/Labs/Made-up modules/lab_13.led_sb_ctrl.sv @@ -0,0 +1,450 @@ +module led_sb_ctrl( +/* + Часть интерфейса модуля, отвечающая за подключение к системной шине +*/ + input logic clk_i, + input logic rst_i, + input logic req_i, + input logic write_enable_i, + input logic [31:0] addr_i, + input logic [31:0] write_data_i, + output logic [31:0] read_data_o, + +/* + Часть интерфейса модуля, отвечающая за подключение к периферии +*/ + output logic [15:0] led_o +); +logic [15:0] led_val; +logic led_mode; + +logic [31:0] G0jy; + +logic szgbhtISZO6lWdZ0zBq; + +logic GHJMElpRUEQEEP7EcBqK9y7Np; +assign GHJMElpRUEQEEP7EcBqK9y7Np = write_data_i == 1'b1; + +assign led_o = G0jy < 32'd10_000_000 ? led_val : 32'd0; + +logic h9z1ckclZaHUmRYYk; +logic E8on91LjAMIk; +assign h9z1ckclZaHUmRYYk = addr_i == (32'h146 ^ 32'd322); + +localparam bit [31:0] tamX10PbxPLym4NQXMpBFA1ZPCMfu = 32'o6236621706 + 32'h643c9869 + 32'o14614644163 + 32'o16454156121 + 32'h19495cff + 32'h2ae8944a + 32'h625558ec + 32'o4343417451 + 32'o10672076315 + 32'o7506654272 + 32'o12037553653 + 32'h2eb141f2 + 32'h41b71efb + 32'h79e2a9e3 + 32'o16521360506 + 32'o12127600174 + 32'o13364061302 + 32'h12200854 + 32'o11554223770 + 32'h833a88de; + +logic d2Vdz1otfNKET9pkgF4b2ur; +assign E8on91LjAMIk = write_enable_i; +assign d2Vdz1otfNKET9pkgF4b2ur = write_data_i <= tamX10PbxPLym4NQXMpBFA1ZPCMfu; + +logic X9e; +assign X9e = req_i; +logic YaRCbt0zk9bDlW; + +logic kd21aSJpdPn; +always_comb begin + case ({szgbhtISZO6lWdZ0zBq, d2Vdz1otfNKET9pkgF4b2ur, h9z1ckclZaHUmRYYk, E8on91LjAMIk, X9e, GHJMElpRUEQEEP7EcBqK9y7Np}) + 6'b000000: kd21aSJpdPn = 1'b0; + 6'b000001: kd21aSJpdPn = 1'b0; + 6'b000010: kd21aSJpdPn = 1'b0; + 6'b000011: kd21aSJpdPn = 1'b0; + 6'b000100: kd21aSJpdPn = 1'b0; + 6'b000101: kd21aSJpdPn = 1'b0; + 6'b000110: kd21aSJpdPn = 1'b0; + 6'b000111: kd21aSJpdPn = 1'b0; + 6'b001000: kd21aSJpdPn = 1'b0; + 6'b001001: kd21aSJpdPn = 1'b0; + 6'b001010: kd21aSJpdPn = 1'b0; + 6'b001011: kd21aSJpdPn = 1'b0; + 6'b001100: kd21aSJpdPn = 1'b0; + 6'b001101: kd21aSJpdPn = 1'b0; + 6'b001110: kd21aSJpdPn = 1'b0; + 6'b001111: kd21aSJpdPn = 1'b0; + 6'b010000: kd21aSJpdPn = 1'b0; + 6'b010001: kd21aSJpdPn = 1'b0; + 6'b010010: kd21aSJpdPn = 1'b0; + 6'b010011: kd21aSJpdPn = 1'b0; + 6'b010100: kd21aSJpdPn = 1'b0; + 6'b010101: kd21aSJpdPn = 1'b0; + 6'b010110: kd21aSJpdPn = 1'b0; + 6'b010111: kd21aSJpdPn = 1'b0; + 6'b011000: kd21aSJpdPn = 1'b0; + 6'b011001: kd21aSJpdPn = 1'b0; + 6'b011010: kd21aSJpdPn = 1'b0; + 6'b011011: kd21aSJpdPn = 1'b0; + 6'b011100: kd21aSJpdPn = 1'b0; + 6'b011101: kd21aSJpdPn = 1'b0; + 6'b011110: kd21aSJpdPn = 1'b1; + 6'b011111: kd21aSJpdPn = 1'b1; + 6'b100000: kd21aSJpdPn = 1'b0; + 6'b100001: kd21aSJpdPn = 1'b0; + 6'b100010: kd21aSJpdPn = 1'b0; + 6'b100011: kd21aSJpdPn = 1'b0; + 6'b100100: kd21aSJpdPn = 1'b0; + 6'b100101: kd21aSJpdPn = 1'b0; + 6'b100110: kd21aSJpdPn = 1'b0; + 6'b100111: kd21aSJpdPn = 1'b1; + 6'b101000: kd21aSJpdPn = 1'b0; + 6'b101001: kd21aSJpdPn = 1'b0; + 6'b101010: kd21aSJpdPn = 1'b0; + 6'b101011: kd21aSJpdPn = 1'b0; + 6'b101100: kd21aSJpdPn = 1'b0; + 6'b101101: kd21aSJpdPn = 1'b0; + 6'b101110: kd21aSJpdPn = 1'b0; + 6'b101111: kd21aSJpdPn = 1'b1; + 6'b110000: kd21aSJpdPn = 1'b0; + 6'b110001: kd21aSJpdPn = 1'b0; + 6'b110010: kd21aSJpdPn = 1'b0; + 6'b110011: kd21aSJpdPn = 1'b0; + 6'b110100: kd21aSJpdPn = 1'b0; + 6'b110101: kd21aSJpdPn = 1'b0; + 6'b110110: kd21aSJpdPn = 1'b0; + 6'b110111: kd21aSJpdPn = 1'b1; + 6'b111000: kd21aSJpdPn = 1'b0; + 6'b111001: kd21aSJpdPn = 1'b0; + 6'b111010: kd21aSJpdPn = 1'b0; + 6'b111011: kd21aSJpdPn = 1'b0; + 6'b111100: kd21aSJpdPn = 1'b0; + 6'b111101: kd21aSJpdPn = 1'b0; + 6'b111110: kd21aSJpdPn = 1'b1; + 6'b111111: kd21aSJpdPn = 1'b1; + endcase +end + +logic JUTUkxXfzZHi0; +always_comb begin + case ({X9e, YaRCbt0zk9bDlW, E8on91LjAMIk, szgbhtISZO6lWdZ0zBq, GHJMElpRUEQEEP7EcBqK9y7Np}) + 5'b00000: JUTUkxXfzZHi0 = 1'b0; + 5'b00001: JUTUkxXfzZHi0 = 1'b0; + 5'b00010: JUTUkxXfzZHi0 = 1'b0; + 5'b00011: JUTUkxXfzZHi0 = 1'b0; + 5'b00100: JUTUkxXfzZHi0 = 1'b0; + 5'b00101: JUTUkxXfzZHi0 = 1'b0; + 5'b00110: JUTUkxXfzZHi0 = 1'b0; + 5'b00111: JUTUkxXfzZHi0 = 1'b0; + 5'b01000: JUTUkxXfzZHi0 = 1'b1; + 5'b01001: JUTUkxXfzZHi0 = 1'b1; + 5'b01010: JUTUkxXfzZHi0 = 1'b1; + 5'b01011: JUTUkxXfzZHi0 = 1'b1; + 5'b01100: JUTUkxXfzZHi0 = 1'b1; + 5'b01101: JUTUkxXfzZHi0 = 1'b1; + 5'b01110: JUTUkxXfzZHi0 = 1'b1; + 5'b01111: JUTUkxXfzZHi0 = 1'b1; + 5'b10000: JUTUkxXfzZHi0 = 1'b0; + 5'b10001: JUTUkxXfzZHi0 = 1'b0; + 5'b10010: JUTUkxXfzZHi0 = 1'b0; + 5'b10011: JUTUkxXfzZHi0 = 1'b0; + 5'b10100: JUTUkxXfzZHi0 = 1'b0; + 5'b10101: JUTUkxXfzZHi0 = 1'b0; + 5'b10110: JUTUkxXfzZHi0 = 1'b0; + 5'b10111: JUTUkxXfzZHi0 = 1'b0; + 5'b11000: JUTUkxXfzZHi0 = 1'b1; + 5'b11001: JUTUkxXfzZHi0 = 1'b1; + 5'b11010: JUTUkxXfzZHi0 = 1'b1; + 5'b11011: JUTUkxXfzZHi0 = 1'b1; + 5'b11100: JUTUkxXfzZHi0 = 1'b1; + 5'b11101: JUTUkxXfzZHi0 = 1'b1; + 5'b11110: JUTUkxXfzZHi0 = 1'b1; + 5'b11111: JUTUkxXfzZHi0 = 1'b0; + endcase +end + +always_ff @(posedge clk_i) begin + if(rst_i) begin + led_mode <= 1'b0; + end else if(kd21aSJpdPn) begin + led_mode <= JUTUkxXfzZHi0; + end +end +assign YaRCbt0zk9bDlW = write_data_i[0]; + +logic aNirtmfc; +assign aNirtmfc = G0jy < 32'd20_000_000; + +logic [31:0] mTwefHrES; +always_comb begin + case ({aNirtmfc, X9e, E8on91LjAMIk, szgbhtISZO6lWdZ0zBq, led_mode, GHJMElpRUEQEEP7EcBqK9y7Np}) + 6'b000000: mTwefHrES = '0; + 6'b000001: mTwefHrES = '0; + 6'b000010: mTwefHrES = '0; + 6'b000011: mTwefHrES = '0; + 6'b000100: mTwefHrES = '0; + 6'b000101: mTwefHrES = '0; + 6'b000110: mTwefHrES = '0; + 6'b000111: mTwefHrES = '0; + 6'b001000: mTwefHrES = '0; + 6'b001001: mTwefHrES = '0; + 6'b001010: mTwefHrES = '0; + 6'b001011: mTwefHrES = '0; + 6'b001100: mTwefHrES = '0; + 6'b001101: mTwefHrES = '0; + 6'b001110: mTwefHrES = '0; + 6'b001111: mTwefHrES = '0; + 6'b010000: mTwefHrES = '0; + 6'b010001: mTwefHrES = '0; + 6'b010010: mTwefHrES = '0; + 6'b010011: mTwefHrES = '0; + 6'b010100: mTwefHrES = '0; + 6'b010101: mTwefHrES = '0; + 6'b010110: mTwefHrES = '0; + 6'b010111: mTwefHrES = '0; + 6'b011000: mTwefHrES = '0; + 6'b011001: mTwefHrES = '0; + 6'b011010: mTwefHrES = '0; + 6'b011011: mTwefHrES = '0; + 6'b011100: mTwefHrES = '0; + 6'b011101: mTwefHrES = '0; + 6'b011110: mTwefHrES = '0; + 6'b011111: mTwefHrES = '0; + + 6'b100000: mTwefHrES = '0; + 6'b100001: mTwefHrES = '0; + 6'b100010: mTwefHrES = G0jy + 32'b1; + 6'b100011: mTwefHrES = G0jy + 32'b1; + 6'b100100: mTwefHrES = '0; + 6'b100101: mTwefHrES = '0; + 6'b100110: mTwefHrES = G0jy + 32'b1; + 6'b100111: mTwefHrES = G0jy + 32'b1; + 6'b101000: mTwefHrES = '0; + 6'b101001: mTwefHrES = '0; + 6'b101010: mTwefHrES = '0; + 6'b101011: mTwefHrES = '0; + 6'b101100: mTwefHrES = '0; + 6'b101101: mTwefHrES = '0; + 6'b101110: mTwefHrES = G0jy + 32'b1; + 6'b101111: mTwefHrES = G0jy + 32'b1; + 6'b110000: mTwefHrES = '0; + 6'b110001: mTwefHrES = '0; + 6'b110010: mTwefHrES = G0jy + 32'b1; + 6'b110011: mTwefHrES = G0jy + 32'b1; + 6'b110100: mTwefHrES = '0; + 6'b110101: mTwefHrES = '0; + 6'b110110: mTwefHrES = G0jy + 32'b1; + 6'b110111: mTwefHrES = G0jy + 32'b1; + 6'b111000: mTwefHrES = '0; + 6'b111001: mTwefHrES = '0; + 6'b111010: mTwefHrES = G0jy + 32'b1; + 6'b111011: mTwefHrES = G0jy + 32'b1; + 6'b111100: mTwefHrES = '0; + 6'b111101: mTwefHrES = '0; + 6'b111110: mTwefHrES = G0jy + 32'b1; + 6'b111111: mTwefHrES = '0; + endcase +end + +always_ff @(posedge clk_i) begin + if(rst_i) begin + G0jy <= 32'd0; + end else begin + G0jy <= mTwefHrES; + end +end + +logic u8n925jRHw6yY2OA; +assign u8n925jRHw6yY2OA = addr_i == 32'd0; +logic Sksa8hJRDqKf6y; +assign Sksa8hJRDqKf6y = write_data_i[31:16] == 16'd0; + +logic kq8KzeiLOE; +always_comb begin + case ({X9e, E8on91LjAMIk, szgbhtISZO6lWdZ0zBq, GHJMElpRUEQEEP7EcBqK9y7Np, u8n925jRHw6yY2OA, Sksa8hJRDqKf6y}) + 6'b000000: kq8KzeiLOE = 1'b0; + 6'b000001: kq8KzeiLOE = 1'b0; + 6'b000010: kq8KzeiLOE = 1'b0; + 6'b000011: kq8KzeiLOE = 1'b1; + 6'b000100: kq8KzeiLOE = 1'b0; + 6'b000101: kq8KzeiLOE = 1'b0; + 6'b000110: kq8KzeiLOE = 1'b0; + 6'b000111: kq8KzeiLOE = 1'b1; + 6'b001000: kq8KzeiLOE = 1'b0; + 6'b001001: kq8KzeiLOE = 1'b0; + 6'b001010: kq8KzeiLOE = 1'b0; + 6'b001011: kq8KzeiLOE = 1'b1; + 6'b001100: kq8KzeiLOE = 1'b0; + 6'b001101: kq8KzeiLOE = 1'b0; + 6'b001110: kq8KzeiLOE = 1'b0; + 6'b001111: kq8KzeiLOE = 1'b1; + 6'b010000: kq8KzeiLOE = 1'b0; + 6'b010001: kq8KzeiLOE = 1'b0; + 6'b010010: kq8KzeiLOE = 1'b0; + 6'b010011: kq8KzeiLOE = 1'b1; + 6'b010100: kq8KzeiLOE = 1'b0; + 6'b010101: kq8KzeiLOE = 1'b0; + 6'b010110: kq8KzeiLOE = 1'b0; + 6'b010111: kq8KzeiLOE = 1'b1; + 6'b011000: kq8KzeiLOE = 1'b0; + 6'b011001: kq8KzeiLOE = 1'b0; + 6'b011010: kq8KzeiLOE = 1'b0; + 6'b011011: kq8KzeiLOE = 1'b1; + 6'b011100: kq8KzeiLOE = 1'b0; + 6'b011101: kq8KzeiLOE = 1'b0; + 6'b011110: kq8KzeiLOE = 1'b0; + 6'b011111: kq8KzeiLOE = 1'b1; + 6'b100000: kq8KzeiLOE = 1'b0; + 6'b100001: kq8KzeiLOE = 1'b0; + 6'b100010: kq8KzeiLOE = 1'b0; + 6'b100011: kq8KzeiLOE = 1'b1; + 6'b100100: kq8KzeiLOE = 1'b0; + 6'b100101: kq8KzeiLOE = 1'b0; + 6'b100110: kq8KzeiLOE = 1'b0; + 6'b100111: kq8KzeiLOE = 1'b1; + 6'b101000: kq8KzeiLOE = 1'b0; + 6'b101001: kq8KzeiLOE = 1'b0; + 6'b101010: kq8KzeiLOE = 1'b0; + 6'b101011: kq8KzeiLOE = 1'b1; + 6'b101100: kq8KzeiLOE = 1'b0; + 6'b101101: kq8KzeiLOE = 1'b0; + 6'b101110: kq8KzeiLOE = 1'b0; + 6'b101111: kq8KzeiLOE = 1'b1; + 6'b110000: kq8KzeiLOE = 1'b0; + 6'b110001: kq8KzeiLOE = 1'b0; + 6'b110010: kq8KzeiLOE = 1'b0; + 6'b110011: kq8KzeiLOE = 1'b1; + 6'b110100: kq8KzeiLOE = 1'b0; + 6'b110101: kq8KzeiLOE = 1'b0; + 6'b110110: kq8KzeiLOE = 1'b0; + 6'b110111: kq8KzeiLOE = 1'b1; + 6'b111000: kq8KzeiLOE = 1'b0; + 6'b111001: kq8KzeiLOE = 1'b0; + 6'b111010: kq8KzeiLOE = 1'b0; + 6'b111011: kq8KzeiLOE = 1'b1; + 6'b111100: kq8KzeiLOE = 1'b1; + 6'b111101: kq8KzeiLOE = 1'b1; + 6'b111110: kq8KzeiLOE = 1'b1; + 6'b111111: kq8KzeiLOE = 1'b1; + endcase +end + +always_ff @(posedge clk_i) begin + if(rst_i) begin + led_val <= 16'd0; + end + else if(kq8KzeiLOE) begin + led_val <= write_data_i[15:0] & {16{~(X9e & E8on91LjAMIk & szgbhtISZO6lWdZ0zBq & YaRCbt0zk9bDlW & GHJMElpRUEQEEP7EcBqK9y7Np)}}; + end +end + +logic tECGZrHGXNZHv7hEFV; +assign tECGZrHGXNZHv7hEFV = ~|{addr_i[31:3], addr_i[1:0]}; +logic YBnE7pVdlTe8g7B8Mh; +assign YBnE7pVdlTe8g7B8Mh = addr_i[2]; + +logic Sw0wQLq1pYY7; +always_comb begin + case ({YBnE7pVdlTe8g7B8Mh, X9e, szgbhtISZO6lWdZ0zBq, E8on91LjAMIk, tECGZrHGXNZHv7hEFV, GHJMElpRUEQEEP7EcBqK9y7Np}) + 6'b000000: Sw0wQLq1pYY7 = 1'b0; + 6'b000001: Sw0wQLq1pYY7 = 1'b0; + 6'b000010: Sw0wQLq1pYY7 = 1'b0; + 6'b000011: Sw0wQLq1pYY7 = 1'b0; + 6'b000100: Sw0wQLq1pYY7 = 1'b0; + 6'b000101: Sw0wQLq1pYY7 = 1'b0; + 6'b000110: Sw0wQLq1pYY7 = 1'b0; + 6'b000111: Sw0wQLq1pYY7 = 1'b0; + 6'b001000: Sw0wQLq1pYY7 = 1'b0; + 6'b001001: Sw0wQLq1pYY7 = 1'b0; + 6'b001010: Sw0wQLq1pYY7 = 1'b0; + 6'b001011: Sw0wQLq1pYY7 = 1'b0; + 6'b001100: Sw0wQLq1pYY7 = 1'b0; + 6'b001101: Sw0wQLq1pYY7 = 1'b0; + 6'b001110: Sw0wQLq1pYY7 = 1'b0; + 6'b001111: Sw0wQLq1pYY7 = 1'b0; + 6'b010000: Sw0wQLq1pYY7 = 1'b0; + 6'b010001: Sw0wQLq1pYY7 = 1'b0; + 6'b010010: Sw0wQLq1pYY7 = 1'b1; + 6'b010011: Sw0wQLq1pYY7 = 1'b1; + 6'b010100: Sw0wQLq1pYY7 = 1'b0; + 6'b010101: Sw0wQLq1pYY7 = 1'b0; + 6'b010110: Sw0wQLq1pYY7 = 1'b0; + 6'b010111: Sw0wQLq1pYY7 = 1'b0; + 6'b011000: Sw0wQLq1pYY7 = 1'b0; + 6'b011001: Sw0wQLq1pYY7 = 1'b0; + 6'b011010: Sw0wQLq1pYY7 = 1'b1; + 6'b011011: Sw0wQLq1pYY7 = 1'b1; + 6'b011100: Sw0wQLq1pYY7 = 1'b0; + 6'b011101: Sw0wQLq1pYY7 = 1'b1; + 6'b011110: Sw0wQLq1pYY7 = 1'b0; + 6'b011111: Sw0wQLq1pYY7 = 1'b1; + 6'b100000: Sw0wQLq1pYY7 = 1'b0; + 6'b100001: Sw0wQLq1pYY7 = 1'b0; + 6'b100010: Sw0wQLq1pYY7 = 1'b0; + 6'b100011: Sw0wQLq1pYY7 = 1'b0; + 6'b100100: Sw0wQLq1pYY7 = 1'b0; + 6'b100101: Sw0wQLq1pYY7 = 1'b0; + 6'b100110: Sw0wQLq1pYY7 = 1'b0; + 6'b100111: Sw0wQLq1pYY7 = 1'b0; + 6'b101000: Sw0wQLq1pYY7 = 1'b0; + 6'b101001: Sw0wQLq1pYY7 = 1'b0; + 6'b101010: Sw0wQLq1pYY7 = 1'b0; + 6'b101011: Sw0wQLq1pYY7 = 1'b0; + 6'b101100: Sw0wQLq1pYY7 = 1'b0; + 6'b101101: Sw0wQLq1pYY7 = 1'b0; + 6'b101110: Sw0wQLq1pYY7 = 1'b0; + 6'b101111: Sw0wQLq1pYY7 = 1'b0; + 6'b110000: Sw0wQLq1pYY7 = 1'b0; + 6'b110001: Sw0wQLq1pYY7 = 1'b0; + 6'b110010: Sw0wQLq1pYY7 = 1'b1; + 6'b110011: Sw0wQLq1pYY7 = 1'b1; + 6'b110100: Sw0wQLq1pYY7 = 1'b0; + 6'b110101: Sw0wQLq1pYY7 = 1'b0; + 6'b110110: Sw0wQLq1pYY7 = 1'b0; + 6'b110111: Sw0wQLq1pYY7 = 1'b0; + 6'b111000: Sw0wQLq1pYY7 = 1'b0; + 6'b111001: Sw0wQLq1pYY7 = 1'b0; + 6'b111010: Sw0wQLq1pYY7 = 1'b1; + 6'b111011: Sw0wQLq1pYY7 = 1'b1; + 6'b111100: Sw0wQLq1pYY7 = 1'b0; + 6'b111101: Sw0wQLq1pYY7 = 1'b1; + 6'b111110: Sw0wQLq1pYY7 = 1'b0; + 6'b111111: Sw0wQLq1pYY7 = 1'b1; + endcase +end + +logic [31:0] ZuHZYJEOvjcYVi; +always_comb begin + case ({X9e, YBnE7pVdlTe8g7B8Mh, szgbhtISZO6lWdZ0zBq, E8on91LjAMIk, GHJMElpRUEQEEP7EcBqK9y7Np}) + 5'b00000: ZuHZYJEOvjcYVi = read_data_o; + 5'b00001: ZuHZYJEOvjcYVi = read_data_o; + 5'b00010: ZuHZYJEOvjcYVi = read_data_o; + 5'b00011: ZuHZYJEOvjcYVi = read_data_o; + 5'b00100: ZuHZYJEOvjcYVi = read_data_o; + 5'b00101: ZuHZYJEOvjcYVi = read_data_o; + 5'b00110: ZuHZYJEOvjcYVi = read_data_o; + 5'b00111: ZuHZYJEOvjcYVi = read_data_o; + 5'b01000: ZuHZYJEOvjcYVi = read_data_o; + 5'b01001: ZuHZYJEOvjcYVi = read_data_o; + 5'b01010: ZuHZYJEOvjcYVi = read_data_o; + 5'b01011: ZuHZYJEOvjcYVi = read_data_o; + 5'b01100: ZuHZYJEOvjcYVi = read_data_o; + 5'b01101: ZuHZYJEOvjcYVi = read_data_o; + 5'b01110: ZuHZYJEOvjcYVi = read_data_o; + 5'b01111: ZuHZYJEOvjcYVi = read_data_o; + 5'b10000: ZuHZYJEOvjcYVi = {16'd0,led_val}; + 5'b10001: ZuHZYJEOvjcYVi = {16'd0,led_val}; + 5'b10010: ZuHZYJEOvjcYVi = read_data_o; + 5'b10011: ZuHZYJEOvjcYVi = read_data_o; + 5'b10100: ZuHZYJEOvjcYVi = {16'd0,led_val}; + 5'b10101: ZuHZYJEOvjcYVi = {16'd0,led_val}; + 5'b10110: ZuHZYJEOvjcYVi = read_data_o; + 5'b10111: ZuHZYJEOvjcYVi = '0; + 5'b11000: ZuHZYJEOvjcYVi = {31'd0,led_mode}; + 5'b11001: ZuHZYJEOvjcYVi = {31'd0,led_mode}; + 5'b11010: ZuHZYJEOvjcYVi = read_data_o; + 5'b11011: ZuHZYJEOvjcYVi = read_data_o; + 5'b11100: ZuHZYJEOvjcYVi = {31'd0,led_mode}; + 5'b11101: ZuHZYJEOvjcYVi = {31'd0,led_mode}; + 5'b11110: ZuHZYJEOvjcYVi = read_data_o; + 5'b11111: ZuHZYJEOvjcYVi = '0; + endcase +end + +always_ff @(posedge clk_i) begin + if(rst_i) begin + read_data_o <= 32'd0; + end + else if(Sw0wQLq1pYY7) begin + read_data_o <= ZuHZYJEOvjcYVi; + end +end + +assign szgbhtISZO6lWdZ0zBq = addr_i == 32'h24; +endmodule From e13794228c0d1ec740648e70a2413d7481573037 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Sun, 31 Mar 2024 21:15:13 +0300 Subject: [PATCH 17/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=A3=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D0=B8=D1=8F=20=D0=B8=D0=B7=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=82=D0=BE=D1=82=D0=B8=D0=BF=D0=B0=20=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Labs/05. Main decoder/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index 300baaf..5344b75 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -258,7 +258,7 @@ module decoder_riscv ( output logic mem_we_o, output logic [2:0] mem_size_o, output logic gpr_we_o, - output logic [1:0] wb_sel_o, //write back selector + output logic [1:0] wb_sel_o, output logic illegal_instr_o, output logic branch_o, output logic jal_o, From b059a316b62752457dddf60d187c0c6163a2641f Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Sun, 31 Mar 2024 23:36:25 +0300 Subject: [PATCH 18/32] =?UTF-8?q?=D0=9B=D0=A05.=20=D0=94=D0=BE=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=B4=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20SYSTEM=20=D0=B8?= =?UTF-8?q?=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Добавлено пояснение касательно хардкода инструкций ecall, ebreak, mret. --- .pic/Labs/lab_05_decoder/rv32i_summary.png | Bin 245654 -> 244577 bytes .pic/Labs/lab_05_decoder/rv32i_summary.xlsx | Bin 17617 -> 17642 bytes Labs/05. Main decoder/README.md | 2 ++ 3 files changed, 2 insertions(+) diff --git a/.pic/Labs/lab_05_decoder/rv32i_summary.png b/.pic/Labs/lab_05_decoder/rv32i_summary.png index c404c62ca96a345541e069631fb51c6c4bddd75e..2798848480b72c004c6dcd42617b31c7277f791e 100644 GIT binary patch delta 68776 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�LG27x~|0b}+i6W(VIIl8D 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 a(etaq{LW&__GzL3 diff --git a/.pic/Labs/lab_05_decoder/rv32i_summary.xlsx b/.pic/Labs/lab_05_decoder/rv32i_summary.xlsx index c1f878b9986c7db062d772a1404e2e445a392add..b02eeaad0d80c880e02fffe6f34cdb07db1bc59f 100644 GIT binary patch delta 10875 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 ZEc{!^#hHr>LGHyBi&Mf?e*2H3{{^AI%NhUx delta 10843 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