nabbla (nabbla1) wrote,
nabbla
nabbla1

Category:

QuatCore: более универсальный, чем мне казалось

Не так давно излагал возможные инструкции своего будущего процессора QuatCore (Quaternion Core). Большинство достаточно стандартные - прочитать, записать, прибавить, вычесть, умножить, условные и безусловные переходы, к этому добавляется автоматический инкремент/декремент и косвенная адресация с регистрами X, Y, Z, SP как "базовые" и i,j,k как "индексные".

Единственное, что в нём выявляло "заточенность" на работу с кватернионами - это довольно странный тип адресации [Y + i^j], и флаг PM (Plus-Minus), который определяется из регистров i,j по таблице:

+ - - -
+ + + -
+ - + +
+ + - +


и ещё один регистр Inv, который заставляет транспонировать эту табличку.

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


По сути, мы получаем возможность "на лету" строить такую матрицу:



Умножая её на вектор 4х1, приходим к умножению кватернионов.

Если оставив лишь 2 компонента, делая циклы от 0 до 1, получим такую матрицу:


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

Делая циклы от 1 до 3, получаем следующую матрицу:


Положив λ0=0, получаем векторное произведение (ещё надо будет её транспонировать, выставив Inv=1), а если λ0=1, а остальные компоненты малы - это будет матрица малого поворота.

Так что выделить под эти режимы 2 адреса из доступных 256 - очень даже выгодное вложение :)
Tags: ПЛИС, кватернионы-это просто (том 1), математика, работа
Subscribe

Recent Posts from This Journal

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

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

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

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

  • Балансируем конвейер QuatCore

    В пятницу у нас всё замечательно сработало на симуляции, первые 16 миллисекунд полёт нормальный. А вот прошить весь проект на ПЛИС и попробовать "в…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 5 comments