August 26th, 2020

QuatCore

QuatCore+GPU: начинается самое интересное

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

T=1,081 мс - мы заказали на обработку вторую строку и прыгнули в начало цикла по строкам. Как и в первый раз, застряли на команде GPUL, поскольку выходной буфер GPU опять пуст. Мы наблюдаем, как отработало задание по синхроимпульсу (ACQ HSync), хотя на "осциллограмме" на это почти нет никаких намёков. Теперь начинается задание ACQ WholeRow. Наконец, оно завершилось, мы получили свои данные: яркость 0x0FFF (то есть, по нулям) и координата 0x0000. Сравнили её с пороговой, не впечатлились и прыгнули в середину цикла, на проверку, остались ещё яркие точки в нашем списке? А их там и в помине не было, поэтому прыгаем совсем в конец цикла, где снова даём задания на обработку теперь уже третьей строки, и затем на строчный синхроимпульс за ней. Интересный факт: от получения ответа с GPU до отправки задания на обработку сейчас проходит 23 такта, что должно будет соответствовать 920 нс, когда выйдем на свои 25 МГц.

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

Примерно на T=1,095 мс мы опять застреваем на команде GPUL, теперь уже по третьей строке изображения. На T=1,107 мс получаем результат: нулевая яркость и нулевая координата. Делать нечего - завершаем цикл, заказывая всю четвёртую строку за раз.

На T=1,121 мс получаем ответ по четвёртой строке: нулевая яркость, нулевая координата. Скука! Заказываем всю пятую строку за раз.

На T=1,134 мс мы видим, что наконец-то началась какая-то движуха на входе! В смысле, ненулевые отсчёты:


Это уже интереснее!
Collapse )

В целом я доволен: мы уже просмотрели весь код, кроме 16 строчек, т.е "покрытие 80%". И всё сработало практически как надо. Да, нужно команду DIV2S подрихтовать, уменьшить задержку после синхроимпульса с 240 до 238 тактов, начать отсчёт строк с нуля, "как у всех нормальных людей", поставить D1=6, а не 3. Но ведь работает же!