diff --git a/.pic/Labs/lab_03_memory/fig_01.drawio.svg b/.pic/Labs/lab_03_memory/fig_01.drawio.svg index ec715f4..7647b2f 100644 --- a/.pic/Labs/lab_03_memory/fig_01.drawio.svg +++ b/.pic/Labs/lab_03_memory/fig_01.drawio.svg @@ -1,4 +1,4 @@ -
addr
read_data
M
N
ПЗУ
addr
read_data
M
N
ОЗУ
write_enable
write_data
clk
N
\ No newline at end of file +
addr
addr
read_data
read_data
M
M
N
N
ПЗУ
ПЗУ
addr
addr
read_data
read_data
M
M
N
N
ОЗУ
ОЗУ
write_enable
write_enable
write_data
write_data
clk
clk
N
N
Text is not SVG - cannot display
\ No newline at end of file diff --git a/.pic/Labs/lab_03_memory/fig_03.png b/.pic/Labs/lab_03_memory/fig_03.png new file mode 100644 index 0000000..79193bd Binary files /dev/null and b/.pic/Labs/lab_03_memory/fig_03.png differ diff --git a/.pic/Labs/lab_03_memory/fig_03.xlsx b/.pic/Labs/lab_03_memory/fig_03.xlsx new file mode 100644 index 0000000..ae6533e Binary files /dev/null and b/.pic/Labs/lab_03_memory/fig_03.xlsx differ diff --git a/.pic/Labs/lab_06_main_memory/fig_01.png b/.pic/Labs/lab_06_main_memory/fig_01.png index 79193bd..bf40a6a 100644 Binary files a/.pic/Labs/lab_06_main_memory/fig_01.png and b/.pic/Labs/lab_06_main_memory/fig_01.png differ diff --git a/.pic/Labs/lab_06_main_memory/fig_01.xlsx b/.pic/Labs/lab_06_main_memory/fig_01.xlsx deleted file mode 100644 index 7da6f47..0000000 Binary files a/.pic/Labs/lab_06_main_memory/fig_01.xlsx and /dev/null differ diff --git a/Labs/03. Register file and memory/README.md b/Labs/03. Register file and memory/README.md index ee1b55d..4040dc9 100644 --- a/Labs/03. Register file and memory/README.md +++ b/Labs/03. Register file and memory/README.md @@ -240,6 +240,10 @@ mоdulе instr_mеm( Однако, если у памяти будут 32-битные ячейки, доступ к конкретному байту будет осложнен, ведь каждая ячейка — это 4 байта. Как получить данные третьего байта памяти? Если обратиться к третьей ячейке в массиве — придут данные 12-15-ых байт (поскольку каждая ячейка содержит по 4 байта). Чтобы получить данные третьего байта, необходимо **разделить значение пришедшего адреса на 4** (отбросив остаток от деления). `3 / 4 = 0` — и действительно, если обратиться к нулевой ячейке памяти — будут получены данные 3-го, 2-го, 1-го и 0-го байт. То, что помимо значения третьего байта есть еще данные других байт нас в данный момент не интересует, важна только сама возможность указать адрес конкретного байта. +![../../.pic/Labs/lab_03_memory/fig_03.png](../../.pic/Labs/lab_03_memory/fig_03.png) + +_Рисунок 3. Связь адреса байта и индекса слова в массиве ячеек памяти._ + Деление на 2n можно осуществить, отбросив `n` младших бит числа. Учитывая то, что для адресации 1024 ячеек памяти мы будем использовать 10 бит адреса, память инструкций должна выдавать на выход данные, расположенные по адресу `addr_i[11:2]`. Не смотря на заданный размер памяти инструкций в 1024 32-битных ячейки, на практике удобно параметризовать это значение, чтобы в ситуациях, когда требуется меньше или больше памяти можно было получить обновленное значение, не переписывая код во множестве мест. Подобное новшество вы сможете оценить на практике, получив возможность существенно сокращать время синтеза процессора, уменьшая размер памяти до необходимого минимума путем изменения значения одного лишь параметра. diff --git a/Labs/06. Main memory/README.md b/Labs/06. Main memory/README.md index 8c6e9e0..de7f4f9 100644 --- a/Labs/06. Main memory/README.md +++ b/Labs/06. Main memory/README.md @@ -24,7 +24,9 @@ Давайте разберемся как это будет работать. Допустим, мы хотим записать значение `0xA5` по адресу `0x6`. Поскольку мы работаем с байтовой адресацией, как и при реализации памяти инструкций, пришедший адрес необходимо будет разделить на 4 (см. _рис. 1_). В итоге мы получим указатель на первую 32-битную ячейку памяти (`6 / 4 = 1`). Однако, чтобы пришедшие данные были в итоге записаны не в нулевой байт первого слова (четвертый байт памяти), во второй, мы будем использовать сигнал `byte enable`, второй бит которого будет равен единице. +![../../.pic/Labs/lab_06_main_memory/fig_01.png](../../.pic/Labs/lab_06_main_memory/fig_01.png) +_Рисунок 3. Связь адреса байта с индексом слова в массиве ячеек памяти и сигналом byte enable._ Чтобы данные остальных байт не были испорчены, при описании памяти на SystemVerilog нужно разделить запись в отдельные байты. Для того, чтобы получить доступ к отдельным диапазонам бит ячейки памяти, после указания индекса ячейки необходимо указать диапазон бит, к которым вы хотите получить доступ. К примеру, чтобы получить доступ к битам с 5-го по 3-ий 18-ой ячейки памяти, необходимо использовать следующую запись: