李 源
摘 要:在簡述SystemC的設(shè)計方法和流程的基礎(chǔ)上,針對SystemC在硬件芯片系統(tǒng)級設(shè)計和寄存器傳輸級設(shè)計的特點,以Turbo編碼器為對象和開發(fā)目的,研究了SystemC基于寄存器傳輸級設(shè)計的可實現(xiàn)性,利用SystemC的模塊化功能,通過分析Turbo編碼器的結(jié)構(gòu)與信號流圖,進行建模仿真直到最后完成劃分硬件模塊與編程并在FPGA完成其實現(xiàn)與驗證,充分證明了SystemC完全適用于基于寄存器傳輸級設(shè)計的IC應(yīng)用。此外,此設(shè)計將系統(tǒng)級設(shè)計與寄存器傳輸級設(shè)計的工作合二為一,大大節(jié)省了開發(fā)的流程時間。
關(guān)鍵詞:SystemC;Turbo;系統(tǒng)級設(shè)計;寄存器傳輸級;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 引 言
在傳統(tǒng)硬件設(shè)計方法中,系統(tǒng)級設(shè)計(SLD)往往使用高級語言進行描述以實現(xiàn)各功能模塊的算法,而在寄存器傳輸級(RTL)使用硬件描述語言如VHDL和Verilog HDL進行描述。但隨著深亞微米時代的到來,集成電路規(guī)模越來越復(fù)雜,為了實現(xiàn)較高層次如系統(tǒng)級的軟件和硬件描述,較好地實現(xiàn)軟硬件的協(xié)同設(shè)計,業(yè)界推出了SystemC語言,但是SystemC的優(yōu)點并不僅僅是針對于此,而且還表現(xiàn)在它使得系統(tǒng)級設(shè)計和RTL級設(shè)計均可能在同一平臺下完成。
本文主要針對SystemC可以像使用VHDL或者Verilog語言一樣進行RTL級和行為級的建模的特點,討論了基于SystemC RTL級設(shè)計的Turbo編碼器的實現(xiàn)和驗證,并在FPGA平
臺上進行其系統(tǒng)實現(xiàn)。
1 SystemC簡介
SystemC[1,2]是由開放性、非盈利性的SystemC聯(lián)盟組織(Open SystemC Initiative,OSCI)推出的一種系統(tǒng)級設(shè)計和驗證語言,SystemC是基于C++的建模平臺,其本質(zhì)是在C++的基礎(chǔ)上添加了硬件擴展庫和仿真核,支持EDA設(shè)計中的各個抽象層次,如寄存器級、行為級、系統(tǒng)級的建模,能夠表達并發(fā)性、實時性、交互性等硬件模型的概念。
SystemC是完全免費并且開放的,它的源代碼可以使用任何標準C++編譯環(huán)境進行編譯,生成可執(zhí)行文件。通過使用SystemC類庫,設(shè)計者可以根據(jù)不同的需求編寫目標系統(tǒng)的系統(tǒng)級(system level)、行為級(behavioral level)或RTL級的SystemC模型代碼。
SystemC中的模塊用關(guān)鍵字SC_MODULE來定義,其端口定義與Verilog類似。在SystemC中,進程是一個基本的執(zhí)行單元,它被調(diào)用來仿真目標系統(tǒng)的行為。進程的行為是多樣化的,可以實現(xiàn)某個函數(shù)的功能,也可以在運行過程中被掛起,并且進程是并行執(zhí)行的,一個進程中不能包含或直接調(diào)用其他進程。SystemC的進程主要有兩種,事件進程(SC_METHOD)和線程進程(SC_THREAD)。事件進程是惟一可以綜合的RTL進程,它的特點是當(dāng)敏感表上有事件發(fā)生時,它就被調(diào)用,調(diào)用后立即返回。只有該類進程返回后,仿真系統(tǒng)的時間才有可能前進,因此該類進程不能被掛起(類似于Verilog中的always)。線程進程不是RTL級進程,它可以被掛起和重新激活,所以它的一個重要用途是用來描述驗證平臺(testbench) [3]。
2 Turbo編碼器的SystemC實現(xiàn)與仿真
2.1 Turbo編碼器簡述
Turbo碼編碼器[4-5]是由兩個反饋的系統(tǒng)卷積碼編碼器通過一個隨機交織器并行連接而成,編碼后的校驗位經(jīng)過刪余陣,從而產(chǎn)生不同碼率的碼字。由于Turbo碼能得到較大的編碼增益,因此許多低信噪比通信系統(tǒng)中都選擇了Turbo作為信道編碼。
本文中實現(xiàn)的Turbo碼為3GPP中專用信道使用的編碼格式,碼率為1/3,其生成矩陣如下所示:
G(D)=1,1+D+D31+D2+D3
對于碼率為1/3的Turbo碼,不存在刪余部分。其編碼器結(jié)構(gòu)圖如圖1所示。
圖1 3GPP八狀態(tài)Turbo碼編碼器結(jié)構(gòu)
2.2 Turbo編碼器的SystemC實現(xiàn)
首先對系統(tǒng)可以進行模塊劃分,整個編碼器是一個大模塊,其中包含一個交織子模塊,兩個結(jié)構(gòu)完全相同的分量碼編碼子模塊RSC,以及一個事件進程來完成最后編碼的輸出,它們之間采用同步時鐘進行時序同步。為了簡化起見,這里交織器就只采用隨機交織方式完成。
為完成整個Turbo碼編碼系統(tǒng)的驗證和仿真,還必須有激勵模塊和顯示輸出模塊,以達到驗證和觀察系統(tǒng)實現(xiàn)的正確性。整個系統(tǒng)的SystemC實現(xiàn)及測試方法模塊說明如圖2所示。
圖2 SystemC系統(tǒng)實現(xiàn)測試模塊說明圖
其中主模塊內(nèi)部系統(tǒng)信號流圖如圖3所示。通過圖3可以清楚地看到各個子模塊和事件進程的輸入輸出信號關(guān)系,以達到更加清晰的實現(xiàn)目的。
圖3 TurboEncMain模塊系統(tǒng)信號流圖
為了完成對Turbo碼實現(xiàn)的系統(tǒng)驗證以及最接近硬件邏輯的RTL級驗證,必須在使用SystemC時注意要編寫完全可綜合風(fēng)格的代碼,所以代碼的實現(xiàn)必須嚴格按圖1的編碼結(jié)構(gòu)來進行。其中核心的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驗證仿真
為了對設(shè)計進行驗證,Stimulus模塊完成Testbench的輸入和仿真過程的控制功能,Display模塊完成打印和輸出Trace及l(fā)og(VCD文件)的功能。為了簡便起見,設(shè)計的輸入幀長為100 b,其Testbench的設(shè)計及理論輸出如下:
輸入Input序列為:0xACBC,0xD211,0x4CAE,0x1577,0xC6DB, 0xF4C9,0x0;
交織后輸入的Input_de序列為:0xBD85,0x078C,0x1D2A,0xBB80,0xEEEE,0xF973,0xA;
理論上此結(jié)構(gòu)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。
本設(shè)計Testbench的輸出VCD波形用Wave VCD Viewer顯示,如圖4所示。實際上使用了多組Testbench對設(shè)計進行驗證,最終的輸出均表明本設(shè)計符合理論要求。
圖4 設(shè)計仿真輸出波形
3 FPGA實現(xiàn)與驗證
3.1 FPGA系統(tǒng)實現(xiàn)
經(jīng)過上面的仿真設(shè)計,驗證了RTL模型的結(jié)構(gòu),就可以進行后面的ASIC設(shè)計或FPGA硬件驗證。在一般的IC設(shè)計流程中,為了提高ASIC流片的成功率,有必要使用FPGA硬件電路進行邏輯仿真。
在FPGA實現(xiàn)中,設(shè)計的Turbo編碼器是整個物理信道數(shù)據(jù)編碼上行鏈路的一個部分[6],支持3G標準中最高5 114 b的輸入序列幀長,實現(xiàn)對3G專用信道的1/3冗余編碼,它將與Turbo解碼器和信道模擬模塊組成一個測試環(huán)路,完成對整個Turbo Codec的IP驗證。編碼器由4個主要部分組成,其框圖如圖5所示。
圖5 硬件邏輯實現(xiàn)Turbo編碼器框圖
各個部分的功能描述如下:
(1) 編碼器輸入緩存模塊(enc_ibuf),實現(xiàn)兩路輸入存放緩存以及乒乓緩存機制,內(nèi)部框圖如圖6所示。
圖6 輸入緩存模塊框圖
(2) 編碼器移位RSC模塊(enc_shft),即上面SystemC實現(xiàn)的模塊,完成移位輸出編碼后結(jié)果的功能。
(3) 編碼器輸出緩存模塊(enc_obuf),存放輸出數(shù)據(jù)和歸零位比特,并完成3 b并串轉(zhuǎn)換輸出,內(nèi)部框圖如圖7所示。
圖7 輸出緩存模塊框圖
(4) 編碼器控制模塊(enc_ctrl),完成整個編碼器內(nèi)部模塊時序的控制,如輸入/輸出模塊的尋址讀寫、移位、尾比特歸零等等操作,其主要時序控制流程圖如圖8所示。
圖8 編碼器控制模塊控制時序流程圖
3.2 FPGA邏輯驗證
選用Xilinx的Virtex-E系列[7,8]的FPGA XCV600E對本設(shè)計進行驗證。軟件平臺主要使用的是Xilinx集成開發(fā)環(huán)境ISE Foundation。其中第三方工具使用了綜合工具FPGA CompilerⅡ,布局布線工具選用的是ISE中的Webpack suite。
使用支持SystemC的綜合工具SCC(SystemC Compiler)完成綜合。SCC將SystemC描述的RTL級電路通過其綜合生成相應(yīng)的Verilog文件,實現(xiàn)后續(xù)流程與傳統(tǒng)設(shè)計語言設(shè)計的FPGA流程的無縫銜接。
在ISE平臺調(diào)用FCII對綜合生成的Verilog文件與其他模塊的Verilog代碼約束時鐘、引腳信息等,進行邏輯綜合和優(yōu)化,得到EDIF格式網(wǎng)表并經(jīng)Webpack完成布局布線取得sdf文件和.bit二進制配置文件。最后將.bit文件下載至開發(fā)板上的XCV600E器件中,上電加載后板子跑起來可以得到邏輯輸出。
從對XCV600E中消耗的邏輯資源分析可以看到,編碼器所占的等效門為21 578個門。調(diào)試后將shft_s1_dat,shft_p1_dat,shft_p2_dat等信號從XCV600E的管腳引出,經(jīng)邏輯分析儀采集這些管腳的輸出數(shù)據(jù)與Testbench理論輸出進行對比分析,最后得出結(jié)論,本設(shè)計編碼器的輸出完全符合設(shè)計要求。
4 結(jié) 語
在越來越復(fù)雜的大規(guī)模集成電路設(shè)計中,如何保證設(shè)計的成功性和時效性,引起了越來越多的設(shè)計人員的重視,SystemC的提出并引起廣泛關(guān)注的原因也就顯而易見?,F(xiàn)以Turbo碼的編碼系統(tǒng)為例研究了SystemC在實際系統(tǒng)仿真和驗證中的應(yīng)用,以及基于RTL級實現(xiàn)并能完成綜合的SystemC設(shè)計方法,這個系統(tǒng)只是整個編解碼系統(tǒng)的一部分,其解碼部分更加復(fù)雜,但其核心算法部分同樣可以用相同的方法完成其仿真、驗證和實現(xiàn)。在整個設(shè)計過程中,測試平臺一直沒有改變,從而保證了驗證工作的連貫性和高效率。
可以看出,SystemC強大的系統(tǒng)級設(shè)計能力以及同時具有RTL級和行為級設(shè)計的能力為未來復(fù)雜的IC設(shè)計提供了更為廣闊的空間。雖然如何采用SystemC進行設(shè)計,目前還沒有一個完全的設(shè)計規(guī)范流程,但是相信隨著進一步的深入研究,基于SystemC的設(shè)計方法必將成為IC設(shè)計領(lǐng)域的最佳主流標準之一。
參考文獻
[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]王新梅,肖國鎮(zhèn).糾錯碼——原理與方法(修訂版)[M].西安:西安電子科技大學(xué)出版社,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設(shè)計[M].北京:電子工業(yè)出版社,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系統(tǒng)高級工程師。主要研究方向為系統(tǒng)設(shè)計與實現(xiàn),多媒體與信源信道編解碼處理。