|
ADSP BF532 и TMS320C6745, помогите с выбором |
|
|
|
Mar 26 2018, 13:51
|
Местный
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126
|
Здравствуйте.
Ищу процессор в QFP корпусе, который будет производительнее, чем ADSP BlackFin BF532. Цель: запуск обильного кода с 2D графикой (bitblt, colorkey, alfablending) + немножко 3D (поворот, перенос, масштабирование), тригонометрия. + эмуляция процессоров -8 и 16 бит: Z80, 6502, M68000. + декодирование видео (H264, MJPEG,...) аудио (MP3, FLAC)
Пробовал собирать эмуляторы на BF532, разогнал до 700 МГц. Иногда эмуляция всей системы не достигает 60 FPS из-за отсутствия floating point, медленной производительности.
В качестве кандидата на замену рассматриваю : TMS320C6745 - доступен, корпус QFP, 475 МГц, шина SDRAM 32 бита, есть floating point, VLIW до 6 команд одновременно. Вроде как лучше чем BF532 ? Или даст выигрыш по сравнению с 532-м незначительно?
Сообщение отредактировал __inline__ - Mar 26 2018, 13:53
|
|
|
|
|
Mar 26 2018, 15:00
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(__inline__ @ Mar 26 2018, 16:51) В качестве кандидата на замену рассматриваю : TMS320C6745 - доступен, корпус QFP, 475 МГц, шина SDRAM 32 бита, есть floating point, VLIW до 6 команд одновременно. Вроде как лучше чем BF532 ? Или даст выигрыш по сравнению с 532-м незначительно? Так если Вы говорите что OMAP-L137 есть уже в QFP, то почему тогда не его? Там помимо DSP, ещё 3 ядра - думаю не лишние будут По-крайней мере у меня ARM-ядро всей периферией занималось, разгружая DSP для вычислений. + ещё два PRU-ядра, которые предназначены для эмуляции недостающей периферии (для Ваших эмуляторов может как раз подойдут), имеют очень параллельную систему команд (как смутно вспоминается - одна команда кодирует сразу несколько операций). Правда в моё время для PRUSS можно было писать только на асм - си-компилёра не существовало. Но может уже сделали. PS: Да и кроме OMAP-L137 есть ещё его собрат: OMAP-L138 - он по скорости такой-же, только вроде поддерживает DDR, имеет немного другой набор периферии и у него дефолтным ядром является - ARM (у L137 дефолтное - DSP). Правда насколько помню, в BGA он имел бОльшее кол-во ног, так что его может и не быть в QFP.
|
|
|
|
|
Mar 28 2018, 05:51
|
Местный
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126
|
Цитата(_pv @ Mar 26 2018, 17:09) allwinner V3s У вас есть опыт работы с этим камнем без пингвина и ведра? Внешней шины для подключения дополнительной периферии, наподобие как FSMC у STM32 у V3s как я понял нет? Если так - прощай дисплеи с контроллерами и своей памятью .. Цитата(jcxz @ Mar 26 2018, 15:00) Так если Вы говорите что OMAP-L137 есть уже в QFP, то почему тогда не его? Там помимо DSP, ещё 3 ядра - думаю не лишние будут Тот что в QFP OMAPL137-HT недоступен для заказа из-за политики США по отношению к РФ. В БГА мне неинтересно.
Сообщение отредактировал __inline__ - Mar 28 2018, 05:49
|
|
|
|
|
Mar 28 2018, 11:24
|
Местный
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126
|
Смотрю в даташит на 6745 и вижу - 2 шины EMIF A, B, что очень радует. Но огорчила урезанность шин в 2 раза в QFP корпусе: вместо 32- и 16- имеем 16- и 8- соответственно. Посему возник вопрос. Планирую дисплей с шиной 16 бит (LCD, не тупая матрица) соединить по шине 8 бит. Можно ли сделать 16-битность дисплею таким макаром: Код CPU LCD
D0-----D0 D1-----D1 D2-----D2 D3-----D3 D4-----D4 D5-----D5 D6-----D6 D7-----D7
BA0----D8 BA1----D9 A0------D10 A1------D11 A2 ------D12 A3------D13 A4------D14 A5------D15
A12-----Command/Data CS[]-----LCD CS nWR-----LCD nWR Pull Up----LCD nRD И обращаться к регистрам/ данным дисплея так: обращаться к памяти LCD: Код *(int*)(LCD_Data_Base|(Data>>8))=Data; к командам: Код *(int*)(LCD_Command_Base|(Command>>8))=Command; Всёравно для дисплея нужен только 1 адресный бит, более ничего на шине не будет. А SDRAM будет висеть на 16-битной шине. Пройдет или нет? Правда , ещё DMA-пересылки надо будет хорошо продумать при таком подключении
Сообщение отредактировал __inline__ - Mar 28 2018, 11:26
|
|
|
|
|
Mar 28 2018, 18:34
|
Гуру
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954
|
Цитата(__inline__ @ Mar 28 2018, 12:51) У вас есть опыт работы с этим камнем без пингвина и ведра? нет, и скорее всего граблей там будет предостаточно, учитывая китайскую документацию. но как будто пингвин это что-то плохое. Цитата(__inline__ @ Mar 28 2018, 12:51) Внешней шины для подключения дополнительной периферии, наподобие как FSMC у STM32 у V3s как я понял нет? Если так - прощай дисплеи с контроллерами и своей памятью .. там есть параллельный 24х видео выход, и он даже support i80 interface with 18/16/9/8 bit, если не врут. ну а вообще мелкая cpld за <1$ параллельную шину для дисплея сделать может даже из SDIO какого-нибудь. раз уж так надо именно дисплей со своим контроллером подключить, хотя дисплей со своим контроллером при наличии на борту памяти и видеовыхода - "троллейбус из буханки черного или белого хлеба.jpg" Цитата(__inline__ @ Mar 28 2018, 12:51) В БГА мне неинтересно. qfp и производительность гораздо больше чем у блэкфина, sdram, и дисплей - тут или трусы снимите или крестик наденьте.
|
|
|
|
|
Mar 29 2018, 00:23
|
Местный
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126
|
Цитата(_pv @ Mar 28 2018, 19:34) нет, и скорее всего граблей там будет предостаточно, учитывая китайскую документацию. там есть параллельный 24х видео выход, и он даже support i80 interface with 18/16/9/8 bit, если не врут. Смотрел даташит на v3s и схему камдроида на нём и пришёл к 2-м печальным выводам: 1) шина там только на 8 бит 2) и только RGB, а не i8080, управляющих стробов (nWR,nRD,nCS) я не нашёл, также как и их описания в даташите. Кусок подключения LCD к v3s в камдроиде:
Цитата(_pv @ Mar 28 2018, 19:34) ну а вообще мелкая cpld за <1$ параллельную шину для дисплея сделать может даже из SDIO какого-нибудь. раз уж так надо именно дисплей со своим контроллером подключить, И проиграть в помехозащищённости - гнать БИТОВЫЙ клок, который должен быть в 8- или в -16 раз больше по частоте чтобы битики в байты преобразовать (некий параллельный регистр с последовательной загрузкой). Ну и нагромождение. Цитата(_pv @ Mar 28 2018, 19:34) хотя дисплей со своим контроллером при наличии на борту памяти и видеовыхода - "троллейбус из буханки черного или белого хлеба.jpg" А один фиг тупую матрицу прийдётся цеплять на SPI или I2S, так что одним RGB-интерфейсом не отделаешься! А вот если i8080 - то это уже сказка! Но беда в том, что C6745 который мне так понравился в QFP содержит только 16 и 8 битную шину, а хочется 32 и 16 как в БГА Цитата(_pv @ Mar 28 2018, 19:34) qfp и производительность гораздо больше чем у блэкфина, sdram, и дисплей - тут или трусы снимите или крестик наденьте. Нашёл тут ещё кандидата - STM32H743 - у него 1 Мбайт внутренней оперативы на частоте 400 МГц- весь код эмулятора туда можно затолкать, 32 бита SDRAM - на случай если некоторвые эмуляторы не поместятся + чтение РОМ-ов для эмуляторов + спроецированная FatFS - всё в SDRAM! Ну и RGB интерфейс там 24-битный (в корпусе LQFP208 точно!) и 32 разряда на SDRAM. И ещё питание одно - 3.3V, нет дополнительного гемороя с питанием как в Оллвиннерах и C6745. Ядро Cortex-M7 с его вкусным многооперандными командами Ассемблера типа: addeq r0,r1,r2 LSL r3 - 4 действия в одном - это лучше чем BF532 на 400 МГц и его 16-битной шиной! И наличие плавающей точки! И QFP корпус. И шить можно ST-LINK-ом то бишь дискавери. И 2D- ускоритель с 2-D DMA, цвет прозрачности, BitBlt - это всё для эмуляторов нужно!! Одни плюсы! В общем вижу его в кандидатах на замену 532-го.
|
|
|
|
|
Mar 29 2018, 04:35
|
Гуру
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954
|
Цитата(__inline__ @ Mar 29 2018, 07:23) Смотрел даташит на v3s и схему камдроида на нём и пришёл к 2-м печальным выводам: 1) шина там только на 8 бит 2) и только RGB, а не i8080, управляющих стробов (nWR,nRD,nCS) я не нашёл, также как и их описания в даташите. мы наверное в разные даташиты смотрим. 1) LCD_D[23:0] 2) бит TCON0_IF в регистре TCON0_CTL_REG и регистры TCON0_CPU_* CS, WR, RD, A1 должны быть мультиплексированы с Hsync, Vsync, LCD_Clk, LCD_DE но документация - китайская Цитата(__inline__ @ Mar 29 2018, 07:23) И проиграть в помехозащищённости - гнать БИТОВЫЙ клок, который должен быть в 8- или в -16 раз больше по частоте чтобы битики в байты преобразовать (некий параллельный регистр с последовательной загрузкой). Ну и нагромождение. да ладно, sdram на сотне МГц с 16/32 параллельной шиной так в помехозащищенности видимо выигрывает, а вот 4х битный SDIO на 80 - уже почему-то нет.
|
|
|
|
|
Mar 29 2018, 07:33
|
Местный
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126
|
Цитата(_pv @ Mar 29 2018, 05:35) мы наверное в разные даташиты смотрим. 1) LCD_D[23:0] 2) бит TCON0_IF в регистре TCON0_CTL_REG и регистры TCON0_CPU_* CS, WR, RD, A1 должны быть мультиплексированы с Hsync, Vsync, LCD_Clk, LCD_DE но документация - китайская должны быть, но не обязаны. Я глянул даташит на V3s что у меня есть (на английском), там расписаны времянки, но самих стробов CS, WR, адресные биты A* на выводах микроконтроллера НЕ нашёл. Таблицы мультиплексирования выводов тоже молчат. Просто приводят картинку с времянками, которая как бы намекает, что без дополнительной логики (ПЛИС, ЦПЛД,рассыпуха) не обойтись:
У вас даташит другой или тоже английский? Цитата(_pv @ Mar 29 2018, 05:35) да ладно, sdram на сотне МГц с 16/32 параллельной шиной так в помехозащищенности видимо выигрывает, а вот 4х битный SDIO на 80 - уже почему-то нет. Был один головняк(SDRAM), будет два (преобразователь SDIO в i8080 для LCD ) А линукс и камадроид не даст ответов на этот вопрос, потому что там везде "стандартная" связка LCD с v3s по RGB-интерфейсу.
Сообщение отредактировал __inline__ - Mar 29 2018, 07:35
|
|
|
|
|
Mar 29 2018, 09:43
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(__inline__ @ Mar 29 2018, 03:23) Ядро Cortex-M7 с его вкусным многооперандными командами Ассемблера типа: addeq r0,r1,r2 LSL r3 - 4 действия в одном - это лучше чем BF532 на 400 МГц и его 16-битной шиной! Только не забываем, что ARM-у чтобы сделать эту самую ADD над операндами в памяти, нужно эти операнды ещё в регистры загрузить, да потом ещё результат возможно нужно обратно в память выгрузить. В то время как система команд DSP обычно позволяет это делать одновременно. На C64xx-ядрах DSP я почти не писал на асм (за исключением небольших кусков), но вот к примеру на C55xx-ядре за один такт(!) можно посчитать 2 порядка КИХ-фильтра, т.е.: выполнить загрузку 1-го коэффициента фильтра из памяти + загрузку двух вх.значений из памяти + 2 MAC операции + 2 выгрузки вых.результатов в память + 0 тактов на организацию цикла (ведь всё это должно выполняться в цикле) + 0 тактов на организацию кольцевой адресации (если работаем с кольцевыми буферами вх и вых. данных). И всё это за один такт частоты ядра! И думаю, что на C64xx-ядре возможности должны быть явно не хуже, так как это более старшее ядро. А теперь вопрос: за сколько тактов выполнит это всё STM32H7? Если учесть что ARM-ядро не поддерживает параллельное выполнение операций (загрузку/выгрузку из/в память одновременно с операцией на АЛУ), требует для доступа к памяти (1+1*N) тактов (где: N - число читаемых/записываемых слов в одной команде), не поддерживает аппаратные циклы и циклическую адресацию памяти. Я конечно не имел дела с ADSP и блэкфинами, но думаю они должны иметь примерно такую же архитектуру, как и ядра TI. Цитата(__inline__ @ Mar 29 2018, 03:23) Ядро Cortex-M7 с его вкусным многооперандными командами Ассемблера типа: addeq r0,r1,r2 LSL r3 - 4 действия в одном - это лучше чем BF532 на 400 МГц и его 16-битной шиной! И где кстати тут 4 действия? Всего одно - сложение одного операнда с другим сдвинутым на R3 разрядов. ARM вообще не имеет команд выполняющих более одного действия. Это архитектурное ограничение. МАС-операция это тоже не 2 или 3 или сколько там действий, а одно - MAC. А вот настоящие DSP как правило - имеют. В этом и есть их главное различие. Цитата(__inline__ @ Mar 29 2018, 10:33) Был один головняк(SDRAM), будет два (преобразователь SDIO в i8080 для LCD ) Я не буду ничего советовать по интерфейсу подключения LCD (неохота разбираться в сигналах), но в том же C6745, как говорит сайт TI, есть 2 интерфейса McASP. Я помню в OMAP-L137 я использовал один из двух McASP: это порт умеющий формировать до 16 последовательных битовых потока (он имеет 16 сериализаторов), каждый из которых можно независимо сконфигурить на ввод или вывод. Диаграмма сигналов на каждом программируется тоже независимо от других сериализаторов и очень гибко. Обслуживать McASP может EDMA3 умеющий: 1-, 2- и 3-х-мерные пересылки (может пересылать 3-мерные матрицы) с независимыми произвольными приращениями по каждому измерению (можно например по строке делать скажем +N (положительное смещение на N слов), а по столбцу -M (отрицательное смещение на M слов). За счёт этого EDMA3 при пересылке может преобразовать массив с построчного на постолбцовый например. Также EDMA3 имеет 2 трансфер-контроллера, каждый из которых - независимый bus-master со своим приоритетом доступа к шине. У меня например на одном McASP висело 3 шт. 8-канальных SPI-АЦП + стерео аудио-кодек (ввод и вывод). И всё это работало параллельно одновременно и обслуживалось через EDMA3.
|
|
|
|
|
Mar 29 2018, 10:09
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(AlexandrY @ Mar 29 2018, 13:04) А поинтересуйтесь-ка командой USADA8 в ARMv7-M Будете удивлены. Не буду. Писал я на асм и на ARM. И знаю какие там есть инструкции. Такие операции (не полной разрядности) как раз за счёт малого числа разрядов и могут выполняться на единственном АЛУ. Я имел в виду операции полной разрядности. А то ведь можно считать, что ORR R0, R0, R1 выполняет параллельно 32 операции OR...... над 1-битными операндами.
|
|
|
|
|
Mar 29 2018, 10:20
|
Местный
Группа: Участник
Сообщений: 257
Регистрация: 5-09-17
Пользователь №: 99 126
|
Цитата(jcxz @ Mar 29 2018, 09:43) И где кстати тут 4 действия? Всего одно - сложение одного операнда с другим сдвинутым на R3 разрядов. действие 1) проверка условия , если равно, выполняем: add eq r0,r1,r2 LSL r3 действие 2) сдвигаем r2 влево на значение бит в r3: addeq r0,r1, r2 LSL r3действие 3) складываем r2 с r1: addeq r0, r1,r2 LSL r3: дейсвтвие 4) записываем результат в r0: addeq r0,r1,r2 LSL r3 У Блекфина как-то тухло: Код ... P1.L = _LCD; P1.H = _LCD; .align 2 P0 = 272; P1 = P1 + P0; P0 = -256; P1 = P1 + P0; P0 = 144; [--SP] = (P5:3); P2 = 64; P5 = 0 P5.H = 8193 LOOP .P36L2L LC0 = P0; ... Цитата(jcxz @ Mar 29 2018, 09:43) Я не буду ничего советовать по интерфейсу подключения LCD (неохота разбираться в сигналах), но в том же C6745, как говорит сайт TI, есть 2 интерфейса McASP. Я помню в OMAP-L137 я использовал один из двух McASP: это порт умеющий формировать до 16 последовательных битовых потока (он имеет 16 сериализаторов), каждый из которых можно независимо сконфигурить на ввод или вывод. Диаграмма сигналов на каждом программируется тоже независимо от других сериализаторов и очень гибко. Это типа ногодрыга как GPIO ? Надо 16 бит данных, 1 бит адреса, стробы CS, WR. На строб RD можно забить(не нужен, подтянуть к Vcc). Цитата А поинтересуйтесь-ка командой USADA8 в ARMv7-M Типа DSP-инструкция, SIMD к тому же! ----- Касаемо Олвиннера V3s. Вышел на форум китайцев https://debugdump.com/t_576.html - тут они тот самый дисплей что у меня (контроллер тот же) подключают к... SPI - и быстродействие всего 10 FPS. Видимо, через 16 битную шину его не подрубить, раз SPI взяли
Сообщение отредактировал __inline__ - Mar 29 2018, 10:24
|
|
|
|
|
Mar 29 2018, 10:57
|
Гуру
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713
|
Цитата(__inline__ @ Mar 29 2018, 13:20) действие 1) проверка условия , если равно, выполняем: addeq r0,r1,r2 LSL r3 Это не так. Это действие выполняется в предыдущей инструкции IT. И такт там тратится. Цитата(__inline__ @ Mar 29 2018, 13:20) действие 2) сдвигаем r2 влево на значение бит в r3: addeq r0,r1,r2 LSL r3 действие 3) складываем r2 с r1: addeq r0,r1,r2 LSL r3: дейсвтвие 4) записываем результат в r0: addeq r0,r1,r2 LSL r3 Вы ещё посчитайте перевод в дополнительный код в команде SUB за отдельное действие. Эти "действия" не считаются за отдельные операции в общепринятой терминологии. Даже QDSUB - всего одна операция, хоть там и умножение на два и суммирование и насыщение. Иначе некоторые DSP-инструкции вообще бы по 20 действий выполняли. Цитата(__inline__ @ Mar 29 2018, 13:20) У Блекфина как-то тухло: Странно.... У C55xx например: FIRSADD *AR0+, *AR1-, *CDP+, AC0, AC1Выполняется за 1 такт, делает чтение двух операндов из памяти с автоинкрементом (и возможно с циклической адресацией) *AR0+ и *AR1-, чтение одного коэфф. фильтра из памяти *CDP+ с автоинкрементом (и возможно с циклической адресацией), две MAC ( AC0 += (*AR0) * (*CDP) и AC1 += (*AR1) * (*CDP)). Плюс ещё можно задать (опционально) умножение результата (после умножения перед сложением) MAC-ов на 2 и вроде ещё насыщение (точно не помню). И параллельно этой команде можно в параллель ещё одну команду выполнить за тот же такт, лишь бы она не использовала уже занятые ресурсы. Занятые первой командой. Цитата(__inline__ @ Mar 29 2018, 13:20) Это типа ногодрыга как GPIO ? Надо 16 бит данных, 1 бит адреса, стробы CS, WR. На строб RD можно забить(не нужен, подтянуть к Vcc). Наверное сэмулировать 16-битную шину памяти на нём не получится - линий маловато. Ну если только как-то синхронизировать два McASP.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|