Как стать автором
Обновить

ИМС SP7021, или Импортозамещение без токсичных государевых денег

Время на прочтение14 мин
Количество просмотров2.6K
Уменьшенный кегль светлого серого цвета в подписях - самое то, чтобы ломать глаза. Да, Хабр?
Уменьшенный кегль светлого серого цвета в подписях - самое то, чтобы ломать глаза. Да, Хабр?

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

Введение

Несколько лет назад (2021-2022) в общем тренде на и14е в сфере электроники, обретшее стараниями нашего государства к тому времени внятные нормативные черты, случилось - на предмет применимости в наших повседневных задачах - "пощупать" и ИМС SP7021, что породило определенные впечатления, о которых давно хотелось рассказать. А сравнительно недавно (в январе 2025-го) по почтовой рассылке пришло приглашение поучаствовать в конкурсе на тему (утрировано) "Как я применил сию ИМС и что из этого вышло". Даже призы обещали. В общем, звезды сошлись.

Рассылает компания СканКод - российское лицо Тиббо.
Рассылает компания СканКод - российское лицо Тиббо.

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

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

Тиббо, тибберы и тиббиты

Тиббо (англ. Tibbo) - это название компании, кстати, имевшей ранее свой профиль на Хабре, которая выступила заказчиком разработки ИМС SP7021, поручив саму разработку и производство компании Sun Plus, у которой, судя по всему, была лицензия на применение соответствующих процессорных ядер - двух разновидностей Arm и одного польского прокачанного клона 8051.

В качестве развлекательного мифа, не претендующего на историческую точность, можно поведать, что у истоков компании стояли два Дмитрия - Дмитрий Дистанционный (англ. Dmitri the Distant), который ради общей великой мечты и правого дела отбыл на чужбину и организовал на заморских берегах о. Тайваня производство аппаратуры, и Дмитрий Домашний (англ. Dmitri the Domestic), который остался на родине в г. Москве, где возглавил команду разработки обеспечения программного, - коих двух, а со временем и всех разделивших сею товарищескую удаль прозвали тибберами (англ. tibber), что, возможно, было самоназванием.

С далекого берега Дистанционный Дмитрий выжег глаголом общий подход вновь образованного предприятия к жизни в общем и к делу в частности:

"Мы - поколение Твиттера" (приведено на языке оригинала)

Hello and thank you for reading this.

My name is Dmitry Slepov. I am the managing director and co-founder of Tibbo Technology. In other words, Tibbo is my baby.

Tibbo was born of my desire to deliver on a singular mission statement, which is: "TO SIMPLIFY AND SPEED UP THE DEVELOPMENT OF IoT* DEVICES"

This is a manual for the Twitter Generation. We don't read long technical manuals. We haven't got time.

Hence, I present to you the new edit of the Tibbo Programming Guide. No excess. Only substance. Enjoy.

D.S.

*That's a new edit. My mission statement used to refer to "embedded systems" instead. Tibbo was in the IoT business long before the term became popular.

Источник в анналах Интернет-истории

Производить предприятие стало сравнительно незамысловатые, но оригинально упакованные и, видимо, коммерчески достаточно полезные (востребованные) программно-аппаратные решения для автоматизации, физические модули - типовые элементы замены в терминологии приборостроения времен СССР - которых назвали тиббиты (англ. tibbit).

Тиббо. Тибберы. Тиббиты.

Зело заспорилось дело и все заверте...

ИМС SP7021

Сия ИМС уже не была первой в линейке предлагаемых потребителю технологических решений Тиббо, однако именно ИМС SP7021 стала тем, благодаря чему теперь Тиббо могла быть замечена как "производитель интересного микропроцессора".

ИМС SP7021.

И на то были весомые, чисто технические причины. Итак,...

Преимущества

Планарный корпус (eTQPF-144) со встроенной оперативной памятью, что позволило проектировать системы даже на базе двухслойных печатных плат (ДПП), а благодаря встроенному мультиплексору функций на порты ввода-вывода (схема 1-на-любой-из-64) общая трассировка связей типа точка-точка с внешней периферией во многих случаях свелась к тривиальной.

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

Многообещающий интерфейс связи с ПЛИС, дающий доступ к адресному пространству со стороны устройств снаружи, потенциально открывающий условно безграничный путь к расширению системы. Тут особенно всплакнули олды, помнящие, что раньше у процессоров обязательно была внешняя шина, а еще раньше, что сам процессор на ней был не единственным мастером.

