Перейти к содержанию

    

Здравствуйте.

 

Ищу процессор в 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__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В качестве кандидата на замену рассматриваю : TMS320C6745 - доступен, корпус QFP, 475 МГц, шина SDRAM 32 бита, есть floating point, VLIW до 6 команд одновременно. Вроде как лучше чем BF532 ? Или даст выигрыш по сравнению с 532-м незначительно?

Так если Вы говорите что OMAP-L137 есть уже в QFP, то почему тогда не его? Там помимо DSP, ещё 3 ядра - думаю не лишние будут :rolleyes:

По-крайней мере у меня ARM-ядро всей периферией занималось, разгружая DSP для вычислений.

+ ещё два PRU-ядра, которые предназначены для эмуляции недостающей периферии (для Ваших эмуляторов может как раз подойдут), имеют очень параллельную систему команд (как смутно вспоминается - одна команда кодирует сразу несколько операций). Правда в моё время для PRUSS можно было писать только на асм - си-компилёра не существовало. Но может уже сделали.

 

PS: Да и кроме OMAP-L137 есть ещё его собрат: OMAP-L138 - он по скорости такой-же, только вроде поддерживает DDR, имеет немного другой набор периферии и у него дефолтным ядром является - ARM (у L137 дефолтное - DSP). Правда насколько помню, в BGA он имел бОльшее кол-во ног, так что его может и не быть в QFP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
allwinner V3s

 

У вас есть опыт работы с этим камнем без пингвина и ведра?

 

Внешней шины для подключения дополнительной периферии, наподобие как FSMC у STM32 у V3s как я понял нет? Если так - прощай дисплеи с контроллерами и своей памятью ..

 

 

Так если Вы говорите что OMAP-L137 есть уже в QFP, то почему тогда не его? Там помимо DSP, ещё 3 ядра - думаю не лишние будут :rolleyes:

Тот что в QFP OMAPL137-HT недоступен для заказа из-за политики США по отношению к РФ.

В БГА мне неинтересно.

 

Изменено пользователем __inline__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Смотрю в даташит на 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__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Всёравно для дисплея нужен только 1 адресный бит, более ничего на шине не будет. А SDRAM будет висеть на 16-битной шине.

я уже смутно помню, но вроде EMIX B - для дин.памяти, а EMIF A - для статической и всего остального.

Ну или достать OMAP и реализовать контроллер LCD на PRUSS с любой шиной. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
У вас есть опыт работы с этим камнем без пингвина и ведра?

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

но как будто пингвин это что-то плохое.

Внешней шины для подключения дополнительной периферии, наподобие как FSMC у STM32 у V3s как я понял нет? Если так - прощай дисплеи с контроллерами и своей памятью ..

там есть параллельный 24х видео выход,

и он даже support i80 interface with 18/16/9/8 bit, если не врут.

ну а вообще мелкая cpld за <1$ параллельную шину для дисплея сделать может даже из SDIO какого-нибудь. раз уж так надо именно дисплей со своим контроллером подключить, хотя дисплей со своим контроллером при наличии на борту памяти и видеовыхода - "троллейбус из буханки черного или белого хлеба.jpg"

В БГА мне неинтересно.

qfp и производительность гораздо больше чем у блэкфина, sdram, и дисплей - тут или трусы снимите или крестик наденьте.

Поделиться сообщением


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

там есть параллельный 24х видео выход,

и он даже support i80 interface with 18/16/9/8 bit, если не врут.

 

Смотрел даташит на v3s и схему камдроида на нём и пришёл к 2-м печальным выводам:

1) шина там только на 8 бит

2) и только RGB, а не i8080, управляющих стробов (nWR,nRD,nCS) я не нашёл, также как и их описания в даташите.

 

Кусок подключения LCD к v3s в камдроиде:

post-99126-1522282405_thumb.jpg

 

ну а вообще мелкая cpld за <1$ параллельную шину для дисплея сделать может даже из SDIO какого-нибудь. раз уж так надо именно дисплей со своим контроллером подключить,

И проиграть в помехозащищённости - гнать БИТОВЫЙ клок, который должен быть в 8- или в -16 раз больше по частоте чтобы битики в байты преобразовать (некий параллельный регистр с последовательной загрузкой). Ну и нагромождение.

 

хотя дисплей со своим контроллером при наличии на борту памяти и видеовыхода - "троллейбус из буханки черного или белого хлеба.jpg"

 

А один фиг тупую матрицу прийдётся цеплять на SPI или I2S, так что одним RGB-интерфейсом не отделаешься! А вот если i8080 - то это уже сказка! :)

 

Но беда в том, что C6745 который мне так понравился в QFP содержит только 16 и 8 битную шину, а хочется 32 и 16 как в БГА :)

 

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-го. :santa2:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Смотрел даташит на 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

но документация - китайская

 

И проиграть в помехозащищённости - гнать БИТОВЫЙ клок, который должен быть в 8- или в -16 раз больше по частоте чтобы битики в байты преобразовать (некий параллельный регистр с последовательной загрузкой). Ну и нагромождение.

да ладно, sdram на сотне МГц с 16/32 параллельной шиной так в помехозащищенности видимо выигрывает, а вот 4х битный SDIO на 80 - уже почему-то нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
мы наверное в разные даташиты смотрим.

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* на выводах микроконтроллера НЕ нашёл. Таблицы мультиплексирования выводов тоже молчат.

 

Просто приводят картинку с времянками, которая как бы намекает, что без дополнительной логики (ПЛИС, ЦПЛД,рассыпуха) не обойтись:

 

post-99126-1522308738_thumb.jpg

 

У вас даташит другой или тоже английский?

 

да ладно, sdram на сотне МГц с 16/32 параллельной шиной так в помехозащищенности видимо выигрывает, а вот 4х битный SDIO на 80 - уже почему-то нет.

 

Был один головняк(SDRAM), будет два (преобразователь SDIO в i8080 для LCD :) )

 

А линукс и камадроид не даст ответов на этот вопрос, потому что там везде "стандартная" связка LCD с v3s по RGB-интерфейсу.

Изменено пользователем __inline__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Ядро 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.

 

Ядро Cortex-M7 с его вкусным многооперандными командами Ассемблера типа: addeq r0,r1,r2 LSL r3 - 4 действия в одном - это лучше чем BF532 на 400 МГц и его 16-битной шиной!

И где кстати тут 4 действия? Всего одно - сложение одного операнда с другим сдвинутым на R3 разрядов. :laughing:

ARM вообще не имеет команд выполняющих более одного действия. Это архитектурное ограничение. МАС-операция это тоже не 2 или 3 или сколько там действий, а одно - MAC.

А вот настоящие DSP как правило - имеют. В этом и есть их главное различие.

 

Был один головняк(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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
ARM вообще не имеет команд выполняющих более одного действия. Это архитектурное ограничение. МАС-операция это тоже не 2 или 3 или сколько там действий, а одно - MAC.

А вот настоящие DSP как правило - имеют. В этом и есть их главное различие.

А поинтересуйтесь-ка командой USADA8 в ARMv7-M

Будете удивлены.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А поинтересуйтесь-ка командой USADA8 в ARMv7-M

Будете удивлены.

Не буду. Писал я на асм и на ARM. И знаю какие там есть инструкции.

Такие операции (не полной разрядности) как раз за счёт малого числа разрядов и могут выполняться на единственном АЛУ.

Я имел в виду операции полной разрядности.

А то ведь можно считать, что ORR R0, R0, R1 выполняет параллельно 32 операции OR...... над 1-битными операндами. :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
И где кстати тут 4 действия? Всего одно - сложение одного операнда с другим сдвинутым на R3 разрядов. :laughing:

действие 1) проверка условия , если равно, выполняем: addeq 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;
...

 

Я не буду ничего советовать по интерфейсу подключения 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__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
действие 1) проверка условия , если равно, выполняем: addeq r0,r1,r2 LSL r3

Это не так. Это действие выполняется в предыдущей инструкции IT. И такт там тратится.

действие 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 за отдельное действие. :biggrin:

Эти "действия" не считаются за отдельные операции в общепринятой терминологии. Даже QDSUB - всего одна операция, хоть там и умножение на два и суммирование и насыщение.

Иначе некоторые DSP-инструкции вообще бы по 20 действий выполняли. :biggrin:

 

У Блекфина как-то тухло:

Странно....

У C55xx например:

FIRSADD *AR0+, *AR1-, *CDP+, AC0, AC1

Выполняется за 1 такт, делает чтение двух операндов из памяти с автоинкрементом (и возможно с циклической адресацией) *AR0+ и *AR1-, чтение одного коэфф. фильтра из памяти *CDP+ с автоинкрементом (и возможно с циклической адресацией), две MAC (AC0 += (*AR0) * (*CDP) и AC1 += (*AR1) * (*CDP)). Плюс ещё можно задать (опционально) умножение результата (после умножения перед сложением) MAC-ов на 2 и вроде ещё насыщение (точно не помню).

И параллельно этой команде можно в параллель ещё одну команду выполнить за тот же такт, лишь бы она не использовала уже занятые ресурсы. Занятые первой командой.

 

Это типа ногодрыга как GPIO ? Надо 16 бит данных, 1 бит адреса, стробы CS, WR. На строб RD можно забить(не нужен, подтянуть к Vcc).

Наверное сэмулировать 16-битную шину памяти на нём не получится - линий маловато. Ну если только как-то синхронизировать два McASP.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация