Skip to content

Commit eac937a

Browse files
committed
ЛР6. Восстановление логики ready.
Перечитав спеку АПБ, я понял что ведущие устройства все-таки могут хардкодить ready в 1.
1 parent 8588385 commit eac937a

File tree

3 files changed

+4
-4
lines changed

3 files changed

+4
-4
lines changed

.pic/Labs/lab_06_main_memory/fig_02.wavedrom.svg

Lines changed: 1 addition & 1 deletion
Loading

.pic/Labs/lab_06_main_memory/fig_03.wavedrom.svg

Lines changed: 1 addition & 1 deletion
Loading

Labs/06. Main memory/README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ _Рисунок 2. Операции запросов на чтение._
101101

102102
_Рисунок 3. Операции запросов на запись._
103103

104-
Перед выходом `ready_o` должен стоять регистр, в который каждый такт записывается значение `mem_req_i` (см. _рис. 2_). Такая простая логика этого сигнала обеспечивается тем, что любой запрос обрабатывается гарантированно за 1 такт. В реальности, обращение в память может занимать сотни тактов процессора, причем их число бывает недетерминированным (нельзя заранее предсказать сколько тактов займет очередной запрос в память). Именно поэтому стандартные интерфейсы обычно используют такие сигналы как `ready` или `valid`, позволяющие синхронизировать разные блоки системы.
104+
Выход `ready_o` в данном модуле должен всегда быть равен нулю, поскольку данные всегда будут выдаваться на следующий такт. В реальности, обращение в память может занимать сотни тактов процессора, причем их число бывает недетерминированным (нельзя заранее предсказать сколько тактов займет очередной запрос в память). Именно поэтому стандартные интерфейсы обычно используют такие сигналы как `ready` или `valid`, позволяющие синхронизировать разные блоки системы. Сигнал `ready_o` в нашем интерфейсе используется сигнала о задержке в выдаче данных. В случае, если устройству нужно больше одного такта, чтобы выдать данные, он устанавливает на данный сигнал значение `0` до тех пор, пока данные не будут готовы.
105105

106106
## Порядок выполнения работы
107107

@@ -114,7 +114,7 @@ _Рисунок 3. Операции запросов на запись._
114114
3. Перед тем как обратиться к ячейке памяти, значение с `addr_i` необходимо преобразовать по аналогии с памятью инструкций.
115115
4. Обратите внимание что работа с памятью должна осуществляться только когда сигнал `mem_req_i == 1`. В противном случае запись не должна производиться, а на шине `read_data_o` должен оставаться результат предыдущего чтения.
116116
5. При этом запись должна вестись только в те байты выбранной ячейки памяти, которым соответствуют биты сигнала `byte_enable_i`, выставленные в `1`.
117-
6. У памяти есть дополнительный выход `ready_o`, перед которым необходимо реализовать регистр, в который каждый такт записывается значение `mem_req_i`.
117+
6. У памяти есть дополнительный выход `ready_o`, который всегда равен единице.
118118
3. После описания памяти данных, её необходимо проверить с помощью тестового окружения.
119119
1. Тестовое окружение находится [`здесь`](tb_data_mem.sv).
120120
2. Для запуска симуляции воспользуйтесь [`этой инструкцией`](../../Vivado%20Basics/Run%20Simulation.md).

0 commit comments

Comments
 (0)