From abdc91a70fc50fbed1d12b51589f385f669057c1 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Tue, 2 Jul 2024 10:51:19 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A06.=20=D0=92=D0=BE=D1=81=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BB?= =?UTF-8?q?=D0=BE=D0=B3=D0=B8=D0=BA=D0=B8=20ready.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Перечитав спеку АПБ, я понял что ведущие устройства все-таки могут хардкодить ready в 1. --- .pic/Labs/lab_06_main_memory/fig_02.wavedrom.svg | 2 +- .pic/Labs/lab_06_main_memory/fig_03.wavedrom.svg | 2 +- Labs/06. Main memory/README.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.pic/Labs/lab_06_main_memory/fig_02.wavedrom.svg b/.pic/Labs/lab_06_main_memory/fig_02.wavedrom.svg index 8fb468c..12837c9 100644 --- a/.pic/Labs/lab_06_main_memory/fig_02.wavedrom.svg +++ b/.pic/Labs/lab_06_main_memory/fig_02.wavedrom.svg @@ -1,4 +1,4 @@ -clkmem_req_iaddr_i0x80x90x4write_enable_iread_data_o0xDEAD_BEEF0xBABE_FACE0xFA11_1EAFready_o \ No newline at end of file +clkmem_req_iaddr_i0x80x90x4write_enable_iread_data_o0xDEAD_BEEF0xBABE_FACE0xFA11_1EAF \ No newline at end of file diff --git a/.pic/Labs/lab_06_main_memory/fig_03.wavedrom.svg b/.pic/Labs/lab_06_main_memory/fig_03.wavedrom.svg index 8857455..30cf9d4 100644 --- a/.pic/Labs/lab_06_main_memory/fig_03.wavedrom.svg +++ b/.pic/Labs/lab_06_main_memory/fig_03.wavedrom.svg @@ -1,4 +1,4 @@ -clkmem_req_iwrite_enable_ibyte_enable_i0b11110b00010b00110b11000b1111write_data_i0xDEAD_BEEF0xBABE_FACE0xFA11_1EAF0xFE11_0BAD0x000000000xAFmem[addr]0x000000000xDEAD_BEEF0xDEAD_BECE0xDEAD_1EAF0xFE11_1EAF0x00000000 \ No newline at end of file +clkmem_req_iaddr_i0x80x90x40x60xCwrite_enable_ibyte_enable_i0b11110b00100b00110b11000b1111write_data_i0xDEAD_BEEF0x5555_55550xFACE_FACE0xBABE_BABE0x00000000mem[addr]0x000000000xDEAD_BEEF0xDEAD_55EF0xDEAD_FACE0xBABE_FACE0x00000000 \ No newline at end of file diff --git a/Labs/06. Main memory/README.md b/Labs/06. Main memory/README.md index 9dd4c1d..8c6e9e0 100644 --- a/Labs/06. Main memory/README.md +++ b/Labs/06. Main memory/README.md @@ -101,7 +101,7 @@ _Рисунок 2. Операции запросов на чтение._ _Рисунок 3. Операции запросов на запись._ -Перед выходом `ready_o` должен стоять регистр, в который каждый такт записывается значение `mem_req_i` (см. _рис. 2_). Такая простая логика этого сигнала обеспечивается тем, что любой запрос обрабатывается гарантированно за 1 такт. В реальности, обращение в память может занимать сотни тактов процессора, причем их число бывает недетерминированным (нельзя заранее предсказать сколько тактов займет очередной запрос в память). Именно поэтому стандартные интерфейсы обычно используют такие сигналы как `ready` или `valid`, позволяющие синхронизировать разные блоки системы. +Выход `ready_o` в данном модуле должен всегда быть равен единице, поскольку данные всегда будут выдаваться на следующий такт. В реальности, обращение в память может занимать сотни тактов процессора, причем их число бывает недетерминированным (нельзя заранее предсказать сколько тактов займет очередной запрос в память). Именно поэтому стандартные интерфейсы обычно используют такие сигналы как `ready` или `valid`, позволяющие синхронизировать разные блоки системы. Сигнал `ready_o` в нашем интерфейсе используется сигнала о задержке в выдаче данных. В случае, если устройству нужно больше одного такта, чтобы выдать данные, он устанавливает на данный сигнал значение `0` до тех пор, пока данные не будут готовы. ## Порядок выполнения работы @@ -114,7 +114,7 @@ _Рисунок 3. Операции запросов на запись._ 3. Перед тем как обратиться к ячейке памяти, значение с `addr_i` необходимо преобразовать по аналогии с памятью инструкций. 4. Обратите внимание что работа с памятью должна осуществляться только когда сигнал `mem_req_i == 1`. В противном случае запись не должна производиться, а на шине `read_data_o` должен оставаться результат предыдущего чтения. 5. При этом запись должна вестись только в те байты выбранной ячейки памяти, которым соответствуют биты сигнала `byte_enable_i`, выставленные в `1`. - 6. У памяти есть дополнительный выход `ready_o`, перед которым необходимо реализовать регистр, в который каждый такт записывается значение `mem_req_i`. + 6. У памяти есть дополнительный выход `ready_o`, который всегда равен единице. 3. После описания памяти данных, её необходимо проверить с помощью тестового окружения. 1. Тестовое окружение находится [`здесь`](tb_data_mem.sv). 2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).