diff --git a/Labs/03. Register file and memory/board files/README.md b/Labs/03. Register file and memory/board files/README.md index 2b8d0cd..5d19559 100644 --- a/Labs/03. Register file and memory/board files/README.md +++ b/Labs/03. Register file and memory/board files/README.md @@ -12,51 +12,70 @@ ## Описание используемой периферии +Периферия показана на _рис. 2_. + +![../../../.pic/Labs/board%20files/nexys_rf_riscv_control.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_control.drawio.svg) + +_Рисунок 2. Описание периферии, доступной прототипу, в виде рисунка._ + - ### Переключатели и кнопки. Для работы с регистровым файлом, необходимо выставлять сигналы адресов и данных. У платы недостаточно переключателей для такого количества входов регистрового файла, поэтому адреса и данные задаются одним источником ввода: - 1. Ввод **адресов** (`read_address1_i`/`read_address2_i`/`write_address_i`) регистрового файла осуществляется через переключатели `SW[14:0]`. Соответствие следующее: + 1. Ввод **адресов** (`read_addr1_i`/`read_addr2_i`/`write_addr_i`) регистрового файла осуществляется через переключатели `SW[14:0]`. Соответствие следующее: - - `SW[ 4: 0]` — `write_address_i` - - `SW[ 9: 5]` — `read_address2_i` - - `SW[14:10]` — `read_address1_i` + - `SW[ 4: 0]` — `write_addr_i` + - `SW[ 9: 5]` — `read_addr2_i` + - `SW[14:10]` — `read_addr1_i` - Для того чтобы выставить введенные адреса на входные порты регистрового файла, необходимо нажать кнопку `BTND`. Таким образом, происходит запоминание адресов в элемент памяти. - 1. Ввод **данных** (`write_data_i`) регистрового файла осуществляется через переключатели `SW[15:0]`. Таким образом, можно выставить только нижние 16 бит данных. Для записи введенных данных по адресу `write_address_i` используется кнопка `BTNR`. + Для того чтобы выставить введенные адреса на входные порты регистрового файла, необходимо нажать кнопку `BTND` (`addr_en` на _рис. 2_). Таким образом, происходит запоминание адресов в элемент памяти. + 1. Ввод **данных** (`write_data_i`) регистрового файла осуществляется через переключатели `SW[15:0]`. Таким образом, можно выставить только нижние 16 бит данных. Для записи введенных данных по адресу `write_addr_i` используется кнопка `BTNR` (`we` на _рис. 2_). - ### Светодиоды - Светодиоды `LED[14:0]` отображают адреса (`read_address1_i`/`read_address2_i`/`write_address_i`), которые выставлены в данный момент на порты регистрового файла: + Светодиоды `LED[14:0]` отображают адреса (`read_addr1_i`/`read_addr2_i`/`write_addr_i`), которые выставлены в данный момент на порты регистрового файла: - - `LED[ 4: 0]` — `write_address_i` - - `LED[ 9: 5]` — `read_address2_i` - - `LED[14:10]` — `read_address1_i` + - `LED[ 4: 0]` — `write_addr_i` + - `LED[ 9: 5]` — `read_addr2_i` + - `LED[14:10]` — `read_addr1_i` - ### Семисегментные индикаторы На левом блоке семисегментных индикаторов (индикаторы 7-4) отображаются нижние 16 бит порта `read_data1_o`, а не правом блоке семисегментных индикаторов (индикаторы 3-0) отображаются нижние 16 бит порта `read_data2_o`. -Управление регистровым файлом. + Числа отображаются в **шестнадцатеричном** формате. -![../../../.pic/Labs/board%20files/nexys_rf_riscv_control.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_control.drawio.svg) +## Выполнение операций с регистровым файлом на прототипе -Ниже показан пример последовательности действий для работы с платой. +Доступные операции: запись, чтение. -Установка значения `5'b10101` на входы `A1`,`A2`,`A3`. +- ### Запись -![../../../.pic/Labs/board%20files/nexys_rf2.jpg](../../../.pic/Labs/board%20files/nexys_rf2.jpg) + Рассмотрим последовательность действий, необходимых для осуществления записи в регистровый файл на примере. Запишем значение 0x1234 в регистр 5. -Запись информации по адресу А3. + 1. Сразу после прошивки, как видно по не горящим светодиодам, на портах регистрового файла выставлены нулевые адреса. Нам нужно изменить адрес записи, поэтому выставим на переключателях значение 5 и нажмем кнопку `BTND` (смотри _рис. 3_). -![../../../.pic/Labs/board%20files/nexys_rf3.jpg](../../../.pic/Labs/board%20files/nexys_rf3.jpg) + ![../../../.pic/Labs/board%20files/nexys_rf_riscv_write_addr.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_write_addr.drawio.svg) -Чтение по адресам А1 и А2. + _Рисунок 3. Выставление адреса 5 на порт `write_addr_i` регистрового файла._ -![../../../.pic/Labs/board%20files/nexys_rf4.jpg](../../../.pic/Labs/board%20files/nexys_rf4.jpg) + Обратите внимание: на светодиодах сразу после нажатия кнопки отображается адрес 5. + 1. Чтобы записать данные в регистр выставим на переключателях значение 0x1234 и нажмем кнопку `BTNR` (смотри _рис. 4_). -Для того чтобы считать информацию по любому адресу, достаточно установить желаемый адрес на один из портов чтения и нажать на кнопку чтения. + ![../../../.pic/Labs/board%20files/nexys_rf_riscv_write_data.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_write_data.drawio.svg) -![../../../.pic/Labs/board%20files/nexys_rf5.jpg](../../../.pic/Labs/board%20files/nexys_rf5.jpg) + _Рисунок 4. Запись 0x1234 в регистр 5._ -Попробуйте записать информацию в нулевой регистр, затем по другим адресам, после чего считайте записанную информацию и убедитесь, что она соответствует той, которую вы записывали (с учетом особенностей регистрового файла RISC-V). +- ### Чтение + + Рассмотрим последовательность действий, необходимых для осуществления чтения из регистрового файла на примере. Прочитаем из регистра 5 заранее записанное значение 0x1234 и выведем его на оба блока семисегментных индикаторов 7-0 и 3-0. + + Выставим значение 5 на блоки переключателей `ra1` и `ra2` (см. _рис. 2_), и нажмем кнопку `BTND`, чтобы обновить адрес значением с переключателей (см. _рис. 5_). + + ![../../../.pic/Labs/board%20files/nexys_rf_riscv_read.drawio.svg](../../../.pic/Labs/board%20files/nexys_rf_riscv_read.drawio.svg) + + _Рисунок 5. Чтение из регистра 5._ + + Обратите внимание на то, что для чтения достаточно выставить нужный адрес на порт регистрового файла, и содержимое регистра оказывается считанным. + +Попробуйте записать информацию в нулевой регистр, затем по другим адресам. После чего считайте записанную информацию и убедитесь, что она соответствует той, которую вы записывали (с учетом особенностей регистрового файла RISC-V).