nabbla (nabbla1) wrote,
nabbla
nabbla1

Categories:

Ошибка в доработанном видеопроцессоре

Разумеется, с первого раза он заработать не мог. Если вчера просто ошибся с чётностью, то сегодня уже при правильной чётности он успешно обработал первые 38 строк изображения, а как только началось что-то хоть отдалённо интересное - вдруг выкинул все результаты работы!

Дело в этих строках:
reg ParityRequired = 1'b0;
always @(posedge clk) if (IsOurAddr & SrcAddr[0])
	ParityRequired <= ~ParityRequired;
	
wire outOdd;	
	
wire WrongParity = (ParityRequired ^ outOdd ^ SrcAddr[0]) & (~empty);
wire rdreq = IsOurAddr & (((~SrcAddr[2]) & SrcAddr[1]) | WrongParity );	


Совсем "забыл", что мы можем застрять всерьёз и надолго на команде 0x89, которая "переворачивает" запрашиваемую чётность, и при таком исполнении она будет переворачиваться на каждом такте!


Забавно, что аж 38 строк подряд нам везло, и чётность переворачивалась сколько нужно раз, и только потом вдруг "не склалось".

Можно сделать так:
always @(posedge clk) if (IsOurAddr & SrcAddr[0] & (~empty))
	ParityRequired <= ~ParityRequired;


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

А можно оставить как есть, но гарантировать, что данная команда будет выполнена ровно за 1 такт, т.е отключить "ожидание появления данных", всё равно мы их здесь не используем! Т.е строку

assign DestStallReq = empty & IsOurAddr;


заменить на:
assign DestStallReq = empty & IsOurAddr & (~SrcAddr[0]);


В результате "старые" команды GPUL = 0x88, GPUH = 0x8A, GPUPL = 0x8C и GPUPH = 0x8E (у них у всех младший бит 0) не будут завершаться, пока не появятся реальные данные, так и всегда и было. А вот "новая" команда BGPUL = 0x89 ничего ждать не будет. Если в момент её прихода в очереди что-то уже лежало, притом неверной чётности - оно будет вытолкнуто. А если пока очередь была пуста, а значение пришло позже - оно также будет потихоньку "выталкиваться" командой GPUL, которая вообще не должна выталкивать данные из очереди (ведь мы ещё не все части прочитали!), а здесь вытолкнет.


Сейчас дождёмся окончания симуляции - и посмотрим, работает ли оно.

Всё-таки этот алгоритм мне пока кажется более предпочтительным, чем "нейросети", они же оптимальное обнаружение. Для начала, он жрёт меньше памяти, ему не нужно перебирать размеры пятен, перестраивая фильтры, и вообще он использует железо "на сдачу". QuatCore у нас по-любому есть, пущай работает. А видеопроцессор в первую очередь был заточен под измерение центров пятен с субпиксельной точностью, но с помощью небольших доработок удалось заставить его "по совместительству" искать максимум и его координату :) А если сделать отдельно фильтры, нужен интерфейс для их перестройки, и каким-то образом выдавать в процессор свои результаты работы,координаты X и Y всех найденных пятен.

Но помучался я с ним знатно...
Tags: ПЛИС, программки, работа, странные девайсы
Subscribe

  • О вытягивании себя из болота по методу Мюнхгаузена

    Всё готовлюсь к встрече с представителями РКК Энергия, нужно убедить их в моём способе определения положения ВидеоИзмерителя Параметров Сближения на…

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

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

  • Гетто-байк

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

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

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

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

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

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

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

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments