APP下载

RS译码的高层次综合实现

2018-09-10杨振学王欢

计算机与网络 2018年12期
关键词:结构优化

杨振学 王欢

摘要:采用高层次综合技术实现RS译码电路,通过对RS译码C代码结构不同层次的优化,包括循环展开、求余简化、数据存储优化及算法结构优化等,探索了不同的结构对于综合后硬件电路性能和资源的影响。与传统RTL设计相比,使用高层次综合技术进行RTL设计大大节省了设计时间,减少了硬件的设计难度,降低了整体电路的设计风险。

关键词:RS译码;RTL设计;高层次综合;结构优化

中图分类号:TP336文献标志码:A文章编号:1008-1739(2018)12-54-4

Implementation of RS Decoding Algorithm Based on High-level Synthesis

YANG Zhenxue, WANG Huan(The 54th Research Institute of CETC, Shijiazhuang Hebei 050081, China)

0引言

近年来,随着通信电路应用的高速发展,通信系统对电路设计周期的要求越来越高。而通信系统中,通信IP的设计是关键。在通信IP的RTL设计时,使用传统方法设计的工程迭代周期长、代码复用困难,这些弊端逐渐成为影响设计的重要因素。高层次综合技术就在此时应运而生,可以实现直接从算法级的高级语言到RTL级的HDL语言的转换,从而有效地缩短通信系统FPGA验证或IC设计的研发周期[1]。

高层次综合技术在实现时首先要完成算法设计,依据工程要求设计好约束,使用高级综合工具就可以完成由C语言到RTL代码的自动转换。使用高层次综合技术进行硬件设计减少了传统手工编码可能会引入的设计误差,更重要的是在实现速度上要快很多,从而缩短通信系统整体的设计周期。综合工具并不会对硬件实现的具体细节进行约束,它探索不同的实现方案,并快速计算出不同微架构对硬件实现结果的影响,这样可以实现在较短时间内对即将实现的硬件方案在性能、面积和功耗三者之间折中[2-4]。

1 RS译码原理

RS码是一种性能优良的线性分组码,不仅可以纠正随机错误,还可以纠正突发错误,特别是在中短码长的情况下,其性能几乎接近理论值。RS码的编码效率很高,适合实时性要求较高的信息传输场合,故在数字通信系统中使用广泛,可以作为提高数据传输和数据存储可靠性的重要手段[5]。随着SoC技术的不断发展,市场竞争愈发激烈,如何在更短的时间内设计出更符合要求的产品成为研究重点。

在不同的系统中,对于RS码的参数要求可能不同,这使得RS编译码器,尤其是设计较为复杂的译码器的复用比较困难[6]。但是在使用C、C++等高级语言进行的算法级设计中修改参数会非常简便,利用高层次综合技术可以快速高效地实现RS译码器的硬件设计。在本设计中使用C语言完成算法设计,然后使用Synopsis公司的高层次综合工具SCC进行综合,最后实现硬件电路的设计。

2 RS译码电路实现

使用高层次综合技术进行RTL设计的流程图如图1所示。

从图1可以看出,原来传统流程中的微架构设计、RTL代码编写以及时序优化等几个过程都被高级综合技术取代了。使用高级综合技术进行设计的优点是C代码程序可以被高级综合工具自动分析,避免了系统工程师、逻辑工程师和验证工程师因为沟通上的偏差而产生设计上的不足,并且可以缩短设计周期。

2.1 RS译码的C代码优化

高层次综合工具可以自动分析C代码结构,并根据分析结果调用不同的硬件资源。本设计中使用SCC高级综合工具。虽然综合工具有很强的优化能力,但是优化结果还是依赖于设计者对于代码的合理结构设计和良好的代码风格。良好的代码架构设计会使综合工具达到最优的综合输出,而不好的代码架构设计会使综合工具产生错误的综合输出[7]。

软件工程师在进行算法设计时并不会对硬件结构进行考虑,例如数据的并行操作及流水线操作等,这样的算法结构直接进行综合可能不会得到性能最优的硬件电路,所以在进行综合之前需要先对C代码结构进行优化。

2.1.1循环展开

RS译码算法中存在大量的循环操作,C程序是依次执行,属于顺序结构。而RTL语言程序是可以在同一时间执行,属于并行结构。在综合时,为了提高数据的处理速度,可以选择将能同时处理的计算进行并行操作。循环展开的声明设置为“#pragma unroll”。具体来说,循环展开允许在当前迭代结束之前开始新的迭代计算。使用一个小代码进行具体说明,如图2所示,图2(a)是对C代码进行的具体约束,而图2(b)则是对约束后的代码结构进行的圖示说明。

但并不是所有的循环都适合添加循环展开约束,例如数据操作之间有依赖关系的,只能按照顺序执行,不能进行循环展开操作。

2.1.2流水线设计

在SCC综合工具中定义了task ii,即在映射成硬件时,函数连续调用的最短时间间隔。在对RS译码硬件结构增加流水线设计时,需要使用此命令进行约束。在本次的RS译码设计中码长为179,故将task ii约束为179。

在综合时进行多任务流水线处理时,需要对配置寄存器和存储器数组复制多个以备同时使用,否则多任务平台对同一个寄存器或者存储器进行操作时不能做到任务流水线化。一般可以在C代码中,对需要同时被多个任务使用的数组进行“#pragma multi_buffer”命令来指定映射成多个存储器。

2.2 C代码优化

2.2.1算法改进

在对V1版本的硬件电路进行分析时,发现在C代码中使用了大量的乘除法以及求余运算操作,进行硬件映射时会占用较大的资源,考虑到可以使用加减法代替以减少大量乘法器和除法器的使用。例如,计算伴随式s[i]的过程中,使用的是迭代循环计算,由于s[i]的计算方式的关系,会大量使用乘法器以及除法器,在进行并行操作过程中会造成大量资源的浪费,代码实现的方式如图3(a)所示。

在进行综合时添加约束时需要对进行循环展开,生成的Verilog代码结果是同时对s[1],s[2],……,s[16]一共16个元素展开并行计算。改进方法是使用加法代替乘法运算,这样就可以消除占用很多资源的乘法器,而且加法器的实现要比乘法器容易,实现方案如图3(b)所示。

2.2.2优化数据存储

在使用高级综合工具SCC实现C代码到RTL代码自动转换过程中,对于二维数组映射成硬件时,会将所有数据存储,并设置相应的输出端口,不会将其按行进行拆解存储。这对于数据较多的数组来说,会使用占用空间较大的寄存器,从而占用较多的硬件资源。为了达到一个在资源上更优化的结果,如果将多维数组分割设计成多个子数组,就可以将每个数组的端口数减少,这样的设计可以在综合存储器结构时因减少端口降低硬件资源消耗。

在V1版本的C代码基础上对以上2个方面进行改进,形成V2版本进行综合,也可以得到在性能上满足要求的RTL代码。

2.3结构优化

在V2版本的基础上,为了寻求更少的资源调用及更优化的结构,借用硬件设计思维对RS译码的C代码进行重新改写。SCC软件在进行高级综合时,对C代码结构要求比较严格,不同的C代码结构会产生不同的综合结果。在本设计中采用外置RAM块结构,进行数据存储。

以(179,163)的RS译码为例,具体实现流程如图4所示。以接收到某一次的译码数组为例,由于RS码组的码长为179,故在第一个码长周期时将数据存放在第1个RAM中;在第2个码长周期中(=1~179),将第1组码取出并计算其伴随式Si,同时将接收到的第2组RS码存放到第2块RAM中;在第3个码长周期中,第1组RS码根据在上一个周期计算出的伴随式来计算错误位置多项式da,而第2组RS码可以计算其伴随式Si,同时将接收到的第3组RS码存放在第3块RAM中;在第4个码长周期中,第1组RS码可以计算出错误位置以及错误值,然后在经过纠错后直接输出,而第2组码进行错误位置多项式的计算,第3组码进行伴随式的计算,同时将接收到的第4组码存放在第4块RAM中;由于第1组RS码已成功译码,所以当接收到第5组RS码时可以存放在第1块RAM中,再重复以上步骤,则图4中数据组接收顺序为(-3)(-2)(-1)(1)(2)(3)(4)。

