Опубликован: 19.04.2025 | Доступ: свободный | Студентов: 1 / 0 | Длительность: 07:05:00
Лекция 11:

Подключение периферийных устройств и расширение системы

Декодирование адреса

Декодер адреса для обеспечения сигнала выбора HSELx для каждой ведомой шины, сигнал выбора генерируется путем комбинирования логического адреса с кодом декодирования. Только после того, как текущая передача данных будет завершена (значение HREADY будет высоким), будут выбраны адрес ведомого устройства и управляющие сигналы, а также значение HSELx. В этом случае это может произойти при определенных условиях: при генерации сигнала HSELx значение HREADY будет низким, значение slave изменится после текущей передачи. У каждого ведомого устройства наименьшее адресное пространство - 1 Кбайт, ограничение на пакетную передачу у ведущего устройства составляет 1 Кбайт, что позволяет избежать трансграничных проблем. Когда проект не будет использовать все адресное пространство, может появиться доступ для устранения несуществующей ситуации, что требует добавления дополнительного подчиненного устройства по умолчанию для обеспечения ответа на вышеуказанную ситуацию. Когда адрес доступа к передаче, не соответствующий стандарту или SEQ, не существует, должен быть выдан ответ об ошибке ведомого устройства по умолчанию; когда доступ к адресу, указанному в режиме BUSY или ожидания, не существует, ведомое устройство по умолчанию отвечает нормально. Декодер адресов может работать с подчиненной функцией по умолчанию.

Арбитраж

Механизм арбитража гарантирует, что в любой момент времени доступ к шине может получить только ведущий сервер. арбитр определяет, какой запрос на доступ к шине может быть выдан для доступа к шине, это достигается с помощью алгоритма приоритета. Спецификация AHB не содержит алгоритма приоритета, разработчикам необходимо определить конкретные системные требования. Как правило, арбитр, не прерывая пакетную передачу, передает право доступа к шине другому ведущему. Конечно, пакетная передача неопределенной длины прерывается, это зависит от того, как задан алгоритм приоритета. 4. Если пакет данных прерывается, когда мастер снова получает доступ, оставшаяся часть передается. Сумма длительности передачи в передаче INCR8 прерывается через 3 такта, мастер снова получает авторизацию доступа, мы продолжаем передачу в течение оставшихся 5 тактов, оставшаяся часть может состоять из ОДНОГО INCR4 и композиции, или из INCR. HBUSREQx: ведущий запрашивает доступ к сигналам арбитра. HLOCKx: Указывает, не может ли быть выполнено прерывание передачи, в то время как сигнал отправляется от ведущего к арбитру и HBUSREQx. HGRANTx: генерируется сигнал главного арбитра, указывающий на авторизацию, когда сигнал высокий, а HGRANTx HREADY высокий, ведущий сервер шины может передавать сигнал по указанному адресу. HMASTER [3: 0]: генерируется главный арбитр, который указывает на авторизацию, сигнал управления адресом для мультиплексора, позволяющий выбрать доступ к главному шине. HMASTERLOCK: генерируется арбитр, указывающий, является ли текущая передача последовательностью блокировки передачи. HSPLIT: поддержка использования разделения передачи

Шина Wishbone

Шина обычно используется для подключения центрального процессора и периферийных устройств.

Простейшая версия Wishbone - Wishbone Classic Standard.

Сигналы шины:

  1. CLK_I: тактовый вход;
  2. STB_O: высокий уровень означает, что мастер хочет отправить запрос;
  3. ACK_I: Высокий уровень означает, что подчиненное устройство обрабатывает запрос;
  4. ADR_O: адрес, который мастер хочет прочитать или записать;
  5. WE_O: независимо от того, хочет ли мастер читать или записывать;
  6. DAT_O: данные, которые мастер хочет записать;
  7. SEL_O: разрешение чтения / записи байтов мастера;
  8. DAT_I: данные, считываемые ведущим устройством из ведомого устройства;
  9. CYC_O: включить сигнал шины.

Пример временных диаграмм работы Wishbone Classic Standard

Пример временных диаграмм работы Wishbone Classic

Рис. 11.27. Пример временных диаграмм работы Wishbone Classic

Классический конвейерный протокол Wishbone

