From 322e142966c527a2e0f07de9b4935337197e1f66 Mon Sep 17 00:00:00 2001 From: Andrei Solodovnikov Date: Thu, 1 Aug 2024 15:05:41 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D0=A015.=20=D0=98=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BD=D0=B5=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B0=D0=B2=D1=82=D0=BE=D0=BC=D0=B0?= =?UTF-8?q?=D1=82=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fig_03.drawio.svg | 2 +- Labs/15. Programming device/README.md | 22 +++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/.pic/Labs/lab_15_programming_device/fig_03.drawio.svg b/.pic/Labs/lab_15_programming_device/fig_03.drawio.svg index a71e2eb..623a533 100644 --- a/.pic/Labs/lab_15_programming_device/fig_03.drawio.svg +++ b/.pic/Labs/lab_15_programming_device/fig_03.drawio.svg @@ -1,4 +1,4 @@ -
INIT MSG
FLASH
FLASH
ACK
WAIT
TX
DONE
FINISH
RCV
SIZE
SIZE
ACK
send_fin
size_fin
send_fin
flash_fin
send_fin
! tx_busy
size_fin & next_round
size_fin &
! next_round
RCV
NEXT
COMAND
rst_i
\ No newline at end of file +
INIT MSG
INIT MSG
FLASH
FLASH
FLASH
ACK
FLASH...
FINISH
FINISH
RCV
SIZE
RCV...
SIZE
ACK
SIZE...
send_fin
send_fin
size_fin
size_fin
send_fin
send_fin
flash_fin
flash_fin
send_fin
send_fin
size_fin & next_round
size_fin &...
size_fin &
! next_round
size_fin &...
RCV
NEXT
COMAND
RCV...
rst_i
rst_i
Text is not SVG - cannot display
\ No newline at end of file diff --git a/Labs/15. Programming device/README.md b/Labs/15. Programming device/README.md index b3a3457..fcb854e 100644 --- a/Labs/15. Programming device/README.md +++ b/Labs/15. Programming device/README.md @@ -252,7 +252,7 @@ _Рисунок 3. Граф перехода между состояниями Данный автомат реализует следующий алгоритм: 1. Получение команды ("запись очередного блока" / "программирование завершено"). Данная команда представляет собой адрес записи очередного блока, и в случае, если адрес равен 0xFFFFFFFF, это означает команду "программирование завершено". - 1. В случае получения команды "программирование завершено", модуль отправляет финальное сообщение и завершает свою работу. + 1. В случае получения команды "программирование завершено", модуль завершает свою работу, снимая сигнал сброса с процессора. 2. В случае получения команды "запись очередного блока" происходит переход к п. 2. 2. Модуль отправляет сообщение о готовности принимать размер очередного блока. 3. Выполняется передача размера очередного блока. @@ -294,30 +294,29 @@ import bluster_pkg::INIT_MSG_SIZE; import bluster_pkg::FLASH_MSG_SIZE; import bluster_pkg::ACK_MSG_SIZE; -(* mark_debug = "false" *) enum logic [2:0] { +enum logic [2:0] { RCV_NEXT_COMMAND, INIT_MSG, RCV_SIZE, SIZE_ACK, FLASH, FLASH_ACK, - WAIT_TX_DONE, FINISH} state, next_state; logic rx_busy, rx_valid, tx_busy, tx_valid; -(* mark_debug = "false" *) logic [7:0] rx_data, tx_data; +logic [7:0] rx_data, tx_data; -(* mark_debug = "false" *)logic [5:0] msg_counter; -(* mark_debug = "false" *)logic [31:0] size_counter, flash_counter; -(* mark_debug = "false" *)logic [3:0] [7:0] flash_size, flash_addr; +logic [5:0] msg_counter; +logic [31:0] size_counter, flash_counter; +logic [3:0] [7:0] flash_size, flash_addr; logic send_fin, size_fin, flash_fin, next_round; -(* mark_debug = "false" *)assign send_fin = (msg_counter == 0) && !tx_busy; -(* mark_debug = "false" *)assign size_fin = (size_counter == 0) && !rx_busy; -(* mark_debug = "false" *)assign flash_fin = (flash_counter == 0) && !rx_busy; -(* mark_debug = "false" *)assign next_round = (flash_addr != '1) && !rx_busy; +assign send_fin = (msg_counter == 0) && !tx_busy; +assign size_fin = (size_counter == 0) && !rx_busy; +assign flash_fin = (flash_counter == 0) && !rx_busy; +assign next_round = (flash_addr != '1) && !rx_busy; logic [7:0] [7:0] flash_size_ascii, flash_addr_ascii; // Блок generate позволяет создавать структуры модуля цикличным или условным @@ -599,6 +598,7 @@ _Листинг 6. Пример использования скрипта для 1. Для инициализации памяти процессорной системы используется скрипт [flash.py](flash.py). 2. Перед инициализацией необходимо подключить отладочный стенд к последовательному порту компьютера и узнать номер этого порта (см. [пример загрузки программы](#пример-загрузки-программы)). 3. Формат файлов для инициализации памяти с помощью скрипта аналогичен формату, использовавшемуся в [тестбенче](lab_15_tb_bluster.sv). Это значит что первой строчкой всех файлов должна быть строка, содержащая адрес ячейки памяти, с которой должна начаться инициализация (см. п. 5.1.2). +10. В текущем исполнении, инициализировать память системы можно только 1 раз с момента сброса, что может оказаться не очень удобным при отладке программ. Подумайте, как можно модифицировать конечный автомат программатора таким образом, чтобы получить возможность в неограниченном количестве инициализаций памяти без повторного сброса всей системы. ## Список источников