裴 佩 盧立丹
(中國船舶重工集團公司第722研究所 武漢 430079)
隨著集成電路設計的發(fā)展,SoC時代已經(jīng)到來。為了滿足SoC設計的要求,一種能夠同時實現(xiàn)較高層次的軟件和硬件描述的系統(tǒng)級設計語言,可以大大提高設計效率。SystemC正是這樣一種適于系統(tǒng)級設計的硬件描述語言。它支持門級、RTL級、系統(tǒng)級等各個抽象層次上的硬件的建模和仿真,而且支持軟硬件協(xié)同設計,能夠描述由硬件和軟件組成的復雜系統(tǒng)結構,支持在C++環(huán)境下對硬件、軟件和接口的描述[1]。
自1999年提出后,SystemC在 Synopsys、ARM 、Mentor Graphics、Coware 、Cadence 、Intel等微電子業(yè)內(nèi)主流公司的支持下得到了很大的發(fā)展,由于其開放性等特點,已經(jīng)得到全世界工程師的歡迎和認可,并已經(jīng)于2005年成為IEEE標準。
SystemC是完全免費并且開放的,它的源代碼可以使用任何標準C++編譯環(huán)境進行編譯,生成可執(zhí)行文件。SystemC本質(zhì)上時在C++的基礎上添加的硬件擴展庫和仿真核,通過使用SystemC類庫,設計者可以根據(jù)不同的需求編寫目標系統(tǒng)的系統(tǒng)級(system level)、行為級(behavioral level)或RT L級的SystemC模型代碼。
SystemC具有所有硬件描述語言所共有的基本特征,包括模塊、端口、進程和信號等。SystemC中的模塊用關鍵字SC MODULE來定義,其端口定義與Verilog類似。在SystemC中,進程是一個基本的執(zhí)行單元,它被調(diào)用來仿真目標系統(tǒng)的行為。進程的行為是多樣化的,可以實現(xiàn)某個函數(shù)的功能,也可以在運行過程中被掛起,并且進程是并行執(zhí)行的,一個進程中不能包含或直接調(diào)用其他進程。SystemC的進程主要有兩種,事件進程(SC_MET HOD)和線程進程(SC T HREAD)。事件進程是惟一可以綜合的RTL進程,它的特點是當敏感表上有事件發(fā)生時,它就被調(diào)用,調(diào)用后立即返回。只有該類進程返回后,仿真系統(tǒng)的時間才有可能前進,因此該類進程不能被掛起(類似于Verilog中的always)。線程進程不是RTL級進程,它可以被掛起和重新激活,所以它的一個重要用途是用來描述驗證平臺(testbench)。
圖1 SystemC描述加法器的簡單實例
SystemC描述加法器的一個簡單例子如圖1所示,該例是一個簡單的加法器的描述。在 my_adder.h中定義了一個名為my_adder的模塊,輸入端口為int類型的a、b和時鐘類型的clk,輸出信號為int類型的c。此外,模塊里面定義了一個類型為SC_METHOD的進程,其對時鐘的上升沿敏感。每當時鐘上升沿到來時,該進程被激活,完成將兩輸入端口上的數(shù)據(jù)相加再從輸出端口送出的功能。進程entry的實現(xiàn)在adder.cpp中。
SystemC語言必須可以綜合才能投入實用,目前許多支持SystemC綜合的軟件已經(jīng)投入商用。Agility Compiler軟件就是比較好的一種,它是由Agility公司和Celoxica ESL business所共同開發(fā)的。Agility Compiler可以將SystemC語言綜合成適合指定目標芯片的Verilog、VHDL、EDIF等文件,進而進行下一步的設計,實現(xiàn)了與傳統(tǒng)硬件描述語言的無縫銜接[2]。
本設計就是利用SystemC語言設計pn序列發(fā)生器,具體實現(xiàn)一個m序列發(fā)生器的功能,然后在Agility Compiler中進行綜合生成Verilog語言,再利用ModelSim等軟件仿真。
一個偽隨機(或PN)序列是一個1和0的碼序列,由于它具有類似白噪聲的隨機特性但是又能重復產(chǎn)生,所以稱為偽隨機序列,并且可以代替白噪聲用于需要隨機信號的場合,例如測試系統(tǒng)性能。更重要的是,它具有良好的相關特性,可以用于碼分復用、多址接入、測距、密碼、擴頻通信和分離多徑信號等許多領域[3]。
通常情況下,擴頻序列具有如下性質(zhì):
1)具有尖銳的自相關性;
2)有盡可能小的互相關性,互相關性最好為零;
3)有盡可能大的序列復雜度,即足夠長的碼周期保證保密和抗干擾要求;
4)有足夠多的獨立地址數(shù),以實現(xiàn)碼分多址的要求;
5)工程上易于產(chǎn)生、加工復制和控制。
偽隨機序列不止一種,其中以m序列最為重要,因此設計中,將對m序列發(fā)生器進行設計。一個m序列的長度為L=2m-1比特,周期為L,并由一個m級的帶有線性反饋的移位寄存器產(chǎn)生,每個周期內(nèi)有2m-1個 1和 2m-1-1個0[4]。
設計中,將設計通信中常用的12級,周期為4095的m序列發(fā)生器。
一般要產(chǎn)生一個m序列主要有以下幾個步驟[5]:
1)根據(jù)m序列產(chǎn)生原理得到m序列的生成多項式;
2)根據(jù)生成多項式的級數(shù)確定要實現(xiàn)的m序列產(chǎn)生器所需要的移位寄存器的長度;
3)實現(xiàn)移位寄存器鏈;
4)按照生成多項式對移位寄存器鏈抽頭;
5)將抽頭信號進行“異或”,結果反饋到移位寄存器的輸入端。
本次設計中采用的生成多項式為:f(x)=x12+x6+x4+x+1。
3.2.1 m序列的systemc主要程序設計
/************************
模塊功能:該模塊是周期為4095(12級)的m序列發(fā)生器,采用線性反饋移位寄存器實現(xiàn)。
…
************************/
#define bit_size 12
#include"systemc.h"
SC_MODULE(m_gen){
sc_in<bool> clk,rst;
…
void prc_m_gen();
SC_CTOR(m_gen){
SC_M ETHOD(prc_m_gen);
sensitive_pos<<clk;
}
};
void m_gen::prc_m_gen(){
…
if(!rst.read()){
shift_reg=4095;//設定寄存器的初始狀態(tài),不能為0
m_out=0;
}
else if((ena==1)&&(rst==1)){
shift_temp=shift_reg;
shift_reg.range(bit_size-1,1)=shift_temp.range(10,0);
shift_reg[0]=shift_temp[0]?shift_temp[3]?shift_temp[5]?shift_temp[11];
}
m_out=shift_reg[bit_size-1];//最高位輸出}
3.2.2 m序列程序綜合
在Agility Compiler軟件“工程設置”中,設置綜合的目標芯片為 Altera Stratix II系列的ep2s130f1020c4。
Agility Compiler綜合出的信息見圖2所示。由圖可見,優(yōu)化綜合后共用到14個觸發(fā)器,3277個與非門,0bit寄存器。
圖2 m序列發(fā)生器綜合信息圖
為了驗證結果的準確性,利用ModelSim軟件和Quartus II軟件對綜合出的Verilog HDL程序進行仿真,得到仿真結果如圖3所示。
圖3 m序列發(fā)生器的ModelSim仿真結果
利用Quartus仿真綜合出的Verilog代碼后的部分仿真結果如圖4所示,綜合出的資源等信息如圖5所示,RTL部分圖如圖6所示。
圖4 m序列發(fā)生器的Quartus仿真結果
3.2.3 m序列仿真結果分析
為了分析結果的正確性,將考察從三個時間處的連續(xù)32比特m_out信號序列。結果見表1。經(jīng)統(tǒng)計,一個周期內(nèi)有2048個1,2047個0。
表1 m序列輸出統(tǒng)計
由此可見,生成的周期為4095的該m序列符合設計要求。
從這個實例可以看出,利用SystemC完成設計相比于傳統(tǒng)的硬件描述語言具有很多優(yōu)點:
1)SystemC語言更加靈活,因為其本質(zhì)上是C++語言,所以設計更加靈活。
2)SystemC語言的設計效率更高。
3)SystemC語言對于具有C語言基礎卻熟悉Verilog語言的技術人員更有優(yōu)勢。
4)SystemC語言能夠?qū)崿F(xiàn)實現(xiàn)較高層次如系統(tǒng)級的軟件和硬件描述,較好地實現(xiàn)軟硬件的協(xié)同設計,而且它使得系統(tǒng)級設計和RTL級設計均可以在同一平臺下完成。
SystemC已經(jīng)成為IEEE標準,這將促進SystemC更快的發(fā)展。相信不久的將來,其一定會成為業(yè)內(nèi)主流的設計工具。
[1][美]巴斯克.SystemC入門[M].夏宇聞,等譯.北京:北京航空航天大學出版社,2008
[2]Agility公司.agility_manual
[3]西瑞克斯(北京)通信設備有限公司.無線通信的Matlab和FPGA實現(xiàn)[M].北京:人民郵電出版社,2009,6
[4]樊昌信.通信原理教程[M].北京:電子工業(yè)出版社,2005,7
[5][美]John G.Proakis,等.現(xiàn)代通信系統(tǒng)(MATLAB版)[M].第二版.北京:電子工業(yè)出版社,2008,1