From 247c9466614e1200cc571b1af90e085c38f70ec0 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Thu, 18 Jul 2024 13:59:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B5=D0=B9=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=8F=D1=82=D0=BE=D0=B9=20=D0=B2=20=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D1=8F=D0=B4=D0=BA=D0=B0=D1=85=20=D0=B2=D1=8B=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BB=D0=B0=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80=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 +- Labs/04. Primitive programmable device/README.md | 2 +- Labs/05. Main decoder/README.md | 2 +- Labs/06. Main memory/README.md | 2 +- Labs/07. Datapath/README.md | 4 ++-- Labs/08. Load-store unit/README.md | 2 +- Labs/10. Interrupt subsystem/README.md | 4 ++-- Labs/11. Interrupt integration/README.md | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Labs/03. Register file and memory/README.md b/Labs/03. Register file and memory/README.md index 547e6aa..d9ec956 100644 --- a/Labs/03. Register file and memory/README.md +++ b/Labs/03. Register file and memory/README.md @@ -340,7 +340,7 @@ mоdulе rf_r𝚒sсv( 1. Путем добавления мультиплексора перед выходным сигналом чтения (мультиплексор будет определять, пойдут ли на выход данные из ячейки регистрового файла, либо, в случае если адрес равен нулю, на выход пойдет константа ноль). 2. Путем инициализации нулевого регистра нулевым значением и запретом записи в этот регистр (при записи и проверки write_enable добавить дополнительную проверку на адрес). 3. Каким образом будет реализована эта особенность регистрового файла не важно, выберите сами. - 3. После описания регистрового файла, его необходимо проверить с помощью [`тестового окружения`](../../Basic%20Verilog%20structures/Testbench.md). + 3. После описания регистрового файла его необходимо проверить с помощью [`тестового окружения`](../../Basic%20Verilog%20structures/Testbench.md). 1. Тестовое окружение находится [`здесь`](tb_rf_riscv.sv). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_rf_riscv`). diff --git a/Labs/04. Primitive programmable device/README.md b/Labs/04. Primitive programmable device/README.md index c6da067..b515615 100644 --- a/Labs/04. Primitive programmable device/README.md +++ b/Labs/04. Primitive programmable device/README.md @@ -353,7 +353,7 @@ endmodule 3. Сигнала разрешения записи в регистровый файл 4. Мультиплексор, выбирающий слагаемое для программного счетчика 5. Мультиплексор, выбирающий источник записи в регистровый файл. -3. После описания модуля, его необходимо проверить с помощью [`тестового окружения`](../../Basic%20Verilog%20structures/Testbench.md). +3. После описания модуля его необходимо проверить с помощью [`тестового окружения`](../../Basic%20Verilog%20structures/Testbench.md). 1. Тестовое окружение находится [`здесь`](tb_cybercobra.sv). 2. Программа, которой необходимо проинициализировать память инструкций находится в файле [program.mem](program.mem). Алгоритм работы программы приведен в разделе [`Финальный обзор`](#финальный-обзор). 3. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). diff --git a/Labs/05. Main decoder/README.md b/Labs/05. Main decoder/README.md index dcd83b5..5874de7 100644 --- a/Labs/05. Main decoder/README.md +++ b/Labs/05. Main decoder/README.md @@ -428,7 +428,7 @@ endmodule 6. Определив тип операции, вы сможете определить какая конкретно операция по полям `func3` и `func7` (если данный тип имеет такие поля). 7. Не забывайте, что в случае, если на каком-то из этапов (определения типа, или определения конкретной операции) вам приходит непредусмотренное ISA значение какого-либо поля, необходимо выставить сигнал `illegal_instr_o`. 8. В случае некорректной инструкции, вы должны гарантировать, что не произойдет условный/безусловный переход, а во внешнюю память, регистровый файл, а также регистры контроля и статуса ничего не запишется. Не важно, что будет выполняться на АЛУ, не важно какие данные будут выбраны на мультиплексоре источника записи. Важно чтобы не произошел сам факт записи в любое из устройств (подумайте какие значения для каких сигналов необходимо для этого выставить). -3. После описания модуля, его необходимо проверить с помощью тестового окружения. +3. После описания модуля его необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [`здесь`](tb_decoder_riscv.sv). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 3. Перед запуском симуляции убедитесь, что выбран правильный модуль верхнего уровня. diff --git a/Labs/06. Main memory/README.md b/Labs/06. Main memory/README.md index dd14ba0..3be4757 100644 --- a/Labs/06. Main memory/README.md +++ b/Labs/06. Main memory/README.md @@ -119,7 +119,7 @@ _Рисунок 3. Операции запросов на запись._ 4. Обратите внимание что работа с памятью должна осуществляться только когда сигнал `mem_req_i == 1`. В противном случае запись не должна производиться, а на шине `read_data_o` должен оставаться результат предыдущего чтения. 5. При этом запись должна вестись только в те байты выбранной ячейки памяти, которым соответствуют биты сигнала `byte_enable_i`, выставленные в `1`. 6. У памяти есть дополнительный выход `ready_o`, который всегда равен единице. - 3. После описания памяти данных, её необходимо проверить с помощью тестового окружения. + 3. После описания модуля его необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [`здесь`](tb_data_mem.sv). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_data_mem`). diff --git a/Labs/07. Datapath/README.md b/Labs/07. Datapath/README.md index 147e2cf..78cddd7 100644 --- a/Labs/07. Datapath/README.md +++ b/Labs/07. Datapath/README.md @@ -61,7 +61,7 @@ _Рисунок 1. Микроархитектура ядра процессор Кроме того, в данной микроархитектуре используется пять различных видов констант (соответствующих определенным типам инструкций). -Константы `I`, `U`, `S` используются для вычисления адресов и значений. Поэтому все эти константы должны быть подключены к АЛУ. А значит теперь, для выбора значения для операндов требуются мультиплексоры, определяющие что именно будет подаваться на АЛУ. +Константы `I`, `U`, `S` используются для вычисления адресов и значений. Поэтому все эти константы должны быть подключены к АЛУ. А значит теперь, для выбора значения для операндов требуются мультиплексоры, определяющие, что именно будет подаваться на АЛУ. Обратите внимание на константу `imm_U`. В отличие от всех остальных констант, она не знакорасширяется, вместо этого к ней "приклеивается" справа 12 нулевых бит. @@ -205,7 +205,7 @@ _Листинг 2. Программа из Листинга 1, представ 6. В конце останется описать логику работы программного счетчика. 3. Создайте в проекте новый `SystemVerilog`-файл `riscv_unit.sv` и опишите в нем модуль `riscv_unit`, объединяющий ядро процессора (`riscv_core`) с памятями инструкция и данных. 1. **При создании объекта модуля `riscv_core` в модуле `riscv_unit` вы должны использовать имя сущности `core` (т.е. создать объект в виде: `riscv_core core(...`)**. -3. После описания модуля, его необходимо проверить с помощью тестового окружения. +3. После описания модуля его необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [`здесь`](tb_riscv_unit.sv). 2. Программа, которой необходимо проинициализировать память инструкций находится в файле [`program.mem`](program.mem). 3. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). diff --git a/Labs/08. Load-store unit/README.md b/Labs/08. Load-store unit/README.md index 7c16498..f7cdadf 100644 --- a/Labs/08. Load-store unit/README.md +++ b/Labs/08. Load-store unit/README.md @@ -236,7 +236,7 @@ _Рисунок 6. Структурная схема модуля `riscv_lsu`._ 1. При описании обратите внимание на то, что большая часть модуля является чисто комбинационной. В этом плане реализация модуля будет частично похожа на реализацию декодера. 1. При описании мультиплексоров, управляемых сигналом core_size_i посредством конструкции `case`, не забывайте описать блок `default`, иначе вы получите защелку! 2. Однако помимо комбинационной части, в модуле будет присутствовать и один регистр. -3. После описания модуля, его необходимо проверить с помощью тестового окружения. +3. После описания модуля его необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [здесь](tb_lsu.sv). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_lsu`). diff --git a/Labs/10. Interrupt subsystem/README.md b/Labs/10. Interrupt subsystem/README.md index f7016b2..1e28fda 100644 --- a/Labs/10. Interrupt subsystem/README.md +++ b/Labs/10. Interrupt subsystem/README.md @@ -391,7 +391,7 @@ endmodule 1. В `Design Sources` проекта с предыдущих лаб, создайте `SystemVerilog`-файл `csr_controller.sv`. 2. Опишите в нем модуль `csr_controller` с таким же именем и портами, как указано в [задании](#задание). 3. Обратите внимание на наличие импорта пакета `csr_pkg`, данный пакет содержит адреса используемых регистров контроля и статуса, которыми будет удобно пользоваться при реализации модуля. -3. После описания модуля, его необходимо проверить с помощью тестового окружения. +3. После описания модуля его необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [здесь](tb_csr.sv). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_csr`). @@ -400,7 +400,7 @@ endmodule 5. Реализуйте модуль `interrupt_controller`. Для этого: 1. В `Design Sources` проекта с предыдущих лаб, создайте `SystemVerilog`-файл `interrupt_controller.sv`. 2. Опишите в нем модуль `interrupt_controller` с таким же именем и портами, как указано в [задании](#задание). -6. После описания модуля, его необходимо проверить с помощью тестового окружения. +6. После описания модуля его необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [здесь](tb_irq.sv). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md). 3. Перед запуском симуляции убедитесь, что в качестве top-level модуля выбран корректный (`tb_irq`). diff --git a/Labs/11. Interrupt integration/README.md b/Labs/11. Interrupt integration/README.md index 332eae0..f0bb1fc 100644 --- a/Labs/11. Interrupt integration/README.md +++ b/Labs/11. Interrupt integration/README.md @@ -26,4 +26,4 @@ _Рисунок 1. Схема без выделения новых частей 1. Обратите внимание, что что в модуле `riscv_core` появились новые входные и выходные сигналы: `irq_req_i` и `irq_ret_o`. Эти сигналы должны быть использованы при подключении `riscv_core` в модуле `riscv_unit`. 1. Ко входу `irq_req_i` должен быть подключен провод `irq_req`, другой конец которого пока не будет ни к чему подключен (в следующей лабораторной это будет изменено). 2. К выходу `irq_ret_o` необходимо подключить провод `irq_ret`, который также пока не будет использован. -2. После интеграции модулей, проверьте процессорную систему с помощью [программы](irq_program.mem), текст которой [был представлен](../10.%20Interrupt%20subsystem#пример-обработки-перехвата) в ЛР10 с помощью предоставленного [тестбенча](tb_irq_unit.sv). \ No newline at end of file +2. После интеграции модулей проверьте процессорную систему с помощью [программы](irq_program.mem), текст которой [был представлен](../10.%20Interrupt%20subsystem#пример-обработки-перехвата) в ЛР10 с помощью предоставленного [тестбенча](tb_irq_unit.sv). \ No newline at end of file