Ну и прочее, что, впрочем, и сегодня, и на момент выпуска лишь становиться тривиальным: гигагерцовый кластер из четырех Arm-ядер; два дополнительных ярда для работы на пониженных частотах; большое количество линий ввода-вывода, в т. ч. с параллельным доступом по два байта = 16 бит за раз; опять же, память, которая программно "сразу есть"; два вшитых MAC-адреса; и т. д.

Пример трассировки на двух слоях.
Пример трассировки на двух слоях.

Однако...

Особенности, или Почему скорее нет, чем да

Отсутствие исчерпывающего описания на собственно саму ИМС SP7021. Пока такая ИМС шла в составе других программно-аппаратных продуктов (решений), предлагаемых компанией, потребности в таком ее описании действительно не было, да и не могло возникнуть. Однако когда сама ИМС была заявлена как самостоятельный продукт (решение, изделие, товар), потребность в ее описании встала в полный рост и... до сих порт не была удовлетворена ни самой Тиббо, ни ее контрактным изготовителем (Sun Plus). Страдания разработчиков можно оценить на сайте-заменителе такого описания, где до сих пор присутствуют неполнота, неточности и ошибки.

(А ведь исчерпывающее описание это именно та экосистема, с которой имеет дело разработчик аппаратуры. Для него - нет полноты, нет изделия. Котошредингер в пластике - кошмарный сон разработчика.)

Неудачная схемотехника (кремнетехника) встроенных преобразователей питания: один из них оказался (если говорить мягко, как производитель, - ограниченно мощным, а если с точки зрения потребителя, то) неработоспособным, к тому же у двух из трех таких преобразователей линия обратной связи (англ. feedback) оказалась совмещена с линиями ввода питания, а где и какими - в отсутствие описания и (или) поддержки со стороны производителя и изготовителя - разработчик должен до сих пор догадываться самостоятельно. Путем собственных проб и ошибок.

(Для интересующихся скажу, что feedback 1.2V совмещен с питанием MIPI. На уровни напряжения преобразователей влияют страпы, которые... недокументированы. Еще одна находка не из приятных.)

Блокирующее "мультплексирование" на уровне макрофункций (макроблоков). Например, если выбрана макрофункция FBIO, то все пины, подключенные к ней, переходят под управление именно ею, без возможности высвободить неиспользуемые ею в конкретном дизайне под другие функции. Прочего доказательства, кроме куцего описания, следующему конечно нет, но судя по всему, внутри ИМС нет никакого общего логического мультиплексора для управления единым буфером отдельно взятого пина ввода-вывода, а есть топологическая слепка макроблоков - каждый со своими буферами ввода-вывода с третьим состоянием - фактически на внутренней пассивной шине. При таком комплексном ограничении, ожидаемо, применимость в частном случае резко падает.

(То есть, в натуре у ИМС есть три макроварианта применения, архитектурно заложенных в нее производителем, - либо с ПЛИС, либо с ЖКИ, либо без оных. Теоретически, все еще можно для своего приложения найти подходящий, но уже не столь оптимальный.)

Архитектурные же черты рассмотрим несколько подробнее.

Шина доступа внутрь ИМС со стороны ПЛИС (FBIO)

Изначально привлекательная идея, как уже говорилось ранее, но разбитая совершенно сырой реализацией. Из четырех примеров, заявленных разработчиком, нельзя ознакомится ни с одним, можно ознакомится только с одним посторонним, самым простым - "петлей" (англ. loopback). Производитель не уточняет, почему (стали?) недоступны другие примеры, однако и по представленному можно сформировать представление о готовности технологии к промышленному применению, а не занимательной (например, учебной) археологии и прочей реверс-деятельности. Кстати, там есть переходы сигналами зон тактирования, о чем как о сложности проектирования говорил Ю. Панчул (@YuriPanchul) в одной из своих заметок.

Интерфейс FBIO.
Интерфейс FBIO.

Вообще, тем, кто привык к строгости-стройности оформления кода на языках программирования софта, при встрече с оным в области харда будет, наверное, не по себе. Описание на сайте-заменителе также не отличается строгостью, отзывчивостью, и... безошибочностью, хотя на существенные замечания конструктивная реакция получена была. Если же кто-то все же решиться заглянуть внутрь, ниже отслежены сигналы, поступающие из-вне ПЛИС к ядру, реализующему вышеупомянутый пример.

Отображение сигналов для облегчения жизни заинтересовавшихся
Inside fbio_fpga.v: fbio_fpga -> f_fbio_top -> f_fbio_wrap -> [en_16b=hardwired_1]

BALL_V1     FPGA_PAD[10] (O)    DIO_1[10]   FBIO_PAD[00]    io_pad[00]  _oen[00]:=hardwired_0   tx_d[00]
BALL_U1     FPGA_PAD[33] (O)    DIO_3[12]   FBIO_PAD[01]    io_pad[01]  _oen[01]:=hardwired_0   tx_d[01]  
BALL_N5     FPGA_PAD[11] (O)    DIO_1[11]   FBIO_PAD[02]    io_pad[02]  _oen[02]:=hardwired_0   tx_d[02]
BALL_P5     FPGA_PAD[32] (O)    DIO_3[11]   FBIO_PAD[03]    io_pad[03]  _oen[03]:=hardwired_0   tx_d[03]
BALL_T5     FPGA_PAD[12] (O)    DIO_1[12]   FBIO_PAD[04]    io_pad[04]  _oen[04]:=hardwired_0   tx_d[04]
BALL_T4     FPGA_PAD[31] (O)    DIO_3[10]   FBIO_PAD[05]    io_pad[05]  _oen[05]:=hardwired_0   tx_d[05]
BALL_T3     FPGA_PAD[13] (O)    DIO_1[13]   FBIO_PAD[06]    io_pad[06]  _oen[06]:=hardwired_0   tx_d[06]
BALL_R3     FPGA_PAD[30] (O)    DIO_3[09]   FBIO_PAD[07]    io_pad[07]  _oen[07]:=hardwired_0   tx_d[07]
BALL_P4     FPGA_PAD[29] (O)    DIO_3[08]   FBIO_PAD[08]    io_pad[08]  _oen[08]:=hardwired_0   tx_d[08]
BALL_P3     FPGA_PAD[28] (O)    DIO_3[07]   FBIO_PAD[09]    io_pad[09]  _oen[09]:=hardwired_0   tx_d[09]
BALL_N4     FPGA_PAD[14] (O)    DIO_2[00]   FBIO_PAD[10]    io_pad[10]  _oen[10]:=hardwired_0   tx_d[10]
BALL_M4     FPGA_PAD[27] (O)    DIO_3[06]   FBIO_PAD[11]    io_pad[11]  _oen[11]:=hardwired_0   tx_d[11]
BALL_T1     FPGA_PAD[15] (O)    DIO_2[01]   FBIO_PAD[12]    io_pad[12]  _oen[12]:=hardwired_0   tx_d[12]
BALL_R1     FPGA_PAD[26] (O)    DIO_3[05]   FBIO_PAD[13]    io_pad[13]  _oen[13]:=hardwired_0   tx_d[13]
BALL_R2     FPGA_PAD[16] (O)    DIO_2[02]   FBIO_PAD[14]    io_pad[14]  _oen[14]:=hardwired_0   tx_d[14]
BALL_P2     FPGA_PAD[25] (O)    DIO_3[04]   FBIO_PAD[15]    io_pad[15]  _oen[15]:=hardwired_0   tx_d[15]
BALL_N1     FPGA_PAD[17] (O)    DIO_2[03]   FBIO_PAD[16]    io_pad[16]  _oen[16]:=hardwired_0   tx_valid    why TxReady in table?
BALL_N2     FPGA_PAD[24] (O)    DIO_3[03]   FBIO_PAD[17]    io_pad[17]  _oen[17]:=hardwired_0   tx_ready    why TxValid in table?
BALL_V2     FPGA_PAD[09] (O)    DIO_1[09]   FBIO_TXCLOCK    io_pad[18]  _oen[18]:=hardwired_0   tx_clock    TxClock=F2P_CLK(I/Oz)

