李 源
摘 要:在简述SystemC的设计方法和流程的基础上,针对SystemC在硬件芯片系统级设计和寄存器传输级设计的特点,以Turbo编码器为对象和开发目的,研究了SystemC基于寄存器传输级设计的可实现性,利用SystemC的模块化功能,通过分析Turbo编码器的结构与信号流图,进行建模仿真直到最后完成划分硬件模块与编程并在FPGA完成其实现与验证,充分证明了SystemC完全适用于基于寄存器传输级设计的IC应用。此外,此设计将系统级设计与寄存器传输级设计的工作合二为一,大大节省了开发的流程时间。
关键词:SystemC;Turbo;系统级设计;寄存器传输级;FPGA;测试平台
中图分类号:TP274文献标识码:B
文章编号:1004-373X(2009)05-163-04
Application and Verification of Turbo Codec with SystemC
LI Yuan
(Shanghai Jiaotong University,Shanghai,200030,China)
Abstract:The paper introduces methods and flows of IC design using SystemC firstly.And then researches and implements a Turbo encoder with RTL design using SystemC according its functionality of SLD and RTL capability.To prove the RTL capability of SystemC especially,the paper analyzes the structure and signal flows of Turbo encoder,simulats the Turbo modeling until finally completes the hardware design and implements it on a FPGA platform using a simulation testbench for verification.It saves more design times because it merges the SLD and RTL design to one step.
Keywords:SystemC;Turbo;system level design;RTL;FPGA;testbench
收稿日期:2008-09-16
0 引 言
在传统硬件设计方法中,系统级设计(SLD)往往使用高级语言进行描述以实现各功能模块的算法,而在寄存器传输级(RTL)使用硬件描述语言如VHDL和Verilog HDL进行描述。但随着深亚微米时代的到来,集成电路规模越来越复杂,为了实现较高层次如系统级的软件和硬件描述,较好地实现软硬件的协同设计,业界推出了SystemC语言,但是SystemC的优点并不仅仅是针对于此,而且还表现在它使得系统级设计和RTL级设计均可能在同一平台下完成。
本文主要针对SystemC可以像使用VHDL或者Verilog语言一样进行RTL级和行为级的建模的特点,讨论了基于SystemC RTL级设计的Turbo编码器的实现和验证,并在FPGA平
台上进行其系统实现。
1 SystemC简介
SystemC[1,2]是由开放性、非盈利性的SystemC联盟组织(Open SystemC Initiative,OSCI)推出的一种系统级设计和验证语言,SystemC是基于C++的建模平台,其本质是在C++的基础上添加了硬件扩展库和仿真核,支持EDA设计中的各个抽象层次,如寄存器级、行为级、系统级的建模,能够表达并发性、实时性、交互性等硬件模型的概念。
SystemC是完全免费并且开放的,它的源代码可以使用任何标准C++编译环境进行编译,生成可执行文件。通过使用SystemC类库,设计者可以根据不同的需求编写目标系统的系统级(system level)、行为级(behavioral level)或RTL级的SystemC模型代码。
SystemC中的模块用关键字SC_MODULE来定义,其端口定义与Verilog类似。在SystemC中,进程是一个基本的执行单元,它被调用来仿真目标系统的行为。进程的行为是多样化的,可以实现某个函数的功能,也可以在运行过程中被挂起,并且进程是并行执行的,一个进程中不能包含或直接调用其他进程。SystemC的进程主要有两种,事件进程(SC_METHOD)和线程进程(SC_THREAD)。事件进程是惟一可以综合的RTL进程,它的特点是当敏感表上有事件发生时,它就被调用,调用后立即返回。只有该类进程返回后,仿真系统的时间才有可能前进,因此该类进程不能被挂起(类似于Verilog中的always)。线程进程不是RTL级进程,它可以被挂起和重新激活,所以它的一个重要用途是用来描述验证平台(testbench) [3]。
2 Turbo编码器的SystemC实现与仿真
2.1 Turbo编码器简述
Turbo码编码器[4-5]是由两个反馈的系统卷积码编码器通过一个随机交织器并行连接而成,编码后的校验位经过删余阵,从而产生不同码率的码字。由于Turbo码能得到较大的编码增益,因此许多低信噪比通信系统中都选择了Turbo作为信道编码。
本文中实现的Turbo码为3GPP中专用信道使用的编码格式,码率为1/3,其生成矩阵如下所示:
G(D)=1,1+D+D31+D2+D3
对于码率为1/3的Turbo码,不存在删余部分。其编码器结构图如图1所示。
图1 3GPP八状态Turbo码编码器结构
2.2 Turbo编码器的SystemC实现
首先对系统可以进行模块划分,整个编码器是一个大模块,其中包含一个交织子模块,两个结构完全相同的分量码编码子模块RSC,以及一个事件进程来完成最后编码的输出,它们之间采用同步时钟进行时序同步。为了简化起见,这里交织器就只采用随机交织方式完成。
为完成整个Turbo码编码系统的验证和仿真,还必须有激励模块和显示输出模块,以达到验证和观察系统实现的正确性。整个系统的SystemC实现及测试方法模块说明如图2所示。
图2 SystemC系统实现测试模块说明图
其中主模块内部系统信号流图如图3所示。通过图3可以清楚地看到各个子模块和事件进程的输入输出信号关系,以达到更加清晰的实现目的。
图3 TurboEncMain模块系统信号流图
为了完成对Turbo码实现的系统验证以及最接近硬件逻辑的RTL级验证,必须在使用SystemC时注意要编写完全可综合风格的代码,所以代码的实现必须严格按图1的编码结构来进行。其中核心的RSC模块类封装参考如下:
SC_MODULE(RSC)
{
sc_in<bool>clk;
sc_in<bool>Xin;
sc_out<bool> Yout;
sc_signal<bool>d1,d2,d3;
SC_CTOR(RSC)
{
SC_METHOD(entry);
dont_initialize();
sensitive_pos(clk);
d1 = 0;
d2 = 0;
d3 = 0;
}
void entry();
};
2.3 SystemC验证仿真
为了对设计进行验证,Stimulus模块完成Testbench的输入和仿真过程的控制功能,Display模块完成打印和输出Trace及log(VCD文件)的功能。为了简便起见,设计的输入帧长为100 b,其Testbench的设计及理论输出如下:
输入Input序列为:0xACBC,0xD211,0x4CAE,0x1577,0xC6DB, 0xF4C9,0x0;
交织后输入的Input_de序列为:0xBD85,0x078C,0x1D2A,0xBB80,0xEEEE,0xF973,0xA;
理论上此结构Turbo编码输出result(以3 b为一个码元输出共300 b)如下序列:
0x7,0x3,0x4,0x1,0x5,0x6,0x2,0x1,0x5,0x0,0x7,0x6,0x7,0x6,0x0,0x2,0x6,0x6,0x3,0x4,0x1,0x2,0x5,0x1,0x2,0x2,0x2,0x7,0x3,0x1,0x3,0x5,0x1,0x4,0x0,0x0,0x4,0x4,0x2,0x4,0x4,0x0,0x4,0x1,0x7,0x7,0x7,0x0,0x3,0x1,0x2,0x5,0x1,0x5,0x0,0x7,0x1,0x5,0x5,0x5,0x0,0x4,0x7,0x4,0x4,0x5,0x0,0x3,0x3,0x4,0x4,0x1,0x4,0x6,0x3,0x6,0x7,0x2,0x5,0x7,0x7,0x5,0x6,0x5,0x2,0x7,0x2,0x1,0x4,0x6,0x2,0x0,0x4,0x1,0x0,0x5,0x3,0x7,0x2,0x6。
本设计Testbench的输出VCD波形用Wave VCD Viewer显示,如图4所示。实际上使用了多组Testbench对设计进行验证,最终的输出均表明本设计符合理论要求。
图4 设计仿真输出波形
3 FPGA实现与验证
3.1 FPGA系统实现
经过上面的仿真设计,验证了RTL模型的结构,就可以进行后面的ASIC设计或FPGA硬件验证。在一般的IC设计流程中,为了提高ASIC流片的成功率,有必要使用FPGA硬件电路进行逻辑仿真。
在FPGA实现中,设计的Turbo编码器是整个物理信道数据编码上行链路的一个部分[6],支持3G标准中最高5 114 b的输入序列帧长,实现对3G专用信道的1/3冗余编码,它将与Turbo解码器和信道模拟模块组成一个测试环路,完成对整个Turbo Codec的IP验证。编码器由4个主要部分组成,其框图如图5所示。
图5 硬件逻辑实现Turbo编码器框图
各个部分的功能描述如下:
(1) 编码器输入缓存模块(enc_ibuf),实现两路输入存放缓存以及乒乓缓存机制,内部框图如图6所示。
图6 输入缓存模块框图
(2) 编码器移位RSC模块(enc_shft),即上面SystemC实现的模块,完成移位输出编码后结果的功能。
(3) 编码器输出缓存模块(enc_obuf),存放输出数据和归零位比特,并完成3 b并串转换输出,内部框图如图7所示。
图7 输出缓存模块框图
(4) 编码器控制模块(enc_ctrl),完成整个编码器内部模块时序的控制,如输入/输出模块的寻址读写、移位、尾比特归零等等操作,其主要时序控制流程图如图8所示。
图8 编码器控制模块控制时序流程图
3.2 FPGA逻辑验证
选用Xilinx的Virtex-E系列[7,8]的FPGA XCV600E对本设计进行验证。软件平台主要使用的是Xilinx集成开发环境ISE Foundation。其中第三方工具使用了综合工具FPGA CompilerⅡ,布局布线工具选用的是ISE中的Webpack suite。
使用支持SystemC的综合工具SCC(SystemC Compiler)完成综合。SCC将SystemC描述的RTL级电路通过其综合生成相应的Verilog文件,实现后续流程与传统设计语言设计的FPGA流程的无缝衔接。
在ISE平台调用FCII对综合生成的Verilog文件与其他模块的Verilog代码约束时钟、引脚信息等,进行逻辑综合和优化,得到EDIF格式网表并经Webpack完成布局布线取得sdf文件和.bit二进制配置文件。最后将.bit文件下载至开发板上的XCV600E器件中,上电加载后板子跑起来可以得到逻辑输出。
从对XCV600E中消耗的逻辑资源分析可以看到,编码器所占的等效门为21 578个门。调试后将shft_s1_dat,shft_p1_dat,shft_p2_dat等信号从XCV600E的管脚引出,经逻辑分析仪采集这些管脚的输出数据与Testbench理论输出进行对比分析,最后得出结论,本设计编码器的输出完全符合设计要求。
4 结 语
在越来越复杂的大规模集成电路设计中,如何保证设计的成功性和时效性,引起了越来越多的设计人员的重视,SystemC的提出并引起广泛关注的原因也就显而易见。现以Turbo码的编码系统为例研究了SystemC在实际系统仿真和验证中的应用,以及基于RTL级实现并能完成综合的SystemC设计方法,这个系统只是整个编解码系统的一部分,其解码部分更加复杂,但其核心算法部分同样可以用相同的方法完成其仿真、验证和实现。在整个设计过程中,测试平台一直没有改变,从而保证了验证工作的连贯性和高效率。
可以看出,SystemC强大的系统级设计能力以及同时具有RTL级和行为级设计的能力为未来复杂的IC设计提供了更为广阔的空间。虽然如何采用SystemC进行设计,目前还没有一个完全的设计规范流程,但是相信随着进一步的深入研究,基于SystemC的设计方法必将成为IC设计领域的最佳主流标准之一。
参考文献
[1]Synopsys Inc.SystemC Version 2.0 User′s Guide[EB/OL].http://www.systemC.org.
[2]Synopsys Inc.Functional Specification for SystemC 2.0.http://www.systemc.org.
[3]Leena Singh,Leonard Drucker,Neyaz Khan.Advanced Verification Techniques-A SystemC Based Approach for Successful Tapeout[M].Kluwer Academic Publishers,2004.
[4]王新梅,肖国镇.纠错码——原理与方法(修订版)[M].西安:西安电子科技大学出版社,2001.
[5]Berrou C,Glavieuxa.Near Optimum Error Correcting Coding and Decoding:Turbo Codes [J].IEEE Trans.on Communications,1998,48(2):24-31.
[6]John G,Proakis.Digital Communications.Third Edition.McGraw-Hill,1995.
[7]Xilinx Inc.Virtex-E FPGA User′s Guide[EB/OL].http://www.xilinx.com.
[8]田耘,徐文波,张延伟.无线通信FPGA设计[M].北京:电子工业出版社,2008.
[9]IEEE Computer Society.IEEE Standard SystemC Language Reference Manual[Z].2006.
[10]Bhasker J.A SystemC Primer[M].Star Galaxy Publishing,2002.
作者简介 李 源 男,硕士研究生,任Marvell公司DSP系统高级工程师。主要研究方向为系统设计与实现,多媒体与信源信道编解码处理。