Задание:
Для ПЦОС ADSP21xx составить программу вычисления скалярного произведения двух векторов
n=32
Выполнение:
Объявлено два массива u_input и v_inpuit для хранения исходных данных. Причём u_input – в памяти данных, а v_input – в памяти программ. Также в памяти данных объявлена переменная output для хранения результата.
Инициализированы регистры для адресации исходных данных и результата. Для векторов модификаторы инициализированы на 1, чтобы происходило автоматическое перемещение к следующему элементу массива.
Установлен режим, что в МАС результат представляет собой целое число.
Устанавливается начальное значение AR=0.
Затем выполняется цикл для каждого элемента массива, в котором за один такт считываются следующие значения векторов. Затем они перемножаются и складываются с AR.
Выдаётся результат в output.
Текст программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#define n 32 .section/dm seg_dmdata; .var u_input[n] = 1,2,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1; .var output; .section/pm seg_pmdata; .var v_input[n] = 4,5,6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1; .section/pm seg_pmcode; .global start; start: //First vector - u I2 = u_input; L2 = 0; //Second vector - v I6 = v_input; L6 = 0; //Result I0 = output; L0 = 0; M2 = 1; M6 = 1; CNTR = n; AR=0; ena m_mode;/*Celiy tip resultata v MAC*/ DO add_loop UNTIL CE; AX0 = DM(I2, M2), AY0 = PM(I6, M6),MR=0; MR = AX0 * AY0(uu); add_loop: AR=AR+MR0; DM(I0, 0) = AR; IDLE; |
Выводы по работе:
Были изучены основы программирования для ADSP21xx.
Скачать ZIP-архив с исходными кодами к лабораторной работе № 4 по МПСС