ЛР6. Восстановление логики ready.

Перечитав спеку АПБ, я понял что ведущие устройства все-таки могут
хардкодить ready в 1.
This commit is contained in:
Andrei Solodovnikov
2024-07-02 10:51:19 +03:00
parent 85883858ac
commit abdc91a70f
3 changed files with 4 additions and 4 deletions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 58 KiB

After

Width:  |  Height:  |  Size: 55 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 57 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@@ -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).