BALL_U3     FPGA_PAD[35] (I)    DIO_3[14]   FBIO_RXCLOCK    io_pad[19]  _oen[19]:=hardwired_1   rx_clock    RxClock=P2F_CLK(I/Oz)
BALL_T8     FPGA_PAD[00] (I)    DIO_1[00]   FBIO_PAD[18]    io_pad[20]  _oen[20]:=hardwired_1   rx_d[00]
BALL_R8     FPGA_PAD[43] (I)    DIO_3[22]   FBIO_PAD[19]    io_pad[21]  _oen[21]:=hardwired_1   rx_d[01]
BALL_V9     FPGA_PAD[01] (I)    DIO_1[01]   FBIO_PAD[20]    io_pad[22]  _oen[22]:=hardwired_1   rx_d[02]
BALL_U9     FPGA_PAD[42] (I)    DIO_3[21]   FBIO_PAD[21]    io_pad[23]  _oen[23]:=hardwired_1   rx_d[03]
BALL_N6     FPGA_PAD[02] (I)    DIO_1[02]   FBIO_PAD[22]    io_pad[24]  _oen[24]:=hardwired_1   rx_d[04]
BALL_M6     FPGA_PAD[41] (I)    DIO_3[20]   FBIO_PAD[23]    io_pad[25]  _oen[25]:=hardwired_1   rx_d[05]
BALL_U6     FPGA_PAD[03] (I)    DIO_1[03]   FBIO_PAD[24]    io_pad[26]  _oen[26]:=hardwired_1   rx_d[06]
BALL_U7     FPGA_PAD[40] (I)    DIO_3[19]   FBIO_PAD[25]    io_pad[27]  _oen[27]:=hardwired_1   rx_d[07]
BALL_V6     FPGA_PAD[04] (I)    DIO_1[04]   FBIO_PAD[26]    io_pad[28]  _oen[28]:=hardwired_1   rx_d[08]
BALL_V7     FPGA_PAD[39] (I)    DIO_3[18]   FBIO_PAD[27]    io_pad[29]  _oen[29]:=hardwired_1   rx_d[09]
BALL_T6     FPGA_PAD[05] (I)    DIO_1[05]   FBIO_PAD[28]    io_pad[30]  _oen[30]:=hardwired_1   rx_d[10]
BALL_R7     FPGA_PAD[38] (I)    DIO_3[17]   FBIO_PAD[29]    io_pad[31]  _oen[31]:=hardwired_1   rx_d[11]
BALL_V4     FPGA_PAD[06] (I)    DIO_1[06]   FBIO_PAD[30]    io_pad[32]  _oen[32]:=hardwired_1   rx_d[12]
BALL_V5     FPGA_PAD[37] (I)    DIO_3[16]   FBIO_PAD[31]    io_pad[33]  _oen[33]:=hardwired_1   rx_d[13]
BALL_R6     FPGA_PAD[07] (I)    DIO_1[07]   FBIO_PAD[32]    io_pad[34]  _oen[34]:=hardwired_1   rx_d[14]
BALL_R5     FPGA_PAD[36] (I)    DIO_3[15]   FBIO_PAD[33]    io_pad[35]  _oen[35]:=hardwired_1   rx_d[15]
BALL_U4     FPGA_PAD[08] (I)    DIO_1[08]   FBIO_PAD[34]    io_pad[36]  _oen[36]:=hardwired_1   rx_valid    why RxReady in table?
BALL_U2     FPGA_PAD[34] (I)    DIO_3[13]   FBIO_PAD[35]    io_pad[37]  _oen[37]:=hardwired_1   rx_ready    why RxValid in table?


Outside fbio_fpga.v: fpga_fbio.xdc -> fbio_dip_wrap.v -> fbio_top.v -> fbio_fpga.v (...)

