[an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Цифровые сигнальные процессоры (DSP) и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено ВН 09 октября 2003 г. 22:02
В ответ на: Перенос вопроса по программированию распознавания речи в корень (+) отправлено rebrov 09 октября 2003 г. 15:44

Не думаю, что внесу большую ясность, но ответить на часть вопросов попытаюсь. По вопросу 1 ничего сказать не могу вообще, поскольку распознаванием речи никогда не занимался.
По вопросам 2 и 3 ответ совмещенный.
Дело в том, что DSP, или большая часть из них, ориентированы на максимально эффективное выполнение алгоритмов, основной операцией которых является умножение с накоплением, MAC. Да еще с одновременным чтением из памяти данных, необходимых для следующей операции MAC.
Да еще с поддержкой циклической или битреверсной адресации.
В разных DSP по разному это осуществляется. Это может быть, в целочисленных DSP, например, многоразрядный аккумулятор, например 40 разрядный при 16-ти разрядном DSP. Это может быть просто несколько, в параллель работающих, умножителей и сумматоров, а связь между ними через регистровый файл. И т.д. Это собственно MAC. Плюс к нему генераторы адресов следующих данных. Они, эти генераторы, очень часто выделены в отдельный узел, со своим АЛУ, своими регистрами.
Или, по крайней мере, со своим АЛУ, регистры могут быть общими с регистрами основного вычислителя. Требуемые типы адресации и определяют характеристики адресного АЛУ. А типы эти - автоинкремент, декремент с, часто, произвольным величиной этого инкремента-декремента. Бывают с пост, бывают с пре. Индексная. Абсолютная. Дважды косвенная отсутствует. Ну и на некоторые типы может накладываться либо цикличность, либо битреверс. То, что это АЛУ умеет делать, то и выполняется наиболее эффект. То, что не умеет, а надо, может целое дело вызвать в DSP с отдельными адресными регистрами. Теперь про память. Собственно для того же MAC требуется 2 операнда. И читаются они из памяти одновременно. И одновременно с чтением инструкции. Т.е. память многодоступная должна быть. Опять же по разному делают. У некоторых явное разделение на память программ и память данных, с возможностью одновременного чтения из памяти программ инструкции и каких-то, констант, коэффициентов. И одновременно с этим чтение данных из памяти данных. У некоторых блочное построение памяти, блоки могут быть многопортовыми, могут однопортовыми. В одних блоках могут быть размещены и программа и данные, в других только программа и коэффициенты, константы. Здесь тоже варианты.
У третьих DSP 2 кэша - один кэш данных, другой программ. В общем вариантов много.
Но все это разнообразие эффективно при использовании внутрикристальной памяти DSP. Она, кстати, может быть довольно большой. Как дело доходит до внешней памяти начинаются тормоза. Шина, по которой DSP обращается к внешн. памяти, одна. Так что даже физическое разделение внешней памяти на память программ и память данных, или еще как, одновременности обращения не даст.
Ну помогают кэши, там где они есть.
Еще про память, точнее про адресное пространство, оно не всегда непрерывное.
Стэк. Тоже разнообразие. От аппаратного, и очень неглубокого, до нормального, в памяти.
Регистры общего назначения. В общем общего назначения они как раз редко бывают. Обычно это хранилище данных.
Некоторые имеют явно выделенный регистровый файл, у других таковыми регистрами являются по сути регистры арифметических устройств, у третьих, наряду с регистрами ар. устройств, могут выделяются куски в памяти.
Это я привязал основные особенности DSP к MAC. Это не означает, что остальные инструкции выполняются абы как, или нет других особенностей. Есть. Скажем наличие сдвигателя, выполняющего "косой"
сдвиг. Поддержка каких-то специальных операций.
Не знаю почему, но С на DSP далеко не всегда использует, или эффективно использует, возможности DSP. Обычно, если требуется эффективность, практически всю математику, критичную по времени, приходится писать на ассемблере. На C остаются одни вызовы ассембл. ф-й. Хотя можно все и на C, но не эффективно это, по моему.
По компактности кода, думаю он компактнее получается, чем на PC.
Но зависит от процессора.
Время уже много, пора домой, но еще немного.
С типами данных. Например в TMSc6x int это 32 разряда, а 16 это short.
В TMSC54 и int и short по 16, к тому же char тоже вроде 16, если он вообще есть, не поддерживают 54 байтовую адресацию.
По указателям. Тоже тонкости возможны. Скажем и 54 и 55 поддерживают аппаратно расположение 32-х разрядных слов как по четному, так и по нечетному адресу.
А в c6x у меня были какие-то проблемы с приведением типов указателей, сейчас уже не помню.
Все, заканчиваю. Может что-то пояснил Вам. Больше не могу. Труба, в лице охранников, зовет.

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru