- 1、本文档共84页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第5章-线性汇编优化代码
5.10 存储体 5.10.1 FIR滤波器的内核循环 【例5.60】 FIR滤波器最后汇编代码的内核循环。 LOOP: ADD .L2X A8,B9,B9 ; sum1 += x1 * h0 || ADD .L1 A7,A9,A9 ; sum0 += x0 * h0 || MPY .M2 B1,B0,B7 ;* x1 * h1 || MPY .M1X B1,A1,A8 ;* x1 * h0 ||[B2] B .S2 LOOP ;** 跳转至内循环 || LDH .D1 *A5++[2],A1 ;**** h0 = h[i] || LDH .D2 *B5++[2],B1 ;**** x1 = x[j+i+1] ADD .L1X B7,A9,A9 ; sum0 += x1 * h1 || ADD .L2 B8,B9,B9 ; sum1 += x0 * h1 || MPY .M2X A0,B0,B8 ;* x0 * h1 || MPY .M1 A0,A1,A7 ;** x0 * h0 ||[B2] SUB .S2 B2,1,B2 ;*** 内循环计数器递减 || LDH .D2 *B4++[2],B0 ;**** h1 = h[i+1] || LDH .D1 *A4++[2],A0 ;**** x0 = x[j+i+2] 5.10.1 FIR滤波器的内核循环 画出数组的奇偶元素的读取安排在同一循环周期内的FIR滤波器相关图,如图5-24所示。 5.10.2 展开的FIR滤波器的C代码 例5.61是展开内核循环后的FIR滤波器C代码,该方法增加了安排指令的灵活性,而在不考虑数组存储形式和存储器block的情况下,写出不产生存储体冲突的FIR滤波器代码。 【例5.61】 展开内核循环后的FIR滤波器C代码。 5.10.3 将C代码转换为线性汇编 例5.62为循环展开的FIR滤波器C代码内核循环的线性汇编。 【例5.62】 展开的FIR滤波器内核循环线性汇编。 5.10.4 画相关性图 图5-25是不存在存储器冲突的FIR滤波器的相关性图。 5.10.5 含有.mptr命令的展开后FIR线性汇编 例5.63给出了具有.mptr伪指令的展开FIR滤波器内核循环的线性汇编,.mptr伪指令允许汇编优化器根据特定指针寄存器和存储器访问信息,确定两个存储器操作是否存在bank冲突。 【例5.63】 展开的FIR滤波器线性汇编。 5.10.6 线性汇编资源分配 随着一个循环内的指令数的增加,对该循环内的每个数值安排特定的寄存器越来越困难,由于TMS320C6000仅有32个寄存器,如果一个循环内有33条指令,且每一条指令都有一个数值,则这些数值不能单独占用一个寄存器,而是由该循环中不在相同周期存活的数值分享寄存器,手工安排寄存器虽然不复杂,但是可能会很慢。 5.10.7 确定最小迭代间隔 如表5-19所示为FIR滤波器代码资源,没有存储器冲突的FIR滤波器的最小迭代间隔应该是4,这意味着每周期完成2个乘累加。 单元 指令 合计/单元 单元 指令 合计/单元 .M1 4 MPY 4 .M2 4 MPY 2 .S1 0 .S2 B 1 .D1 4 LDHs 4 .D2 4 LDHs 2 .L1,S1或.D1 4 ADDs 4 .L2,.S2或.D2 4ADDs and SUB 3 非.M单元合计 8 非.M单元合计 10 1x路径 4 2x路径 4 5.10.8 最后汇编 例5.64是消除冗余取和无存储器冲突的FIR滤波器的最后汇编代码,该代码的执行周期数为2402(50(8*4+10+6)+2),其外环开销为16个周期。 【例5.64】 消除冗余取和无存储器冲突的FIR滤波器汇编代码。 5.11 软件流水外循环 5.11.1 展开FIR滤波器的C代码 【例5.65】 循环展开后的FIR滤波器C代码。 5.11.2 最后汇编 例5.66是软件流水外环的FIR滤波器的最后汇编代码。在内循环后的每条指令注释中使用了e、p或o标记,分别表示指令是排空、填充和外环指令。 【例5.66】 消除冗余取、无存储器冲突和软件流水外环的FIR滤波器汇编代码。 5.12 同内循环一起条件执行外循环 5.12.1 展开FIR滤波器的C代码 【例5.67】 展开后的FIR滤波器C代码。 5.12.2 将内核循环的C代码转换为线性汇编 【例5.68】 展开后的FIR内核循环的线性汇编。 5.12.3 将外环的C代码转换为线性汇编 【例5.69】 FIR滤波器外环线性汇编。 [sctr] SUB sctr,1,s
文档评论(0)