Опубликован: 12.07.2010 | Уровень: специалист | Доступ: платный | ВУЗ: Алтайский государственный университет
Лекция 4:
Многоядерные процессоры с низким энергопотреблением
Файл coef0.vf
Код:
: 2pi_k/N ( N k -- ; f: -- 2pi_k/N ) s>f s>f f/ pi 2.e f* f* ; : icos ( N k -- icos ) 2pi_k/N cos ; IMMEDIATE
Файл math.vf
Код:
: d*-shift ( x y -- pl ) \ учитываем только младшую часть * drop drop a@ $20000 # xor \ -- ph pl 2/ 2/ 2/ 2/ 2/ 2/ 2/ 2/ ; : negate not 1 # . +
Файл Hartley_test_.vf
Код:
{ считаем, что обрабатываем данные с ацп 28-0 27-2......21-14 18-1 27-3......21-15 } v.VF +include" c7Gr01/romconfig.f" 0 VALUE in_ 0 VALUE in_1 0 VALUE in_2 0 VALUE out_ 0 VALUE out_1 0 VALUE out_2 $b5 VALUE rr 16 VALUE num \ количество отсчетов 0 VALUE v \ текущий отсчет Хартли спектра include Fpmath.f include coef0.vf num 0 icos VALUE c0 num 1 icos VALUE c1 num 2 icos VALUE c2 num 3 icos VALUE c3 num 4 icos VALUE c4 38 {node \ ядро - "генератор" сигнала 0 org here =p '-d-- # b! $100 # !b $100 # !b $0 # !b $0 # !b $0 # !b $0 # !b $0 # !b $0 # !b $0 # !b $0 # !b $0 # !b $0 # !b $0 # !b $0 # !b $100 # !b $100 # !b node} 28 {node 0 org \ входной порт в регистре -b ; выходной -a; : 8transit @b !a : 7transit @b !a @b !a @b !a @b !a @b !a @b !a @b !a ; : a!b! ( a# b# -- ; a= b= ) b! a! ; : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : negate not 1 # . + ; here =p \ ----перестановка---------------- '--l- # '-d-- # a!b! @b \ -- f0 7transit '---u # a! 8transit \ ----перый этап------------------ '---u # b! +bat \ ----второй этап----------------- '--l- # dup a!b! +bat \ ----третий этап----------------- +bat \ --f0 \ ----четвертый этап-------------- \ работаем с числами одинарной точности \ т.е. просто отбрасываем старшую часть \ --f0 a=l; b=l; @b \ -- f0 f8 include bat.vf . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 27 {node : 3transit @b !a : 2transit @b !a : transit> @b !a ; : transit< @a !b ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт в регистре -b ; выходной -a; here =p \ ----перестановка---------------- 'r--- # '--l- # a!b! 3transit @b \ -- f2 3transit \ ----перый этап------------------ '---u # dup a!b! +bat \ ----второй этап----------------- '--l- # dup a!b! -bat \ ----третий этап----------------- 'r--- # b! \ a=l ; b=r transit> transit< 'r--- # a! +bat \ a=r b=r \ ----четвертый этап-------------- \ -- f2 ; a=r b=r '--l- # a! \ -- f2 ; a=l b=r transit> \ -- f2 ; a=l b=r @b @b \ -- f2 f10 f14 . + \ -- f2 f10+f14 c2 # d*-shift \ -- f2 [f10+f14]*c2 include bat.vf \ -- H2 H10 . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 26 {node : 4transit @b !a @b !a : 2transit @b !a : transit> @b !a ; : transit< @a !b ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт в регистре -b ; выходной -a; here =p \ ----перестановка---------------- '--l- # 'r--- # a!b! transit> @b \ -- f4 4transit \ ----перый этап------------------ '---u # dup a!b! +bat \ ----второй этап----------------- '--l- # dup a!b! +bat \ ----третий этап----------------- 'r--- # dup a!b! -bat \ a=r b=r '--l- # b! transit> \ a=r b=l ; transit @b>>!a ; transit< \ ----четвертый этап-------------- \ -- f4 ; a=r b=l ; transit> @b \ -- f4 f12 ; a=r b=l ; 2transit \ -- f4 f12 ; a=r b=l ; include bat.vf \ -- H4 H12 . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 25 {node : 3transit @b !a : 2transit @b !a : transit> @b !a ; : transit< @a !b ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт в регистре -b ; выходной -a; here =p \ ----перестановка---------------- 'r--- # '--l- # a!b! 3transit @b \ -- f6 transit> \ ----перый этап------------------ '---u # dup a!b! +bat \ ----второй этап----------------- '--l- # dup a!b! -bat \ ----третий этап----------------- -bat \ ----четвертый этап-------------- \ -- f6 ; a=l ; b=l 'r--- # b! \ -- f6 ; a=l ; b=r 2transit @b dup !a @b dup !a \ -- f6 f10 f14; a=l ; b=r negate + c2 # d*-shift \ -- f6 [f10-f14]*c2; a=l ; b=r include bat.vf \ -- H6 H14 . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 24 {node : 3transit @b !a @b !a @b !a ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; \ входной порт в регистре -b ; выходной -a; here =p \ ----перестановка---------------- '--l- # 'r--- # a!b! @b \ -- f8 3transit \ ----перый этап------------------ '---u # dup a!b! +bat \ ----второй этап----------------- '--l- # dup a!b! +bat \ ----третий этап----------------- +bat \ ----четвертый этап-------------- \ -- f8; a=l; b=l 'r--- # a! \ -- f8; a=r; b=l; dup !a \ -- f8; a=r; b=l; 3transit . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 23 {node : 2transit @b !a : transit> @b !a ; : transit< @a !b ; \ : a!b! ( a# b# -- ; a= b= ) b! a! ; : negate not 1 # . + ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт в регистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- 'r--- # '--l- # b! a! transit> @b \ -- f10 transit> \ ----перый этап------------------ '---u # dup a! b! +bat \ ----второй этап----------------- '--l- # dup a! b! -bat \ ----третий этап----------------- 'r--- # b! \ a=l ; b=r transit> transit< 'r--- # a! +bat \ a=r b=r \ ----четвертый этап-------------- \ -- f10 ; a=r; b=r; '--l- # a! \ -- f10 ; a=l; b=r; transit> dup !a \ -- f10 ; a=l; b=r; transit> . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 22 {node : transit> @b !a ; : transit< @a !b ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт врегистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- '--l- # 'r--- # a!b! @b \ -- f10 transit> \ ----перый этап------------------ '---u # dup a!b! +bat \ ----второй этап----------------- '--l- # dup a!b! +bat \ ----третий этап----------------- 'r--- # dup a!b! -bat \ a=r b=r '--l- # b! transit> \ a=r b=l ; transit @b>>!a ; transit< \ ----четвертый этап-------------- \ -- f12 ; a=r ; b=l dup !a transit> . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 21 {node : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт врегистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- 'r--- # '--l- # a!b! @b \ -- f10 \ ----перый этап------------------ '---u # dup a!b! +bat \ ----второй этап----------------- '--l- # dup a!b! -bat \ ----третий этап----------------- -bat \ ----четвертый этап-------------- \ -- f14; a=l; b=l; dup !a . '-d-- # b! @b \ останов ядра - только для режима симуляции node} \ -------------------------------------------------------------------------- \ ---- нечетные номера------------------------------------------------------ 18 {node 0 org : 7transit @b !a @b !a @b !a @b !a @b !a @b !a @b !a ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт в регистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- '--l- # '---u # a!b! @b \ -- f1 7transit \ ----первый этап------------------ '---u # dup a!b! -bat \ ----второй этап----------------- '--l- # dup a!b! +bat \ -- f(2,1) \ ----третий этап----------------- \ -- f; a=l;b=l; dup push \ -- f ; r: -- f @b @b . + rr # d*-shift \ -- f [5+7]*r ; r: -- f dup dup xor dup . + drop . + \ f3 pop \ f3 f dup !b !b \ . '-d-- # b! @b \ ----червертый этап------------ \ -- f1 ; a=** ; b=l @b c1 # d*-shift \ -- f1 f9*c1 ; a=** ; b=l\ @b c3 # d*-shift \ -- f1 f9*c1 f15*c3 ; a=** ; b=l + \ -- f1 f9*c1+f15*c3 ; a=** ; b=l include bat.vf . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 17 {node : 3transit @b !a : 2transit @b !a : transit> @b !a ; include math.vf : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт в регистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- 'r--- # '--l- # b! a! 3transit @b \ -- f2 3transit \ ----первый этап------------------ '---u # dup a! b! -bat \ ----второй этап----------------- '--l- # dup a! b! -bat \ ----третий этап----------------- 'r--- # b! 2transit \ -- f(2,3) @b @b . + rr # d*-shift \ -- f [5+7]d*r ; r: -- f dup dup xor dup . + drop . \ очищаем бит переноса + \ f3 'r--- # '--l- # b! a! 2transit \ a=r; b=l; \ . '-d-- # b! @b \ ---четвертый этап-------------- '--l- # 'r--- # b! a! \ -- f3 ; a=l ; b=r 2transit @b c3 # d*-shift \ -- f1 f11*c1 ; a=** ; b=l\ @b c1 # d*-shift \ -- f1 f11*c1 f13*c3 ; a=** ; b=l + \ -- f1 f11*c1+f13*c3 ; a=** ; b=l include bat.vf \ -- H3 H11 . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 16 {node include math.vf : negate not 1 # . + ; : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт в регистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- '--l- # 'r--- # b! a! @b !a \ transit> @b \ -- f4 @b !a @b !a @b !a @b !a \ 4transit \ ----первый этап------------------ '---u # dup a! b! -bat \ ----второй этап----------------- '--l- # dup a! b! +bat \ --f(2,5) \ ----третий этап----------------- dup \ -- f f ; a=l ; b=l 'r--- # a! !a \ -- f a=r; b=l @b !a \ transit> dup !a @b !a \ transit> \ -- f a=r; b=l dup @b \ -- f5 f5 f7 a@ push . + rr # d*-shift negate \ -- f5 -r*[f5+f7] dup dup xor dup . + drop . \ очищаем бит переноса pop a! @a . + \ -- f5 -r*[f5+f7]+f3 ; a=r;b=l over !b @a !b \ transit< \ . '-d-- # b! @b \ ---четвертый этап-------------- 'r--- # '--l- # b! a! \ -- f5 ; a=r; b=l @b !a @b !a \ 2transit a@ push @b dup !a c1 # d*-shift pop a! @b dup !a c3 # d*-shift negate + \ -- f5 c1*f11-c3*f13 ; a=**; b=l include bat.vf \ -- H5 H13 . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 15 {node : 3transit @b !a @b !a @b !a ; include math.vf : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт врегистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- 'r--- # '--l- # b! a! 3transit @b \ -- f6 @b !a \ transit> \ ----первый этап------------------ '---u # dup a! b! -bat \ ----второй этап----------------- '--l- # dup a! b! -bat \ ----третий этап----------------- dup negate over \ -- f -f f a=l; b=l !b !b \ -- f dup !b @b negate + rr # d*-shift @b . + \ \ . '-d-- # b! @b \ ---четвертый этап-------------- '--l- # 'r--- # b! a! \ -- f7; a=l; b=r a@ dup push push @b dup !a c3 # d*-shift \ -- f7 f9*c3; a=**; b=r pop a! @b dup !a c1 # d*-shift \ -- f7 f9*c3 f15*c1; a=**; b=r negate + \ -- f7 f9*c3-f15*c1; a=**; b=r pop a! @b !a @b !a \ 2transit include bat.vf \ -- H7 H15 . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 14 {node : 3transit @b !a @b !a @b !a ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт врегистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- '--l- # 'r--- # a!b! @b \ -- f8 3transit \ ----первый этап------------------ '---u # dup a!b! -bat \ ----второй этап----------------- '--l- # dup a!b! +bat \ ----третий этап----------------- \ -- f; a=l;b=l; dup push \ -- f ; r: -- f @b @b . + rr # d*-shift \ -- f [5+7]*r ; r: -- f dup dup xor dup . + drop . + \ f3 pop \ f3 f dup !b !b \ . '-d-- # b! @b \ ---четвертый этап-------------- 'r--- # '--l- # a!b! \ -- f9 ; a=r; b=l; dup !a 3transit . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 13 {node : 2transit @b !a : transit> @b !a ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт врегистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- 'r--- # '--l- # a!b! transit> @b \ -- f10 transit> \ ----первый этап------------------ '---u # dup a!b! -bat \ ----второй этап----------------- '--l- # dup a!b! -bat \ ----третий этап----------------- 'r--- # b! 2transit \ -- f(2,3) @b @b . + rr # d*-shift \ -- f [5+7]d*r ; r: -- f dup dup xor dup . + drop . \ очищаем бит переноса + \ f3 'r--- # '--l- # a!b! 2transit \ . '-d-- # b! @b \ ---четвертый этап-------------- '--l- # 'r--- # a!b! \ -- f11 ; a=l; b=r transit> dup !a transit> . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 12 {node : transit> @b !a ; : transit< @a !b ; : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : +bat ( f1 -- f1+f2; @b=f2 -- ; -- !a=f1 ) @b over !a . + ; : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт врегистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- '--l- # 'r--- # a!b! @b \ -- f10 transit> \ ----первый этап------------------ '---u # dup a!b! -bat \ ----второй этап----------------- '--l- # dup a!b! +bat \ ----третий этап----------------- dup \ -- f f ; a=l ; b=l 'r--- # a! !a \ -- f13 a=r; b=l transit> dup !a transit> \ -- f13 a=r; b=l dup negate @b \ -- f13 -f13 f15 a@ push . + rr # d*-shift \ -- f13 r*[-f13+f15] dup dup xor dup . + drop . \ очищаем бит переноса pop a! @a . + \ -- f13 r*[-f13+f15]+f9 ; a=r;b=l over !b transit< \ . '-d-- # b! @b \ ---четвертый этап-------------- \ -- f12 ; a=r; b=l; transit> dup !a . '-d-- # b! @b \ останов ядра - только для режима симуляции node} 11 {node : a!b! ( a# b# -- ; a= b= ) b! a! ; include math.vf : -bat ( f1 -- f1-f2; @b=f2 -- ; -- !a=f1 ) dup !a negate @b . + ; \ входной порт врегистре -b ; выходной -a; here *cy =p \ ----перестановка---------------- 'r--- # '--l- # a!b! @b \ -- f10 \ ----первый этап------------------ '---u # dup a!b! -bat \ ----второй этап----------------- '--l- # dup a!b! -bat \ ----третий этап----------------- dup negate over \ -- f -f f a=l; b=l !b !b \ -- f dup !b @b negate + rr # d*-shift @b . + \ \ . '-d-- # b! @b \ ---четвертый этап-------------- '--l- # dup a!b! dup !a \ -- f15 . '-d-- # b! @b \ останов ядра - только для режима симуляции node} reset \ reset prepares the system to run the code in the Simulator \ enter simulate or sim to start the simulator cr \ 14 13 12 11 watch4 1 setstep 28 27 26 25 watch4 1 setstep sim
Результаты
Временные параметры вычислений следующие:
- вычисление коэффициента Хартли спектра ~ 1150 тактов или около 620000 преобразований в секунду.