nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Испытываем алг. обнаружения с новой АЛУ

Для начала - на симуляции, где вместо изображения 1024х1024 (как должно быть в лётном изделии) или 1024х720 (как сейчас в макете) используется изображение 128х128, в которое влезает ровно одно большое пятно.

Опять дурит fitter: у меня сейчас стоял QuatCoreImmRom (в кои-то веки таблица непосредственных значений выполнена на блоке внутренней памяти, EAB, вместо толпы ЛЭ), и с ним я получил Critical Warning - timing constraints were not met. Уже приготовился морально к очередному "ускорению" QuatCore, одна идейка уже была [Spoiler (click to open)]
формировать IsOurAddr для всех модулей Dest "централизованно" и заблаговременно. В конце концов, и DestAddr, и DestStallReq претерпевают задержку на 1 такт, т.е сидят в регистрах. А значит, и IsOurAddr можно формировать заблаговременно и защёлкивать. Тогда в самих модулях укоротятся комбинаторные пути, что если и не ускорит нас, то по кр. мере облегчит работу Fitter'у.
, но для начала попробовал заменить QuatCoreImmRom назад на QuatCoreImmTable (на ЛЭ) - и в этот раз всё сработало. Малые изменения в проекте могут оказывать большое влияние на то, что выдаст Fitter, плюс-минус 3 МГц предельная частота гуляет вообще легко. Ускориться всё равно неплохо, обязательно ускоримся. Но позже!

Поглядим на вывод DEmptySet: это отладочный вывод, в котором защёлкнется единичка, если мы дали "пустое" задание на обработку видеопроцессору. Это обычно свидетельствует об ошибке, или запаздывании. В прошлый раз такое случилось на строке изображения номер 0x17 = 23 , и как оказалось, не хватило 17 тактов. Потом ещё чуть подправили - и не хватило 11 тактов!

В этот раз DEmptySet не срабатывает, всё хорошо от начала до конца. В конце симуляции сравниваем номер строки изображения из [SP+2] (где его подсчитывала наша программа) и в генераторе тестового изображения - как отличались на единичку в начале работы, на ту же единичку отличаются в конце, то есть сбоев на строку в процессе работы не было.

Давайте посмотрим дамп памяти в конце симуляции:


ВСЁ ХОРОШО!


Вот листинг интересующего участка, где стоят значения по умолчанию (ими инициализируется память при подаче питания):
ActivePoints:     09B  0x009D
AllPoints:        09C  0x8000
APHeadDummyX:     09D  0x8000
Heap:             09E  0x00A0
APTailDummyX:     09F  0x7FFF
Elem0Next:        0A0  0x00A4
Elem0D:           0A1  ????
Elem0X:           0A2  ????
Elem0Y:           0A3  ????
Elem1:            0A4  0x00A8
Elem1[1]:         0A5  ????
Elem1[2]:         0A6  ????
Elem1[3]:         0A7  ????
Elem2:            0A8  0x00AC
Elem2[1]:         0A9  ????
Elem2[2]:         0AA  ????
Elem2[3]:         0AB  ????
Elem3:            0AC  0x00B0
Elem3[1]:         0AD  ????
Elem3[2]:         0AE  ????
Elem3[3]:         0AF  ????
Elem4:            0B0  0x00B4
Elem4[1]:         0B1  ????
Elem4[2]:         0B2  ????
Elem4[3]:         0B3  ????


По адресу 0x9B лежит "левое фиктивное пятно" с X-координатой всегда 0x8000 (а Y-координата и диаметр - вообще неважно!), и оно по умолчанию указывает на "правое фиктивное пятно" 0x9D с X-координатой всегда 0x7FFF.

Но сейчас оно ссылается на пятно с адресом 0xA4 (отмечено синим), центр которого (0x37, 0x36), или в десятичном виде (55, 54), и диаметр 0x65 = 101. Похоже на правду.

Оно, в свою очередь, ссылает на "правое фиктивное пятно" (ссылка и само пятно отмечены зелёным).

Список AllPoints пока пуст (указатель сидит в 0x9B) помечен красным, 0x8000 означает Null или Nil), и это понятно: мы ещё не дошли до конца изображения, поэтому переносить это пятно из ActivePoints в AllPoints рановато.

Наконец, указатель Heap (0x9E) указывает на область 0xA8 (помечено фиолетовым), та в свою очередь указывает на 0xA0 (помечено рыжим), а она указывает на 0xAC (помечено голубым). Дальше они начинают указывать на своего соседа "справа" в памяти, т.е в порядке возрастания адресов - ровно так они были соединены при инициализации.

Из этого можно сделать вывод, что мы выделяли память под 3 элемента (под 3 пятна), но потом два из них освободили, поскольку произошло слияние нескольких маленьких пятнышек в одно большое.

Всё так, как и должно быть. Мы не стали плодить толпу мелких пятен, и не допустили утечки памяти - все незадействованные элементы вернулись в список Heap.

Но всё же понаблюдаем попристальнее за строкой 0x17=23, на которой в прошлый раз замешкались и не успели вовремя выдать задание на обработку.


Слева обведена команда ACQ, когда мы наконец-то выдали первое задание на обработку строки, до X = 0x33. А справа выделено, когда начали идти "полезные" пиксели этой строки. Главное было успеть до того, как она дойдёт до тех самых 0x33. Потом, всего несколько тактов спустя, мы выдавали следующее задание, до 0x4A, а потом и вовсе до самого конца строки и до синхроимпульса. Так что "опасность миновала".


Там, где раньше нам не хватило 11 тактов, теперь имеется запас в 61 такт, т.е одним махом отыграли почти 72 такта, или 17%. Я надеялся на более весомое ускорение, но этого должно хватить!

Можно уже попробовать "в железе" это дело, хотя сдаётся мне, что всё равно не заработает, придётся ещё попотеть с более реалистичной симуляцией, с несколькими пятнами...
Tags: ПЛИС, программки, работа, странные девайсы
Subscribe

Recent Posts from This Journal

  • Ремонт лыжных мостиков

    Вернулся с сегодняшнего субботника. Очень продуктивно: отремонтировали все ТРИ мостика! Правда, для этого надо было разделиться, благо народу…

  • Гетто-байк

    В субботу во время Великой Октябрьской резни бензопилой умудрился петуха сломать в велосипеде. По счастью, уже на следующий день удалось купить…

  • А всё-таки есть польза от ковариаций

    Вчера опробовал "сценарий", когда варьируем дальность от 1 метра до 11 метров. Получилось, что грамотное усреднение - это взять с огромными весами…

  • Так есть ли толк в ковариационной матрице?

    Задался этим вопросом применительно к своему прибору чуть более 2 недель назад. Рыл носом землю с попеременным успехом ( раз, два, три, четыре),…

  • Big Data, чтоб их ... (4)

    Наконец-то стряхнул пыль с компьютерной модели сближения, добавил в неё код, чтобы мы могли определить интересующие нас точки, и выписать…

  • Потёмкинская деревня - 2

    В ноябре 2020 года нужно было сделать скриншот несуществующей программы рабочего места под несуществующий прибор, чтобы добавить его в документацию.…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments