
Руководство пользователя по сигнальным процессорам Sharc
.pdf
Хост-интерфейс 8
Когда хост процессор записывает 32 разрядное слово при 16 разрядной упаковке, используя те же самые, показанные на рис. 8.8 стандартные аппаратные средства интерфейса шины, происходит такая последовательность событий (см. рис. 8.5):
♦Хост процессор инициирует цикл записи, выводя адрес записи, выставляя (если запись асинхронная) и
(низкий уровень).
♦ADSP 2106х выставляет REDY, когда готов принять данные.
♦Хост процессор выводит адрес и первое 16 разрядное слово и сбрасывает (высокий уровень).
♦АDSP 2106х фиксирует первое 16 разрядное слово.
Рис. 8.5. Временные диаграммы при упаковке данных хостинтерфейсом
291
8 Хост-интерфейс
♦Хост процессор снова выводит адрес и инициирует новый цикл записи для второго 16 разрядного слова, выставляя .
♦Когда ADSP 2106х принял второе слово, он выполняет внутреннюю прямую запись в память (или в отображенный в памяти регистр IOP). Если до начала новой передачи хост процессора внутренняя запись ADSP 2106х не завершилась, эта новая передача будет задержана сигналом REDY.
Если ADSP 2106х ожидает следующее 16 разрядное слово от хост процессора для завершения приема упакованного слова, биты HPS в регистре SYSTAT будут ненулевыми (см. «Биты состояния регистра SYSTAT»). Поскольку хост интерфейс имеет только один буфер упаковки, хост процессор должен полностью завершать каждое чтение или запись упакованных данных до начала следующего.
8.5.4. Упаковка 48-разрядных команд
Хост процессор может также загружать и выгружать 48 разрядные команды по 16 или 32 разрядной шине. Последовательность упаковки при загрузке команд ADSP 2106х по 32 разрядной шине хост процессора (HPM=11) занимает три цикла для каждых двух слов, как показано ниже. 32 разрядные данные пересылаются по линиям 47 16 шины данных (DATA47 16). Если пересылается нечетное число командных слов, буфер упаковки должен быть очищен фиктивной записью для удаления неиспользуемого слова.
Упаковка слова 32 → 48 бит (шина хост&процессора « ADSP&2106х):
|
Линии шины данных 47 32 |
Линии шины данных 31 16 |
первая передача |
слово 1, биты 47 32 |
слово 1, биты 31 16 |
вторая передача |
слово 2, биты 15 0 |
слово 1, биты 15 0 |
третья передача |
слово 2, биты 47 32 |
слово 2, биты 31 16 |
При упаковке 32 → 48 бит HMSWF регистра SYSCON игнорируется.
Упаковка каждого слова при загрузке или выгрузке команд ADSP 2106х по 16 разрядной шине хост процессора занимает три цикла (см. ниже). Порядок упаковки – то есть какое из 16 разрядных слов, старшее или младшее, упаковывается первым – определяет бит HMSWF в регистре SYSCON.
Упаковка слова 16 → 48, при HMSWF=1 (шина хост&процессора « ADSP&
2106х):
|
Линии шины данных 31 16 |
первая передача |
слово 1, биты 47 32 |
вторая передача |
слово 1, биты 31 16 |
третья передача |
слово 1, биты 15 0 |
292

