数字信号处理及应用精品课件第8章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法研究和系统模拟实现 定义系统性能指标
选择DSP芯片 和外围芯片
硬件设计
软件设计
硬件调试
软件调试
系统集成和测试
数字信号处理器软硬件设计与应用
8.1 C54x数字信号处理器程序设计
C54x数字信号处理器程序设计
循环寻址编程 DSP位倒序寻址编程 扩展精度运算
循环寻址编程
循环寻址是C54x指令系统的一个重要特性 卷积、相关及FIR滤波器等算法都可使用存储器中的循环
; 输入缓冲区起始地址 ; 输出缓冲区起始地址
; 输入输出循环缓冲区的大小
Байду номын сангаас
wait
STM
ST
RPTB
LD
MVDK
MVDK
get_samples:
LD
STL
LD
STL
MVKD
MVKD
aaa:
#data,AR1 #11,brc
aaa-1 #0,DP d_rcv_in_ptr,AR2 d_xmt_out_ptr,AR3
.usect “sin_vars”, 1
.text
sin_start: stm stm stm
sin_angle: ld st st squr st || ld masr mpya sth masr mpya st || ld masr mpya st || ld masr mpya sth ret .end
硬件设计工具
Protel 电路设计软件 AutoCAD 硬件设计语言VHDL 模拟电路仿真设计软
件Spice ……
DSP软件设计
软件理论基础
软件设计工具
数字信号处理理论知 识的深刻掌握。
理论算法结构的理解 及运用。
DSP硬件内部结构的 掌握
......
MATLAB科学计算软 件
C54x DSP芯片的一些结构特点使扩展精度计算也非常有 效
进位位C是实现扩展精度运算的关键
C54x的进位位C在ST0状态寄存器中,可被算数逻辑运算、移位及 ST0寄存器的操作所影响。当运算结果产生进位时C=1,不产生进位 时C=0
带16位移位操作的ADD加法指令:ADD Smem,16,Src 是一个例外, 此指令运算后的结果不产生进位时并不影响ST0中的进位位C
C MSB LSB X FF80000000 - FFFFFFFFFF 0 FF80000001
SUBB :
C MSB LSB
C MSB LSB
0 0000000000
0 FFFFFFFFFF
-
0
-
0
0 FFFFFFFFFF
1 FFFFFFFFFE
SUBB是两操作数相减后再减去进位位C的取反。既C=0时再减 1,C=1时再减0
C54x内部的两条数据总线(CB和DB)允许一些指令 在单周期内处理32 bit操作数,并能够高效地实现多精 度算术操作
扩展精度运算
64 bit的加法
X3 X2 X1 X0 + Y3 Y2 Y1 Y0
W3 W2 W1 W0
ADD64: DLD
@X1, A
;A=X1 X0
DADD
@Y1, A
;A=X1 X0+Y1 Y0
N m_start:
m_cbrev:
.text .set 8
AR0=#N AR2=#m_n AR3=#m_n BRC=#(N/2)
;AR0存放FFT变换点数
;AR2,AR3指向数据 ;循环N/2次
blockrepeat(#m_end)
m_again: mar(*AR2+0B)
;位倒序寻址
mar(*+AR3(2))
位倒序
0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15
一个实数FFT的位倒序程序:
.data
.align 0x1000
m_n .word 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
.text
N
.set 16
缓冲区进行循环寻址 循环缓冲区提供一个保存最新数据的可移动窗口。新数据
进入时,改写原有最旧的数据 循环缓冲区的容量、底部地址及顶部地址是通过块大小寄
存器(BK)和一个用户选择辅助寄存器(ARn)规定 一个循环缓冲区必须从一个K 位边界开始。这里K是满足
2k>R的最小整数,R是循环缓冲区的大小
循环寻址编程
A=AR2
B=AR3
A-=B
if(ALT) goto m_again
A=*AR2 B=*AR3 (*AR2+)=B
(*AR3+)=A
A=*AR2
B=*AR3
(*AR2-)=B
(*AR3-)=A
m_end: nop
.end
N点复数的位倒序运算结果
扩展精度运算
在数值分析、浮点运算和其它一些处理中,有要求比32 位精度(双精度)更高的运算操作。
循环寻址编程
新的数据覆盖最早的数据
循环寻址输入8个数据后缓冲区内容 数据缓冲器循环寻址输入/输出波形
循环寻址输入13个数据后的内容
输入数 据波形
输出数 据波形
循环寻址输出数
据波形就是输入数 据波形,延迟了4个 存储单元读出的时 间。
循环寻址模式举例
.mmregs .global _main
K_FRAME_SIZE d_rcv_in_ptr d_xmt_out_ptr
m_start:
AR0=#(N/2)
;AR0存放FFT变换点数的一半数值
AR2=#m_n
;AR2,AR3指向数据
AR3=#m_n
BRC=#(N/2)
;循环N/2次
m_cbrev:
blockrepeat(#m_end)
m_again:
mar(*AR2+0B)
;位倒序寻址
mar(*AR3+)
A=AR2
B=AR3
C/C++ 程序设计 DSP 汇编程序设计 DSP集成开发环境
......
DSP软硬件设计
设计步骤分几个阶段:
根据需求写出任务书 确定设计目标
(1)明确设计任务,确定设计目标 (2)算法模拟,确定性能指标 (3)选择DSP芯片和外围芯片 (4)设计实时的DSP应用系统 (5)硬件和软件调试 (6)系统集成和测试
*AR1+,A A,*AR2+% *AR3+%,B B,*AR0+ AR2,d_rcv_in_ptr AR3,d_xmt_out_ptr
B wait .end
; 初始化DP ; 恢复输入缓冲区指针 ; 恢复指针r
; 将输入采样数据装入到累加器A中 ; 将采样数据写到循环缓冲器中
; 保存输入缓冲区指针 ; 保存输出缓冲区指针
data
_main
.set 4 .usect "rcv_vars",1 .usect "rcv_vars",1 .data .word 10,20,30,40,50,60,70,80,90,100,110,120 .text
;12个伪采样数据
LD STM STM STM STM STM STM STM STM RPT ST STM STM
扩展精度运算
64 bit的减法
X3 X2 X1 X0 - Y3 Y2 Y1 Y0
W3 W2 W1 W0
SUB64: DLD DSUB DST DLD SUBB DST SUB DST RET
@X1, A @Y1, A A, @W1 @X3, A @Y2, A A, @W1 @Y3, 16, A A, @W3
DSP位倒序寻址编程
16点FFT的位倒序寻址前后,序列的地址和顺序变化
原序
位模式
0
0000
1
0001
2
0010
3
0011
4
0100
5
0101
6
0110
7
0111
8
1000
9
1001
10
1010
11
1011
12
1100
13
1101
14
1110
15
1111
位倒序模式
0000 1000 0100 1100 0010 1010 0110 1110 0001 1001 0101 1101 0011 1011 0111 1111
第八章 数字信号处理 器软硬件设计与应用
本章内容:
8.1 C54x数字信号处理器程序设计 8.2 C54x程序设计举例 8.3 C54x数字信号处理器硬件设计 8.4 DSP应用举例 8.5 全球DSP设计竞赛
DSP硬件电路设计
硬件电路基础
微机原理 DSP技术 数字电路 可编程门阵列FPGA 模拟电子线路 ……
3! 5! 7! 9!
3! 5! 7! 8 9
x x 3 x 5 (1 x 2 (1 x 2 )) 3! 5! 6 7 8 9
x(1 x 2 (1 x 2 (1 x 2 (1 x 2 )))) 23 45 67 89
式(1)
cosθ 1 x 2 x 4 x 6 x 8 1 x2 (1 x2 (1 x 2 (1 x 2 )))
例:采用循环寻址方式实现的采样数据输入/输出缓冲器。 循环缓冲区的大小是8,采样输入数据12个:10、 20 、…… 120,循环输入
输入和输出各使用一个循环缓冲区地址指针 每次用输入循环指针循环寻址输入一个采样数据时,同时用输出
循环指针循环寻址输出一个数据,循环缓冲区初始化是清零
循环缓冲区及输入/输出循环指针
DST
A, @W1
DLD
@X3, A
;A=X3 X2
ADDC
@Y2, A
;A=X3 X2+00 Y2+C
ADD @Y3, 16, A
;A=X3 X2+Y3 Y2+C
DST A, @W3
RET
32 bit数的减法操作和对进位位C的影响
SUB :
C MSB LSB
X FF80000000
-
1
1 FF7FFFFFFF
32 bit数的减法操作和对进位位C的影响
SUB Smem,16,Src:
C MSB LSB 1 FF8000FFFF - 0000010000 0 007FFFFFFF
C MSB LSB 0 FF8000FFFF - FFFFFF0000 0 FF8001FFFF
相减在有借位产生时,进位位C=0, 无借位产生时,进位位C不受影响
泰勒级数展开法
存储空间占用小,但运算量大,输出延时大
使用差分方程递推求解法
存储空间占用小,运算量小,误差容易积累
正弦波产生器
用泰勒级数法计算一个角度的正弦或余弦值
泰勒级数展开的前五项表达式为:
sinθ x x 3 x 5 x 7 x 9 x x 3 x 5 x 7 (1 x 2 )
DSP位倒序寻址编程
序列的倒序:将顺序地址的增加(加1)过程,变 为由左向右相加并进位,以适应FFT变换对序列 顺序的要求
实现的方法 :
用AR0辅助寄存器存放FFT变换点数的一半数值N 用另一个辅助寄存器,如AR2,指向输入序列(自然顺
序)在存储器中的基地址,当采用位倒序寻址把AR0的 内容加到辅助寄存器AR2中时,AR2的地址相加是以倒 序方式产生,即进位是从左向右。 AR2中位倒序寻址的结果就是已倒序后的输入序列地址 值。 DSP按这个地址去取数,这就实现了序列的倒序
;A=X1 X0 ;A=X1 X0-Y1 Y0
;A=X3 X2 ;A=X3 X2-00 Y2-(inv C)
;A=X3 X2-Y3 Y2-(inv C)
数字信号处理器软硬件设计与应用
8.1 C54x数字信号处理器程序设计 8.2 C54x程序设计举例
正弦波产生器
产生方法:
查表法
信号输出快,延时短,但存储空间占用较大
2! 4! 6! 8!
2 34 56 78
其中Ⅹ为角θ的弧度值
正弦波产生器
用泰勒级数展开式计算一个角度的正弦波值,即 求式(1)的数值并输出产生正弦波
正弦波产生程序
.mmregs
.def
d_x,d_squr_x,d_coff,d_sinx,C_1
.data
d_coff .sect “coeff”
A-=B
if(ALT) goto m_again
A=*AR2
B=*AR3
*AR2=B
*AR3=A
m_end: nop
.end
实数FFT位倒序运算结果
一个N点复数的位倒序
.data
.align 0x1000
m_n
.word 0,0,1,-1,2,-2,3,-3, 4,-4,5,-5,6,-6,7,-7,8,-8
#0,dp #2000h,AR2 #2004h,AR3 #2010h,AR0 #2000h,d_rcv_in_ptr #2004h,d_xmt_out_ptr 02900h,st1 076a0h,pmst #0ffah,sp #7 #0,*AR2+ #2000h,AR2 #2*K_FRAME_SIZE,BK
.word 01c7h
.word 030bh
.word 0666h
.word 1556h
d_x
.usect “sin_vars”, 1
d_squr_x
.usect “sin_vars”, 1
d_temp .usect “sin_vars”, 1
d_sinx .usect “sin_vars”, 1
c_1