Приведенный выше стандартный протокол Wishbone Classic очень прост, но он сталкивается с проблемой: предположим, что реализацией является контроллер SRAM, который имеет задержку чтения на один цикл, т. е. адрес задается за один цикл, а результат недоступен до следующего цикла. В стандарте Wishbone Classic будет получаться следующее - рис.:

  • ведущий выдает адрес чтения 0x01, затем контроллер SRAM начинает считывание, но данные еще не считаны обратно, поэтому ACK_I=0.
  • SRAM завершает чтение, вводит прочитанные данные 0x12 в DAT_I и устанавливает ACK_I=1.
  • ведущий выдает следующий адрес чтения 0x02, SRAM должен начать чтение снова;
  • SRAM завершает второе чтение, помещает прочитанные данные 0x34 в DAT_I и устанавливает ACK_I=1.
Временные диаграммы Wishbone Classic при работе с контроллером памяти

Рис. 11.28. Временные диаграммы Wishbone Classic при работе с контроллером памяти

Особых с функционированием нет, но каждые два цикла может выполняться только одна операция чтения, что не лучшим образом сказывается на производительности.

Как решить эту проблему? Мы указываем первый адрес на этапе а) и получаем первые данные на этапе б), затем, если мы можем указать второй адрес на этапе б), мы можем получить вторые данные на этапе в). Таким образом, конвейерная операция чтения может выполняться один раз за такт. Для корректной работы такого конвейерного запроса протокол необходимо немного изменить.

Идея проста: поскольку стандарт Wishbone Classic считает, что первый запрос находится на рассмотрении в цикле б), пусть первый запрос будет выполнен ранее в цикле а), за исключением того, что его данные будут недоступны до цикла б). Фактически, операцию чтения в это время можно рассматривать как разделенную на две части: сначала ведущее устройство отправляет запрос на чтение подчиненному устройству, который выполняется в цикле а); затем ведомое устройство отправляет результат чтения ведущему устройству, который выполняется в цикле б). Изменения следующие:

  • добавляется сигнал STALL_I:CYC_O=1 && STB_O=1 && STALL_I=0 - показывает запрос на чтение;
  • изменяется семантика сигнала ACK_I:CYC_O=1 && STB_O=1 && ACK_I=1 ответ на запрос чтения.
Временные диаграммы двух последовательных циклов чтения шины  Wishbone Classic Pipelined bus

Рис. 11.29. Временные диаграммы двух последовательных циклов чтения шины Wishbone Classic Pipelined bus

В итоге протокол работы Wishbone Classic Pipelined следующий:

  • ведущий запрашивает чтение адреса 0x01, ведомый получает запрос на чтение (STALL_O=0);
  • ведомый возвращает результат запроса на чтение 0x12 и устанавливает ACK_I=1; в то же время, когда ведущий запрашивает адрес чтения 0x02, подчиненное устройство получает запрос на чтение (STALL_O=0)
  • ведомое устройство возвращает результат запроса на чтение 0x34 и устанавливает ACK_I=1; ведущее устройство больше не инициирует запрос и устанавливает STB_O=0
  • все запросы завершены, выставляем CYC_O=0

Таким образом, мы ведомое устройство, которое выполняет одну операцию чтения за цикл, пусть и со сдвигом по времени на такт.

Заключение

Как видно, из рассмотренных шин самой простой является Wishbon, и именно поэтому она столь популярная в проектах с открытым кодом.

Шины AXI, AHB безусловно являются наиболее продвинутыми и комплексными, обеспечивая и арбитраж, и различные типы передачи. Данные шины больше подходят для достаточно крупных проектов, ориентированных на интеграцию с аналогичными модулями, или в процессорную систему с аппаратными процессорами (как в сериях Zynq или старших сериях Cyclone V). Обычной практикой при работе с AXI/AHB является включение в проект IP-ядер с указанными интерфейсами в проекты - как правило, фирменные среды разработки для FPGA предоставляют достаточно широкий выбор, даже в свободном доступе без лицензирования.

Литература

  1. http://adaptivesupport.amd.com/s/article/1053914?language=en_US
  2. http://support.xilinx.com/s/topic/0TO2E000000YNxCWAW/axi-basics-series?tabset-50c42=2
  3. http://habr.com/ru/articles/572926/
  4. http://www.codetd.com/en/article/15908184
  5. http://www.sobyte.net/post/2022-06/wishbone/
  6. http://programmersought.com/article/50562238743/