Хост-интерфейс 8
40 разрядные данные повышенной точности могут передаваться с применением режима 48 разрядной упаковки. Размещение в памяти слов различной разрядности рассматривается в главе Память данного руководства.
8.6. Биты состояния в регистре SYSTAT
Регистр SYSTAT содержит информацию о состоянии ADSP 2106x и многопроцессорной системы. В табл. 8.5 представлены биты состояния этого регистра.
Биты |
Определение |
HSTM |
(Host Mastership) – управление шиной хост процессором |
BSYN |
(Bus Synchronization) – синхронизация шины |
CRBM |
(Current Bus Master) – текущий ведущий ADSP 2106х |
|
(ID2 0 ведущего ADSP 2106х ) |
IDC |
(ID Code) – код ID (ID2 0 этого ADSP 2106х) |
DWPD |
(Direct Write Pending) – задержка прямой записи |
VIPD |
(Vector Interrupt Pending) – задержка векторного прерывания |
HPS |
(Host Packing Status) – состояние упаковки при передаче хост |
процессора |
|
Таблица 8.5. Биты состояния SYSTAT
31 |
30 |
29 |
28 |
27 |
26 |
25 |
24 |
|
|
23 |
22 |
21 |
20 |
|
|
19 |
18 |
17 |
16 |
||||||
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
0 |
0 |
0 |
0 |
|
|
0 |
0 |
0 |
0 |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
|
|
7 |
6 |
5 |
4 |
|
|
3 |
2 |
1 |
0 |
||||||
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
|
0 |
0 |
0 |
|
|
|
0 |
0 |
0 |
0 |
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
HSTM
Управление шиной хост-процессором BSYN
Синхронизация шины CRBM
Текущий ведущий IDC
Код идентификатора DWPD
Задержка прямой записи VIPD
Задержка векторного прерывания
HPS
Состояние упаковки при передаче хост-процессора 00 = упаковка завершена
01 = первый этап любого режима упаковки и распаковки 10 = вторая этап упаковки/распаковки 16 - 48 или 32 - 48 бит
Рис. 8.6. Регистр SYSTAT
293
8 Хост-интерфейс
HSTM |
Управление шиной хост&процессором. Указывает, что хост процессор |
|
|
управляет шиной. |
|
|
1 |
= хост процессор – ведущий |
|
0 |
= хост процессор – не ведущий |
BSYN |
Синхронизация шины. Указывает, когда логика арбитража шины |
|
|
синхронизирована после сброса (см. «Синхронизация шины после |
|
|
сброса» в главе Многопроцессорная система). |
|
|
1 |
= Логика арбитража шины синхронизирована |
|
0 |
= Логика арбитража шины не синхронизирована |
CRBM |
Текущий ведущий. Указывает код ID того ADSP 2106x, который |
|
|
является текущим ведущим. Если CRBM равен ID этого ADSP 2106x, |
|
|
то он является ведущим. Значение CRBM истинно только для ID>0. |
|
|
Когда ID2 0=000, CRBM всегда равен 1. |
|
IDC |
Код идентификатора. Указывает значения на выводах ID2 0 ADSP 2106x. |
|
DWPD |
Задержка прямой записи. Указывает, что прямая запись во |
|
|
внутреннюю память отложена. Бит DWPD обнулен, когда прямая |
|
|
запись выполнена (прямая запись, может быть задержана на несколько |
|
|
циклов, если цепочка операций DMA на подходе или происходит |
|
|
запрос DMA с более высоким приоритетом. Максимальная задержка – |
|
|
12 циклов). |
|
|
1 |
= есть задержка прямой записи |
|
0 |
= нет задержки прямой записи |
VIPD |
Задержка векторного прерывания. Указывает, что отложенное |
|
|
векторное прерывание еще не было обработано. Бит VIPD |
|
|
устанавливается, когда в регистр VIRPT производится запись и |
|
|
сбрасывается после возврата из программы обработки прерывания. |
|
|
Ведущий ADSP 2106x (или хост процессор), который выдает |
|
|
векторное прерывание, должен контролировать этот бит, чтобы |
|
|
определить, когда программа обработки была завершена и когда может |
|
|
быть выдано новое векторное прерывание. |
|
|
1 |
= есть задержка векторного прерывания |
|
0 |
= нет задержки векторного прерывания |
HPS |
Состояние упаковки при передаче хост&процессора. Указывает, |
|
|
завершена или нет упаковка слова и какая стадия процесса происходит. |
|
|
00 = упаковка выполнена |
01 = 1 этап всех режимов упаковки и распаковки
10 = 2 этап упаковки/распаковки 16 в 48 или 32 в 48 бит
294
Хост-интерфейс 8
8.7. Межпроцессорные сообщения и векторные прерывания
Запросив и получив управление ADSP 2106х, хост процессор связывается с ADSP 2106х путем записи сообщений в отображенные в память регистры IOP. Самыми простым способом связи для хост процессора является асинхронная запись. В многопроцессорной системе хост процессор может обращаться к внутренней памяти и регистрам IOP каждого ADSP 2106х.
Регистры MSGR0 MSGR7 – универсальные регистры, которые удобно использовать для передачи сообщений между хост процессором и ADSP 2106х. Они также могут использоваться для реализации семафоров и совместного использования ресурсов между несколькими АDSP 2106х. Регистры MSGRx и VIRPT могут использоваться для передачи сообщений следующими способами:
♦Передача сообщений. Хост процессор для связи с ADSP 2106х может использовать любой из 8 регистров сообщений, MSGR0 MSGR7.
♦Векторные прерывания. Хост процессор может генерировать векторное прерывание ADSP 2106х, записывая адрес программы обработки прерывания в регистр VIRPT. Это немедленно вызывает высокоприоритетное прерывание ADSP 2106х, которое заставит ADSP 2106х перейти к определенной программе обработки.
Регистры MSGRx и VIRPT поддерживают при помощи внешнего порта работу многопроцессорных систем с совместным использованием шины. Так как эти регистры могут совместно использоваться внутри одного ADSP 2106х, возможно возникновение конфликтных ситуаций. Ваше системное программное обеспечение должно предотвращать эти конфликты. Более подробно конфликты, возникающие при обращениям к регистрам IOP, обсуждаются в приложении
Регистры управления/состояния данного руководства.
8.7.1. Передача сообщений (MSGRx)
Есть три программных протокола, в соответствии с которыми хост процессор может связываться с ADSP 2106х через регистры сообщений MSGRx: с помощью 1) векторных прерываний, 2) регистров квитирования и 3) обратной записи в регистры.
При использовании метода на основе векторных прерываний хост процессор заполняет заранее определенные регистры MSGRx данными и вызывает векторное прерывание при помощи записи адреса программы обработки в VIRPT. Программа обработки должна считать данные из регистров MSGRx и затем обнулить VIRPT, сообщая тем самым хост процессору о своем завершении.
295
8 Хост-интерфейс
Программа обработки может также использовать один из сигналов FLAG3 0 ADSP 2106х, чтобы сообщить хост процессору о своем окончании.
При использовании метода регистров квитирования четыре из регистров МSGRx должны быть обозначены следующим образом: регистр приема (R), регистр квитирования приема (RH), регистр передачи (T) и регистр квитирования передачи (TH). Для передачи данных в ADSP 2106х хост процессор должен записать данные в T и затем записать «1» в TH. Когда ADSP 2106x увидит «1» в TH, он считает данные из T и запишет «0» в TH. Когда хост процессор увидит «0» в TH, он будет знать, что передача завершилась. Аналогичная последовательность происходит при передаче данные из ADSP 2106х через R и RH хост процессору.
Метод обратной записи в регистры подобен методу регистров квитирования, но использует только регистры данных T и R. Хост процессор записывает данные в T. Когда ADSP 2106х видит в Т ненулевую величину, он считывает ее и записывает «0» обратно в T. Подобная последовательность осуществляется при приеме данных хост процессором. Это более простой метод, и он хорошо работает, пока данные, подлежащие передаче, не содержат «0».
8.7.2. Векторные прерывания хост-процессора (VIRPT)
Векторные прерывания используются для межпроцессорного взаимодействия между хост процессором и ADSP 2106х или между двумя ADSP 2106х. Когда внешний процессор записывает адрес в регистр VIRPT ADSP 2106х, происходит векторное прерывание.
При обработке векторного прерывания ADSP 2106х автоматически помещает данные в стек состояния и начинает выполнять программу обработки, размещенную по адресу, указанному в VIRPT. Младшие 24 бита VIRPT содержат адрес; в старшие 8 бит могут по желанию помещаться данные, которые впоследствии могут быть использованы программой обработки прерывания. При сбросе VIRPT инициализируется стандартным адресом из таблицы векторов прерываний ADSP 2106х.
Минимальное время ожидания обработки векторных прерываний – шесть циклов, пять из которых являются пустыми (NOP). Когда программой обработки достигается команда RTI (Return From Interrupt, возврат из прерывания), ADSP 2106х автоматически извлекает данные из стека состояния.
Бит VIPD регистра SYSTAT отражает состояние регистра VIRPT. Если в VIRPT записывается адрес в то время, как обработка предыдущего прерывания отложена, адрес нового вектора заменяет адрес отложенного. Если в VIRPT записывается адрес во время обработки предыдущего векторного прерывания,
296
Хост-интерфейс 8
адрес нового вектора игнорируется и новое прерывание не генерируется. Если ADSP 2106х записывает адрес в свой собственный регистр VIRPT, прерывание также не генерируется.
Для использования возможности векторных прерываний ADSP 2106х последовательность действий, производимая хост процессором и ADSP 2106х при генерации прерывания, должна быть такой:
1.Опрашивать регистр VIRPT, пока хост процессор не считает определенное значение маркера (то есть нуль).
2.Записать адрес программы обработки векторного прерывания в VIRPT.
3.Когда программа обработки закончена, ADSP 2106х должен записать маркер обратно в VIRPT, чтобы указать, что программа закончена и можно инициировать следующее векторное прерывание.
Бит DWPD регистра SYSTAT (см. раздел «Биты состояния регистра SYSTAT») указывает, есть ли отложенная прямая запись во внутреннюю память. Прямые записи и обращения к регистрам IOP могут завершаться в различной последовательности. Если, например, хост процессор выполняет прямую запись в память ADSP 2106х и затем записывает данные в регистр IOP ADSP 2106х, запись в регистр IOP может завершиться раньше прямой записи. По этой причине прямая запись, выполняемая непосредственно перед записью адреса векторного прерывания в VIRPT, может задерживаться до окончания перехода к обработке прерывания:
1.Хост процессор выполняет прямую запись во внутреннюю память ADSP 2106х.
2.Хост процессор генерирует векторное прерывание путем записи адреса в регистр VIRPT ADSP 2106х. Прямая запись при этом задерживается.
3.ADSP 2106х переходит к программе обработки векторного прерывания.
4.Прямая запись завершается после начала программы обработки прерывания.
Для предотвращения появления такой ситуации хост процессор перед записью в регистр VIRPT ADSP 2106х должен удостовериться, что все прямые записи завершены. Это может быть выполнено путем опроса бита DWPD в SYSTAT ADSP 2106х после выполнения прямой записи. Запись в VIRPT следует производить после обнуления DWPD.
8.8. Интерфейс системной шины
Подсистема ADSP 2106х, состоящая из нескольких ADSP 2106х с локальной памятью, может рассматриваться как один из отдельных исполнительных
297

8 Хост-интерфейс |
элементов, соединенных между собой системной шиной. Примерами таких систем |
являются устройства на шинах EISA, PCI или даже отдельные массивы ADSP |
2106х. Исполнительные элементы в такой системе получают управление |
системной шиной посредством устройства арбитража. Каждое устройство на |
шине, которое желает управлять ею, должно быть способно генерировать сигнал |
запроса шины и отвечать на сигнал предоставления шины. Устройство арбитража |
определяет, какой запрос будет удовлетворен в каждом конкретном цикле. |
8.8.1. Обращение к шине ADSP-2106х ведомым ADSP-2106х |
На рис. 8.7 приведен пример основного интерфейса системной шины, который |
изолирует локальную шину ADSP 2106х от системной шины. Когда к системе |
нет обращений от внешних ADSP 2106х, локальная шина поддерживает |
передачи между другими локальными ADSP 2106х и/или локальной внешней |
памятью или устройствами. |
Когда система желает обратиться к локальному ADSP 2106х, она осуществляет |
чтение или запись в адресное пространство подсистемы ADSP 2106х. |
Рис. 8.7. Основной интерфейс системной шины |
298
Хост-интерфейс 8
Компаратор внешнего адреса обнаруживает обращение к локальному ADSP 2106х и выставляет и соответствующую линию
. Системная шина удерживается сигналом REDY пока ADSP 2106х не будет готов принять данные. Сигнал
разрешает работу буферов системной шины. Направление передачи данных через буферы управляется сигналами чтения или записи. Чтобы избежать ложного срабатывания на линии
по высокоуровневой
помехе при изменении адресов, работа компаратора адреса может управляться системным сигналом разрешения фиксации адреса или сигналами системного
чтения или записи. Эти методы вызывают сброс каждый раз, когда сбрасываются сигналы системного чтения или записи либо изменяется адрес. В связи с тем, что в этих методах
сбрасывается при каждом обращении, затраты на HTC становятся частью каждой передачи. Избежать подобного рода затрат можно запиранием
на время длительных последовательностей передач по шине.
8.8.2. Обращение к системной шине ведущим ADSP-2106х
На рис. 8.8 представлен более общий двунаправленный интерфейс системы, в котором подсистема ADSP 2106х может обращаться к системной шине, становясь ведущей. Перед началом обращения ADSP 2106х должен запросить разрешение на то, чтобы стать ведущим, генерируя сигнал запроса системной
шины (, System Bus Request). Устройство арбитража системной шины
определяет, когда ответить сигналом предоставления системной шины (,
System Bus Grant). В этой системе каждый ведущий генерирует запросы и отвечает на них при помощи собственной уникальной пары сигналов.
Метод, который ADSP 2106х использует для получения управления системной шиной, зависит от того, кем осуществляется доступ: ядром процессора ADSP 2106х или контроллером DMA. Эти два существенно различающихся метода описаны ниже в разделах «Обращение ядра процессора к системной шине» и «Обращения по DMA ADSP 2106х к системной шине».
8.8.2.1. Обращение ядра процессора к системной шине
Ядро процессора ADSP 2106х может проводить арбитраж системной шины, устанавливая флаг и ожидая на другом входе флага. Преимущество подобного подхода состоит в том, что локальная шина при ожидании не занята. Если сигнал
привязан ко входу прерывания, то во время ожидания может продолжаться полезная работа.
299

8 Хост-интерфейс |
|
|
|
При другом методе предпринимается попытка обращения в предположении, что |
|||
системная шина доступна. Если она недоступна, обращающееся устройство либо |
|||
ждет, пока шина станет доступна, либо прекращает обращение. ADSP 2106х |
|||
начинает обращение к системной шине, выставляя сигнал одной из линий |
|||
выбора памяти |
(memory select), а также |
. Если системная шина |
|
недоступна, то есть |
сброшен, ADSP 2106х должен удерживаться сигналом |
||
ACK. Этот метод довольно прост, но при нем происходит захват локальной шины |
|||
со стороны ADSP 2106х при каждом обращении к занятой системной шине. Во |
|||
избежание этого следует использовать команду 10 типа: |
|
||
IF condition JUMP(addr), ELSE compute, DM(addr)=dreg |
|||
Эта команда прерывает обращение к шине, если условие ( |
) ложно, и |
||
переходит к процедуре «попытаться позже». Если не использовать команду 10 |
|||
типа, то в ситуации, когда попытка обращения осуществляется до получения |
|||
Рис. 8.8. Двунаправленный интерфейс системной шины |
|||
Замечание: контроллер памяти для совместно используемой внешней памяти должен |
|||
генерировать состояния ожидания и сигнал REDY при обращениях хост процессора к памяти. |
300