2.4优化结果对比

对3种不同层次的优化结构在软件Synphony C Compiler下分别进行综合。频率约束都设置为200 MHz。SCC的综合过程可以分为2个互补的部分:build和仿真验证。在RS的build阶段,会将C代码通过一些中间转换(Preprocess、Schedule、Synthesize)最后生成RTL代码,而每一个中间转换过程都会有相应的仿真,这是为了验证每一个中间转换过程的正确性。任何一个中间阶段的失败都需要返回修改或者调整C代码[8]。SCC综合完成之后,除生成了可用的RS的RTL代码之外,还有一些资源使用情况评估报告,代码性能评估情况报告,以及供一些下游工具(仿真工具和综合工具)使用的脚本。通过这些报告以及SCC工具提供的各种架构分析可以及时了解RTL代码的性能,通过预先指定的工艺库可以进行ASIC下的资源使用评估。

对比3个版本的综合结果,首先都实现了硬件功能需求,能够完成RS译码功能,能纠正最多8个错误数据。通过对V1版本中运算单元以及数据存储方式优化后得到的V2版本,根据SCC工具给出的评估报告可以知道,资源的调用上减少到原来的1/3。而V3版本的C代码结构借用了硬件设计的思路,将每个模块之间的具有依赖关系的数据采用外置RAM数据存储,取代原先寄存器存储的方式,不仅在硬件结构上进行了优化,资源的使用也进一步减少。SCC工具综合后在report_summary.txt文档给出了使用TSMC65gp工艺时3个版本资源的使用预估情况,如表1所示。

3结束语

通过对3种版本的优化方式进行比较,发现在进行高层次综合时,对C代码的优化过程是必不可少的,而C代码结构越优化,生成的硬件电路也就越理想。經过循环展开、求余简化、数据存储优化以及结构修改,探索了不同层次的C代码优化对生成硬件电路的性能和资源的影响。结果表明,在算法性能满足要求的情况下,利用高层次综合技术可以极大地降低设计复杂度,充分探索不同设计结构和约束对设计结果的影响,快速选择出一种较优的设计方案。

由于高级综合技术发展时间较短,还有一些地方不是特别的完善。在综合过程中,需要根据硬件的需求来对C代码结构描述进行优化,以得到较优的硬件电路。但是使用高层次综合技术生成Verilog代码的方式与传统的编写方式相比,在功能满足需求的情况下,不仅使设计周期缩短,还可以提前对设计风险进行评估,根据通信系统目标需求提早对代码进行修改,降低设计后期出现问题的概率。

参考文献

[1]游余新.利用Mentor高层次综合技术(Catapult Synthesis)快速实现复杂DSP算法[J].中国集成电路,2007(5):35-41.

[2]孟祥刚,陈瑶,高腾,等.FFT算法硬件模块的高层次综合实现与优化[J].微电子学,2017,47(2):217-221.

[3]张望,贾佳,孟渊,等.基于高层次综合的AES算法研究与设计[J].计算机应用,2017,37(5):1341-1346.

[4]李东海,杨小军,杨云,等.多项式数据通路的高层次综合方法[J].北京邮电大学学报,2017,40(1):130-136.

[5]胡玉乐.RS译码加速器的实现[D].北京:北京邮电大学, 2011.

[6]胡智宽.基于RS编译码的数字通信电路FPGA设计研究[D].北京:北京理工大学,2015.

[7]李璐.基于C/C++的高层次综合应用研究[D].南京:东南大学,2009.

[8]王欢,李斌,张磊.基于高级综合技术的RS算法实现[J].中国集成电路,2016,25(11):46-49.

猜你喜欢

结构优化
优化张家界旅游业“六要素”结构对策研究
精益管理理念下的人才队伍结构优化实证研究
基于温升试验的10kV开关柜结构优化设计
改进的多目标快速群搜索算法的应用
某不锈钢车水箱安装框架强度分析与结构优化
景观美感视野下旅游目的地空间分形与结构优化刍议
基于Hyperworks Inspire的结构拓扑优化设计
中韩贸易结构优化策略探析
医疗保险制度的经济社会效应和结构优化探究
服务贸易结构优化路径研究