490 likes | 595 Vues
PBTL Problem-Based Teaching and Learning. 蕭 天 泉 南台科技大學 資工系. 對象 : 初學者. 希望達成的目標 :. 1. 培養解題分析能力. 2. 訓練從 CCS 之 help 檔自尋答案. 加法運算. 蕭 天 泉 南台科技大學 資工系. [ 一 ] : 問題敘述. 兩數相加 : 寫 c54x 程式執行下列加法運算 1. z = c1 + c2 ; c1, c2 為整數常數 2. z = x + c2 ; c2 為整數常數 , x 為
E N D
PBTLProblem-BasedTeachingandLearning 蕭 天 泉 南台科技大學 資工系
對象: 初學者 • 希望達成的目標 : 1. 培養解題分析能力 2. 訓練從 CCS 之 help 檔自尋答案
加法運算 蕭 天 泉 南台科技大學 資工系
[一] : 問題敘述 • 兩數相加: 寫 c54x 程式執行下列加法運算 • 1. z = c1 + c2 ; c1, c2 為整數常數 • 2. z = x + c2 ; c2 為整數常數, x為 dma (data memory address) 資料 • 3. z = x + y ; x, y 為 dma 資料
[二] : 學習目標 • 1. ADD command • 2. Immediate addressing • 3. Absolute addressing • 4. Direct addressing
[三] : 解題分析 • 1. 上述題目所需之指令為加法運算, (指令為 ADD) 及儲存 • 2. 查CCS中之 Arithmetic Instructions 及 Load/Store Instructions • 3. ADD指令共有十種格式, 依上述資料型態選 用適當格式
ADD 指令 1: ADD Smem, src 2: ADD Smem, TS, src 3: ADD Smem, 16, src [,dst] 4. ADD Smem, [SHIFT,] src [,dst] 5: ADD Xmem, SHIFT1, src 6: ADD Xmem, Ymem, dst 7: ADD #lk, [SHIFT1,] src [,dst 8: ADD #lk, 16, src [,dst] 9: ADD src [, SHIFT] [,dst] 10: ADD src, ASM [,dst]
************** z = c1 + c2************** • * Immediate & Absolute addressing • (2) LD #c1, A • (1) ADD #c2, A ; A = (A) + (#c2) • (3) STL A, *(z) ;store (AL) into ;location z
************* z = x + c2************* • * Immediate, direct, absolute addressing • (3) LD #c2,A ; A = #c2 • (2) LD #x, DP • (1) ADD @x, A ; A = A + (x) • (4) STL A, *(z)
**************** z = x + y**************** • (4) LD #y, DP • (3) LD @y, A ;A = (y) • (2) LD #x, DP • (1) ADD @x, A ;A = (A) + (x) • (5) STL A, *(z)
加法運算 The End
乘法運算 蕭 天 泉 南台科技大學 資工系
[一] : 問題敘述 • 兩數相乘: 寫 c54x 程式執行下列乘法運算 • 1. z = c1 * c2 ; c1, c2 為整數常數 • 2. z = x * c2 ; c2為整數常數, x 為dma (data memory address) 資料 • 3. z = x * y ; x, y 為dma 資料
[二] : 學習目標 • 1. MPY command • 2. 定義 .mmregs • 3. Indirect addressing
[三] : 解題分析 • 1. 上述題目所需之指令為乘法運算, (指令為 MPY) 及儲存 • 2. 查CCS中之 Arithmetic Instructions 及 Load/Store Instructions • 3. MPY 指令共有四種格式, 依上述資料型態 選用適當格式
MPY 指令 • 1. MPY command • 1: MPY[R] Smem, dst • 2: MPY Xmem ,Ymem, dst • 3: MPY Smem, #lk, dst • 4: MPY #lk, dst • Execution • 1: (TREG) x (Smem) --> dst • 2: (Xmem) x (Ymem) --> dst • (Xmem) -->TREG • 3: (Smem) x lk --> dst • (Smem) --> TREG • 4: (TREG) x lk --> dst
************** z = c1 * c2************** • *可否仿照加法運算 ?? • (2) LD #c1, A • (1) MPY #c2, A ; A = (A) * (#c2) • (3) STL A, *(z) ;store (AL) into ;location z • *上述為錯誤碼
************** z = c1 * c2************** • 正確的方法 • (2) STM #c1,T ;需定義mmregs • (1) MPY #c2, A ; A = (TREG) * (#c2) • (3) STL A, *(z) ;store (AL) into ;location z
************* z = x * c2************* • LD #x, DP • MPY @x, #c2, A • STL A, *(z)
**************** z = x * y**************** • (3) STM #y, AR3 • (2) STM #x, AR2 • (1) MPY *AR2, *AR3, A ;?? MPY @x, @y, A • (4) STL A, *(z)
**************** z = x * y**************** • STM #y, AR3 • STM #x, AR2 • MPY *AR2, *AR3, A ;?? MPY @x, @y, A • STL A, *(z)
**************** z = x * y**************** • 注意 : 下列碼語法錯誤 • STM #y, AR3 • STM #x, AR1 ;AR1不可使用 • MPY *AR1, *AR3, A • STL A, *(z)
MPY command 1: MPY[R] Smem, dst 2: MPY Xmem ,Ymem, dst 3: MPY Smem, #lk, dst 4: MPY #lk, dst • Xmem, Ymem Dual data-memory operands 只能使用 AR2, AR3, AR4, AR5 四個registers
乘法運算 The End
乘加運算(一) 蕭 天 泉 南台科技大學 資工系
[一] : 問題敘述 • 乘加運算: 寫 c54x 程式執行下列乘法運算 • y = -5 x + 10 for x = -5,-4,-3,-2,-1,0,1,2,3,4,5
[二] : 學習目標 • ADD 及 MPY 指令復習 • 學習迴圈控制
[三] : 解題分析 • for i =0 to 10 y[i] = -5 * x[i] + 10 end • for i =0 to 10 A = -5 * x[i] y[i] = A + 10 end
用 MPY,ADD 及 RPTB 指令 • STM #x, AR2 • STM #y, AR3 • STM #10, BRC • RPTB lp-1 • MPY *AR2+, #(-5), A ;A=-5 * x(i) • ADD #10, A ;A = A + 10 • STL A, *AR3+ • lp:
乘加運算(一) The End
乘加運算(二) 蕭 天 泉 南台科技大學 資工系
[一] : 問題敘述 • 乘加運算: 寫 c54x 程式執行下列乘法運算 • 1. z = x[0]*y[0] + x[1]*y[1] + ... +x[N]*y[N]
3. Convolution Summation • z[n] = h[0]x[n] + h[1]x[n-1] + … + h[N]x[n-N]
[二] : 學習目標 • 學習迴圈控制 • 學習乘加指令 MAC • 乘加運算的應用 • 學習circular buffers 概念
MAC 指令 • 1: MAC[R] Smem, src • 2: MAC[R] Xmem, Ymem, src [,dst] • 3: MAC #lk, src [,dst] • 4: MAC Smem, #lk, src [,dst]
[三] : 解題分析 • z=x[0]*y[0]+x[1]*y[1]+...+x[9]*y[9] • a = 0 • for i = 0 to 9 • a = a + x[i]*y[i] • end • x .int 1, 2, 3, 4, 5, 6, 7, 8, 9 • y .int 1, 1, 1, 1,-1,-1,-1,-1
1. 用 MPY,ADD 及 RPTB 指令 • STM #x, AR2 • STM #y, AR3 • STM #9, BRC • LD #0, A ;A = 0 • RPTB lp • MPY *AR2+, *AR3+, B ;B=x(i)*y(i) • lp: ADD B, A ;A = A + B • STL A, *(z)
2. 用 RPT 及 MAC 指令 • STM #x, AR2 • STM #y, AR3 • STM #z, AR4 • LD #0, A • RPT #9 • MAC *AR2+, *AR3+, A • STL A, *AR4
3. 用RPTZ指令 • RPTZ A, #9 • MAC *AR2+, *AR3+, A
[四] : 解題分析 (題二) • for i = 0 to 2 • a = 0 • for j = 0 to 2 • a = a + x[j]*x[j] • end • z[i] = a • end
資料的設定 (方式一) • x .int 1, 2, 3, 4, 5, 6, 7, 8, 9 • y .int 1, -1, 2, 1, -1, 2, 1, -1, 2 • z .usect “result”, 3
資料的設定 (方式二) • .sect “c1” • x .int 1, 2, 3, 4, 5, 6, 7, 8, 9 • .sect “c2” • y .int 1, -1, 2 • z .usect “result”, 3
STM #y, AR3 • STM #z, AR4 • STM #x, AR2 • STM #1, AR0 • STM #3, BK • STM #2, BRC • RPTB lp-1 • RPTZ A, #2 • MAC *AR2+, *AR3+0%, A • STL A, *AR4+ • Lp ** circular buffers y 之 address 有限制
The circular-buffer size register (BK) specifies the size of the circular buffer. A circular buffer of size R must start on a N-bit boundary (that is, the N LSBs of the base address of the circular buffer must be 0), where N is the smallest integer that satisfies 2n > R.
Convolution Summationz[n] = h[0]x[n] + h[1]x[n-1] + … + h[N]x[n-N] • z[n] = h[0]x[n] + h[1]x[n-1] + h[2]x[n-2] for n = 2 to 9 • x .int x0, x1, x2, x3, x4, x5, x6, x7, x8, x9 • h .int h2, h1, h0
STM #h, AR3 • STM #z, AR4 • STM #x, AR2 • STM #1, AR0 • STM #3, BK • STM #2, BRC • RPTB lp-1 • RPTZ A, #2 • MAC *AR2+, *AR3+0%, A • STL A, *AR4+ • MAR *+AR2(#-2) • Lp
MACD 指令常被用於 Convolution Summation 之運算 MACD Smem, pmad, src (Smem) x (pmad) -> (src) (Smem) -> TREG (Smem) -> Smem + 1
謝謝各位 敬請指教