April 9th, 2021

QuatCore

Слишком общительный счётчик

Вчера я чуть поторопился отсинтезировать проект,параметры не поменял: RomWidth = 8 вместо 7, RamWidth = 9 вместо 8, и ещё EnableByteAccess=1, чтобы байтовые строки лежали в памяти компактно.

При повторном синтезе с этими параметрами, предельная частота получилась и вовсе 23,87 МГц, и такая вот простыня failed paths:


И в этой простыне всплывает очень странная вещь: счётчик пикселей из QuatCoreOddGPUInput комбинаторно соединён и с мультиплексором источников данных QuatCoreSrcMux, и с ПЗУ кода QuatCoreCodeROM, хотя, казалось бы, не должен.

Методом "пристального взгляда" нашёл, в чём там было дело...

Collapse )

Теперь предельная частота составляет 27,4 МГц, уже неплохо.

Осталось убедиться, что ничего не поломали в процессе, и попробовать запустить.
QuatCore

Нахождение двух самых отдалённых точек

Пока компьютер долго и упорно мучал симуляцию, я пытался написать на ассемблере алгоритм захвата на ближней дистанции. А сейчас на этом коде можно проверить, что после "балансировки конвейера" ничего не поломали, работает, как и прежде.

Пока что у нас был алгоритм для дальней дистанции, где мы видим 4 пятна: мишени дальней дистанции 1-3 (МДД1-МДД3) и мишень ближней дистанции (МБД), отдельные элементы которой с такого расстояния сливаются в одно пятно.
TestFrameEnlarged.png

По счастью, часть этапов будут общими для обоих алгоритмов. Алгоритм дальней дистанции состоял из 6 этапов:
1. Нахождение самого отдалённого пятна на изображении (это будет МДД3),
2. Сортировка оставшихся пятен против часовой стрелки, относительно МДД3,
3. Нахождение матрицы аффинного преобразования путём умножения матрицы 3х4 на матрицу 4х2, образованную четырьмя точками - центрами наших пятен.
4. Нахождение крена и выражение его в виде кватерниона, компенсация крена в матрице аффинного преобразования.
5. Нахождение масштаба
6. Нахождение вектора параллельного переноса.

Матрицу аффинного преобразования в алгоритме ближней дистанции будем находить, умножая матрицу 3х6 на матрицу 6х2, т.е из 8 обнаруженных пятен возьмём только "задние" 6, лежащие в одной плоскости. Два вынесенных вперёд нарушают все условия аффинного преобразования, и к тому же одно из них мы можем "потерять", т.к оно перегородит собой одно из 6 при взгляде с экстремального ракурса, неудобно!

Ну а вместо первых 2 пунктов у нас, увы, появляется целых 5:

Collapse )

Проверять будем уже в понедельник. Я уже смирился, что к 12-му у меня макет ещё не заработает, да и дурное это дело поспевать к определённым датам.

На выходных, если получится, попробую доделать "мобильную" мишень дальней дистанции.