BALL_T8     FPGA_PAD[00] (?)    DIO_1[00]   FBIO_PAD[18]    io_pad[??]
BALL_V9     FPGA_PAD[01] (?)    DIO_1[01]   FBIO_PAD[20]    io_pad[??]
BALL_N6     FPGA_PAD[02] (?)    DIO_1[02]   FBIO_PAD[22]    io_pad[??]
BALL_U6     FPGA_PAD[03] (?)    DIO_1[03]   FBIO_PAD[24]    io_pad[??]
BALL_V6     FPGA_PAD[04] (?)    DIO_1[04]   FBIO_PAD[26]    io_pad[??]
BALL_T6     FPGA_PAD[05] (?)    DIO_1[05]   FBIO_PAD[28]    io_pad[??]
BALL_V4     FPGA_PAD[06] (?)    DIO_1[06]   FBIO_PAD[30]    io_pad[??]
BALL_R6     FPGA_PAD[07] (?)    DIO_1[07]   FBIO_PAD[32]    io_pad[??]
BALL_U4     FPGA_PAD[08] (?)    DIO_1[08]   FBIO_PAD[34]    io_pad[??]    RxReady per table
BALL_V2     FPGA_PAD[09] (?)    DIO_1[09]   FBIO_TXCLOCK    io_pad[??]    TxClock per table
BALL_V1     FPGA_PAD[10] (?)    DIO_1[10]   FBIO_PAD[00]    io_pad[??]
BALL_N5     FPGA_PAD[11] (?)    DIO_1[11]   FBIO_PAD[02]    io_pad[??]
BALL_T5     FPGA_PAD[12] (?)    DIO_1[12]   FBIO_PAD[04]    io_pad[??]
BALL_T3     FPGA_PAD[13] (?)    DIO_1[13]   FBIO_PAD[06]    io_pad[??]

BALL_N4     FPGA_PAD[14] (?)    DIO_2[00]   FBIO_PAD[10]    io_pad[??]
BALL_T1     FPGA_PAD[15] (?)    DIO_2[01]   FBIO_PAD[12]    io_pad[??]
BALL_R2     FPGA_PAD[16] (?)    DIO_2[02]   FBIO_PAD[14]    io_pad[??]
BALL_N1     FPGA_PAD[17] (?)    DIO_2[03]   FBIO_PAD[16]    io_pad[??]    TxReady per table
BALL_M1     FPGA_PAD[18] (I)    DIO_2[04]   FBIO_RESET_B    ----------      ResetBar(hardwired_I,pulldown)
BALL_M3     FPGA_PAD[19] (O)    DIO_2[05]   ------------    ----------      Int1(O):=hardwired_0
BALL_M2     FPGA_PAD[20] (I)    DIO_2[06]   ------------    ----------      unused(hardwired_I)

BALL_D8     FPGA_PAD[21] (I)    DIO_3[00]   ------------    ----------      unused(hardwired_I)
BALL_C7     FPGA_PAD[22] (I)    DIO_3[01]   ------------    ----------      unused(hardwired_I)
BALL_L1     FPGA_PAD[23] (O)    DIO_3[02]   ------------    ----------      Int0(O):=hardwired_0
BALL_N2     FPGA_PAD[24] (?)    DIO_3[03]   FBIO_PAD[17]    io_pad[??]    TxValid per table
BALL_P2     FPGA_PAD[25] (?)    DIO_3[04]   FBIO_PAD[15]    io_pad[??]
BALL_R1     FPGA_PAD[26] (?)    DIO_3[05]   FBIO_PAD[13]    io_pad[??]
BALL_M4     FPGA_PAD[27] (?)    DIO_3[06]   FBIO_PAD[11]    io_pad[??]
BALL_P3     FPGA_PAD[28] (?)    DIO_3[07]   FBIO_PAD[09]    io_pad[??]
BALL_P4     FPGA_PAD[29] (?)    DIO_3[08]   FBIO_PAD[08]    io_pad[??]
BALL_R3     FPGA_PAD[30] (?)    DIO_3[09]   FBIO_PAD[07]    io_pad[??]
BALL_T4     FPGA_PAD[31] (?)    DIO_3[10]   FBIO_PAD[05]    io_pad[??]
BALL_P5     FPGA_PAD[32] (?)    DIO_3[11]   FBIO_PAD[03]    io_pad[??]
BALL_U1     FPGA_PAD[33] (?)    DIO_3[12]   FBIO_PAD[01]    io_pad[??]
BALL_U2     FPGA_PAD[34] (?)    DIO_3[13]   FBIO_PAD[35]    io_pad[??]    RxValid per table
BALL_U3     FPGA_PAD[35] (?)    DIO_3[14]   FBIO_RXCLOCK    io_pad[??]    RxClock per table
BALL_R5     FPGA_PAD[36] (?)    DIO_3[15]   FBIO_PAD[33]    io_pad[??]
BALL_V5     FPGA_PAD[37] (?)    DIO_3[16]   FBIO_PAD[31]    io_pad[??]
BALL_R7     FPGA_PAD[38] (?)    DIO_3[17]   FBIO_PAD[29]    io_pad[??]
BALL_V7     FPGA_PAD[39] (?)    DIO_3[18]   FBIO_PAD[27]    io_pad[??]
BALL_U7     FPGA_PAD[40] (?)    DIO_3[19]   FBIO_PAD[25]    io_pad[??]
BALL_M6     FPGA_PAD[41] (?)    DIO_3[20]   FBIO_PAD[23]    io_pad[??]
BALL_U9     FPGA_PAD[42] (?)    DIO_3[21]   FBIO_PAD[21]    io_pad[??]
BALL_R8     FPGA_PAD[43] (?)    DIO_3[22]   FBIO_PAD[19]    io_pad[??]

(отслежено по проекту loopback)

Как протокол, шина FBIO представляет собой то ли что-то уникальное свое, то ли какой-то вариант "сериализации" шины AXI. Сам протокол можно восстановить из Verilog-определения в упомянутом примере. Описания на протокол, ожидаемо, нет. Если кто-либо в нем узнает что-то известное и стандартное, пожалуйста, не сочтите за труд, сообщите общественности. По словам разработчика, протокол асимметричен - то есть, соединить две ИМС (без ПЛИС) на его основе не получится.

На шине FBIO ПЛИС является тактовым мастером: она задает частоту тактового сигнала, который поступает на процессор и далее заворачивается им обратно на ПЛИС. Когда производитель говорит о производительности этой шины, он говорит о пропускной способности механизма "сериализации", причем сразу в обе стороны суммарно. Такой вот себе маркетинг. Реальная производительность этой шины ожидаемо скромна. Отказоустойчивость этой шины и стабильность работы системы с нею мне не представляется возможным оценить.

В общем, эта шина выглядит как неудачный эксперимент, результат которого - к чести производителя и изготовителя - не стали скрывать. На мой взгляд, ее промышленное применение несет неприемлемые риски. (А вот учебное имеет перспективы.)

Циклограмматический ввод-вывод

Строить двоичные циклограммы в реальном времени можно и без использования внешних по отношению к процессору средств типа ПЛИС. В пределе, используя сопроцессоры ARM926 и 8051 (IOP) ИМС SP7021, возможно строить циклограммы сигналов с частотой меандра чуть меньше 10 МГц, то есть с разверткой по времени - опять же в пределе - до 20 млн изменений в секунду. Много это или мало? Если сравнивать с ИМС AM438x, который и планировалось заменить, то совсем не много, - подсистема PRUSS AM438x позволяет получить развертку в более чем 200 изменений в секунду. С другой стороны, 10 МГц уже достаточная частота, однако и здесь есть свое "однако".

Такая предельная частота развертки обусловлена не производительностью самих сопроцессоров - которые работают на достаточно высокой частоте (около 200 МГц), что сравнимо с частотой PRUSS AM438x (до 250 МГц) - а производительностью доступа сопроцессоров к периферии - портам ввода-вывода (англ. GPIO) в рассматриваемом случае. У этого также есть неприятное продолжение: обращение к портам ввода-вывода на такой предельной частоте "забивает" всю внутреннюю шину обмена, связывающую и процессор, и сопроцессоры с периферией, поэтому любые параллельные задачи, требующие обращения к периферии нарушают циклограммы (и наоборот), так как такие обращения происходят по все той же внутренней шине, уже "забитой" ее предельной задачей.

На практике это приводит, например, к тому, что умеренно интенсивная активность на Ethrenet'е приводит к заметным временным нарушениям в циклограммах. (Здесь напомню, что конечно же чтение-запись содержимого пакетов происходит через очереди и механизмы DMA, но сопутствующее управление соответствующим периферийным звеном по-прежнему происходит через чтение-запись его регистров, что осуществляется через все ту же внутреннюю шину обмена с периферией.)

В подсистеме PRUSS AM438x каждый сопроцессор имел прямую связь с наборов пинов ввода-вывода. Однако, например, в OMAP-L138 прушечки уже были, а вот прямых связей между ними и пинами ввода-вывода не было, вместе с тем, внутренняя шинная архитектура была таковой, что "взаимных помех" - на все тех же по характеру и частотам задачах - заметно не было.

В общем, такая несбалансированность общей архитектуры (обмена данными внутри) ИМС SP7021 оказалась препятствием системным, проявившись и в других задачах, об одной из которых тоже расскажу.

Частный пример несбалансированности общей архитектуры

Одной из задач, на которых ИМС SP7021 была также опробована, была задача приема манчестерского сигнала с символьной скоростью 40 Мбод (информационная скорость 40/2=20 Мбит/с). Может быть, читателю это покажется очень странной задачей для подобной ИМС в частности, да и для не-ПЛИС в общем, однако надежда была и интрига сохранялась до последнего. (Если кто-то знает существующую готовую ИМС, не-ПЛИС, которой возможно принимать манчестер 40 Мбод и конвертировать его в битовый поток типа PCM, пожалуйста, поделитесь осведомленностью с общественностью.)

Так вот. Принять такой сигнал ИМС уверенно смогла благодаря периферийному узлу ICM (input capture module, в других процессорах такая функция может называться обратный ШИМ). Звено ICM в ИМС SP7021 работает на частоте внутренней периферийной шины, то есть около 200 МГц. ICM однозначно детектировал импульсы, генерируя информацию (полярность и длину) о них с частотой 40 млн событий в секунду. А вот передать в процессор такой поток событий оказалось невозможно, ни механизмами FIFO+IRQ, ни полингом из Arm-процессора (работает на частоте около 1 ГГц) или Arm-сопроцессора (оба Arm- и 8051-сопроцессоры работают на частоте около 200 МГц).

Причина все та же: внутренняя шина обмена с периферией очень быстро "перегружается", потери начинаются уже при потоке ниже 1 млн событий в секунду. Здесь же вскрылось прочее "неудобное", например, что вроде-как наиболее топологически близкое к периферии ядро 8051 (напрямую?) видит не все периферийные регистры. И т. д.

В общем, события можно фиксировать с прекрасной точностью, но в печальных количествах.

Минутка разъяснений

Та отрасль, задачи которой решались, - электроэнергетика (англ. power). В фокусе полупроводниковой вычислительной техники, специфика электроэнергетики в том, что ни отечественная, ни вся мировая электроэнергетика в целом даже за последние двадцать лет не породила платежеспособного спроса на специфические для и ориентированные на решение именно ее уникальных задач процессоры с соответствующей архитектурой и периферией. Отсюда, всем приходится довольствоваться тем, на что порождают платежеспособный спрос другие отрасли, прежде всего, роботизация и прочая автоматизация. Поэтому нет ничего неожиданного в том, что нецелевые решения начинают использовать нецелевым способом. Целевых-то полупроводниковых решений в электроэнергетике нет. (Ну, кроме ИМС счетчиков, но эту подотрасль можно считать вообще отдельной и стоящей ближе к метрологии, нежели к пауэру.) И, наверное, не будет - спросу взяться объективно неоткуда.

Применение нецелевых решений практически всегда означает, что и решаться, и далее применяться должна фактически предельная задача. А это - изделие предельных параметров (ИПП). Заданный тренд на и14е и прочие конъюнктурные условия, типа санкций и пр., делают ИПП и соответствующие задачи еще более предельными.

Так что пусть никого не удивляют ни описанные выше целевые задачи, ни нецелевые полупроводниковые решения, на основе которых такие задачи пытались решить. Кроме того, для раскрытия потенциала чего-либо - ИМС процессора в нашем случае - предельные задачи подходят идеально. Разве нет?

Заключение

ИМС SP7021 - интересный экземпляр вычислительной платформы. Есть в нем что-то свое, такое, уж простите, несуразно-привлекательное. Подойдет ли он вам? Если вы поборник неказенщины и приемлете лишь и14е без токсичных государевых денег, то только он и подойдет. Тиббо сделала его на свои и для себя и, надеюсь, что ее задачи он решает исчерпывающе. Сможет ли он решить ваши задачи? Ну, если они не такие как мои, то, наверное, сможет :-)

Конечно, цена по сравнению с ближайшим конкурентом (T113-S3, см. КДПВ) не-айс. На момент изысканий цена примерно 1 к 4 была не в пользу Тиббо. Ведь если не функция, то хотя бы цена. У Тиббо есть чем ответить на это?

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

Теги:
Хабы:
Всего голосов 10: ↑9 и ↓1+12
Комментарии7

Публикации

Ближайшие события