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

sonycman

Свой
  • Постов

    1 951
  • Зарегистрирован

  • Посещение

Весь контент sonycman


  1. Приветствую! Коллеги, если у кого-то вдруг имеется схема или другая документация на модули фирмы Enclustra, в частности Mercury XU5 и материнской платы Mercury+ ST1 - нижайше прошу поделиться. Мануал их сайт даёт скачать без проблем, но схему нет - запрашивают фирму\адрес\и т.п., а я физ. лицо, не светит мне ничего... :(
  2. Чертовщина творится. Убрал схему VGA выхода - PLL стала стабильно выдавать 32 МГц, выше пока не пробовал. До этого выше 29 МГц не поднималось. Что изменилось в разводке - если раньше в моей схеме был один MMCM и одна PLL в одном CMT блоке, то теперь вивадо развёл их по разным CMT, на разных сторонах чипа. Плюс раньше вивадо в цепи заворота тактовой между IOBUF и входом PLL вставлял BUFG, то теперь его нет. Больше вроде ничего не поменялось. Как объяснить повышение частоты PLL?
  3. Плата используется такая: Z-Turn v1. Вот схема питания: Настройка пина: LVTTL, FAST, 8ma. Можно попробовать настройку с бОльшим током... Дифф. стандарт тоже пока не пробовал, надо глянуть в эту сторону. В этом-же банке работает VGA выход на 28.5 МГц, который можно выключить, в принципе. По поводу фазового шума, думаю, вся эта идея не укладывается в спецификацию. В настройке PLL джиттер выставил по максимуму - 1 нс. Какой он там по факту - не скажу, но вероятнее всего поболее будет. Есть ещё идея уменьшить разрядность oserdes с 8-ми до 6-ти бит, то есть снизить коэфф. умножения до 6-ти, чтобы уменьшить входную частоту PLL. Но джиттер в этом случае только вырастет, мне кажется.
  4. Работает без проблем с часотой до 29 МГц, выше PLL не лочится и нормального клока на ее выходе нет. Получается,, входной пин не берет частоту выше 232 МГц (29 * 8)?
  5. Beby Благодарю за помощь, собралось, когда PLL инстанциировал как у Вас, в исходнике, а не через блок-дизайн. Дальше пришлось пин, через который генерируется клок, повесить на свободно висящий пин чипа, иначе 250МГц уже не схватывается входным буфером. Всё заработало, 576р @27МГц монитор подхватил как родные! С 32 битным счётчиком такой генератор позволит мне подгонять частоту с отклонением менее наносекунды от кадра к кадру!
  6. А если попробовать полноценный oserdes и завести CLK_2 на вход pll?
  7. Для идеального выравнивания сигналов по времени фрейма делаю HDMI клок чуть быстрее, а лишние такты клока блокирую через BUFGCE. Не получается без вывода клока наружу. Только используя два пина - выходной и входной...
  8. Только для проверки. Мне нужно генерировать частоту под входящий различный видеосигнал и синхронизироваться под него с точностью до нескольких сотен наносекунд на фрейм. На такое куцые ФАПЧ простого цинка не способны, к сожалению...
  9. Да всего 27 МГц. По осциллографу клок вполне ровный, частота по осциллографу 26.96, видеосигнал 576p 50 герц. Монитор на него не реагирует. Беру клок такой-же частоты с PLL цинка (без хитрого генератора), подаю на схему вместо сгенерированного - все работает. На ultrascale есть периферийный блок display port с отличным генератором частоты, у пятых циклонов отличные PLL с 24 битным фракционным делителем, а вот у простого цинка нихрена подходящего 😞 Придется ставить внешний синтезатор частоты.
  10. Именно с этого-же пина: IOBUF genclkio(.I(w_pin), .IO(io_pin), .O(pll_input), .T(1'b0)); w_pin - выход oserdes, pll_input - вход PLL. Статья довольно мутная, не знаю, где там автор проверял на практике. Проблему решил, использовав два пина. Идея, в общем-то работает, ФАПЧ лочится, но такой клок как пиксель клок видеосигнала использовать не получилось - монитор не распознаёт сигнал. Видимо, слишком большой джиттер...
  11. Приветствую. Пытаюсь реализовать генератор частоты для подстройки под различный видеосигнал. У цинка весьма ограниченные PLL с куцым 3 битным дробным делителем, которые не могут сгенерировать производьную частоту. Наткнулся на вот такую статью: Breaking all the rules to create an arbitrary clock signal Смысл там в том, чтобы генерировать клок на обычной логике, на счетчике, а потом, прогнав его через oserdes (умножив, как я понимаю, его на 8 для снижения фазового шума), подать на вход PLL, которая снизит джиттер и уже этот сигнал использовать для тактирования. Попробовал в железе - роутер не может развести выход oserdese2 на вход pll. То есть не получается вывести на внешний пин сигнал с сериализатора, и потом с этого же пина завести этот сигнал на вход pll. Это я что-то делаю не так, или действительно это не возможно?
  12. Ultrascale имеет когерентные порты, работа через которые позволяет обойтись без инвалидации кэша. По крайней мере в baremetal это работает.
  13. Как это нет? Да в том-же xfsbl_main.c функция main: XFSBL_STAGE3: Load the partitions: XFsbl_PartitionLoad - загрузка пользовательской программы. XFSBL_STAGE4: Handoff to the applications: XFsbl_Handoff - запуск программы. Всё это находится за 5 минут 👀
  14. После загрузки пользовательской программы, FSBL передает управление ей - переходом по адресу Entry point. Вроде бы доки в сети доступны, курите их и закрепляйте практикой.
  15. Спасибо! Ну мне нужен только mp1 layer3, а там проще - только 1152 сэмпла для моно и 2304 для стерео.
  16. А может кто дать линк на исходники этого декодера?
  17. Cortex-A53 и ARM DS 2021

    Неправильно выразился - в 32 битном режиме есть, конечно, я про 64 бита (aarch64).
  18. Cortex-A53 и ARM DS 2021

    В ARMv8-a нет этих инструкций, есть только STP/LDP - load/store register pair. Если юзать NEON можно ворочать сразу по 16 байт (Qx/Vx регистры), но на ARMv7-a тоже самое, кажется?
  19. Cortex-A53 и ARM DS 2021

    Не знаю, мне стало интересно, вот и решил глянуть. Наверное, ещё такие камешки могут быстрее ворочать большими объёмами данных? Вообще, машинный код ARMv8-A мне показался больше похожим на MIPS или RISC-V, чем на собственно ARM... :)
  20. Cortex-A53 и ARM DS 2021

    На форуме ARM ответили, что они сейчас не делают супер-оптимизированные библиотеки для ARMv8-A, а вместо этого есть оптимизированные процедуры отдельно вот здесь: ARM-software / optimized-routines И на том спасибо :) Странно, конечно, что либы для нового 6-го компилятора не дотягивают до либ старого 5-го. Кстати, прогнал Dhrystone Benchmark v2.1 (из Vitis 2022.1), оптимизация О2, DMIPS/MHz: GCC 11.2: 2.88 armclang v6.16: 5.75 Почему-то получилось, что гнусь в два раза медленнее
  21. Cortex-A53 и ARM DS 2021

    Пробую хвалёный ARM Compiler 6 из под ARM Development Studio 2021, версия компилятора 6.16. Скомпилировал простую програмку в режиме aarch64 с вызовом memset, оптимизация О2 (пробовал О3, даже Omax). Дизассемблер этой функции: _memset 0x00008c14: b4000261 a... CBZ x1,0x8c60 ; _memset + 76 0x00008c18: 36000060 `..6 TBZ w0,#0,0x8c24 ; _memset + 16 0x00008c1c: 38001402 ...8 STRB w2,[x0],#1 0x00008c20: d1000421 !... SUB x1,x1,#1 0x00008c24: f1000828 (... SUBS x8,x1,#2 0x00008c28: 54000143 C..T B.CC 0x8c50 ; _memset + 60 0x00008c2c: 36080060 `..6 TBZ w0,#1,0x8c38 ; _memset + 36 0x00008c30: 78002402 .$.x STRH w2,[x0],#2 0x00008c34: aa0803e1 .... MOV x1,x8 0x00008c38: f100103f ?... CMP x1,#4 0x00008c3c: 540000a3 ...T B.CC 0x8c50 ; _memset + 60 0x00008c40: d1001021 !... SUB x1,x1,#4 0x00008c44: f1000c3f ?... CMP x1,#3 0x00008c48: b8004402 .D.. STR w2,[x0],#4 0x00008c4c: 54ffffa8 ...T B.HI 0x8c40 ; _memset + 44 0x00008c50: 36080041 A..6 TBZ w1,#1,0x8c58 ; _memset + 68 0x00008c54: 78002402 .$.x STRH w2,[x0],#2 0x00008c58: 36000041 A..6 TBZ w1,#0,0x8c60 ; _memset + 76 0x00008c5c: 39000002 ...9 STRB w2,[x0,#0] 0x00008c60: d65f03c0 .._. RET __aeabi_memclr4 __aeabi_memclr8 __rt_memclr_w 0x00008c64: f100103f ?... CMP x1,#4 0x00008c68: 540000a3 ...T B.CC 0x8c7c ; __aeabi_memclr4 + 24 0x00008c6c: d1001021 !... SUB x1,x1,#4 0x00008c70: f1000c3f ?... CMP x1,#3 0x00008c74: b800441f .D.. STR wzr,[x0],#4 0x00008c78: 54ffffa8 ...T B.HI 0x8c6c ; __aeabi_memclr4 + 8 0x00008c7c: 37080061 a..7 TBNZ w1,#1,0x8c88 ; __aeabi_memclr4 + 36 0x00008c80: 37000081 ...7 TBNZ w1,#0,0x8c90 ; __aeabi_memclr4 + 44 0x00008c84: d65f03c0 .._. RET 0x00008c88: 7800241f .$.x STRH wzr,[x0],#2 0x00008c8c: 3607ffc1 ...6 TBZ w1,#0,0x8c84 ; __aeabi_memclr4 + 32 0x00008c90: 3900001f ...9 STRB wzr,[x0,#0] 0x00008c94: d65f03c0 .._. RET _memset_w 0x00008c98: f100103f ?... CMP x1,#4 0x00008c9c: 540000a3 ...T B.CC 0x8cb0 ; _memset_w + 24 0x00008ca0: d1001021 !... SUB x1,x1,#4 0x00008ca4: f1000c3f ?... CMP x1,#3 0x00008ca8: b8004402 .D.. STR w2,[x0],#4 0x00008cac: 54ffffa8 ...T B.HI 0x8ca0 ; _memset_w + 8 0x00008cb0: 37080061 a..7 TBNZ w1,#1,0x8cbc ; _memset_w + 36 0x00008cb4: 37000081 ...7 TBNZ w1,#0,0x8cc4 ; _memset_w + 44 0x00008cb8: d65f03c0 .._. RET 0x00008cbc: 78002402 .$.x STRH w2,[x0],#2 0x00008cc0: 3607ffc1 ...6 TBZ w1,#0,0x8cb8 ; _memset_w + 32 0x00008cc4: 39000002 ...9 STRB w2,[x0,#0] 0x00008cc8: d65f03c0 .._. RET И что-то я не вижу высоко-оптимизированного кода. Запись максимум 32-мя битами на 64 битном процессоре, никаких векторных регистров не задействовано... Это что за шит такой? Даже в бесплатном GCC эта функция юзает регистр NEONа, а здесь даже конь не валялся... Может, я что-то делаю не так? Или просто библиотеки для ARMv8-A под 64 бита сделаны абы как?
  22. Так есть же "нормальный" макрос, который создаёт пустой семафор: xSemaphoreCreateBinary() И в доке по vSemaphoreCreateBinary() указывается: По крайней мере в 10 версии операционки так.
  23. Зачем makefile править, просто в опциях компилятора укажите нужные директории для .h файлов.
  24. Держите: https://disk.yandex.ru/d/aNaqbFADXJTT2A Убрал только часть с AI, она весит 17 гигов Мне прислали без проблем, вроде всё хорошо, только продавец странный какой-то, совсем не отвечает на сообщения, даже не читает их.
×
×
  • Создать...