楊振學 王歡
摘要:采用高層次綜合技術實現(xiàn)RS譯碼電路,通過對RS譯碼C代碼結構不同層次的優(yōu)化,包括循環(huán)展開、求余簡化、數(shù)據(jù)存儲優(yōu)化及算法結構優(yōu)化等,探索了不同的結構對于綜合后硬件電路性能和資源的影響。與傳統(tǒng)RTL設計相比,使用高層次綜合技術進行RTL設計大大節(jié)省了設計時間,減少了硬件的設計難度,降低了整體電路的設計風險。
關鍵詞:RS譯碼;RTL設計;高層次綜合;結構優(yōu)化
中圖分類號: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引言
近年來,隨著通信電路應用的高速發(fā)展,通信系統(tǒng)對電路設計周期的要求越來越高。而通信系統(tǒng)中,通信IP的設計是關鍵。在通信IP的RTL設計時,使用傳統(tǒng)方法設計的工程迭代周期長、代碼復用困難,這些弊端逐漸成為影響設計的重要因素。高層次綜合技術就在此時應運而生,可以實現(xiàn)直接從算法級的高級語言到RTL級的HDL語言的轉換,從而有效地縮短通信系統(tǒng)FPGA驗證或IC設計的研發(fā)周期[1]。
高層次綜合技術在實現(xiàn)時首先要完成算法設計,依據(jù)工程要求設計好約束,使用高級綜合工具就可以完成由C語言到RTL代碼的自動轉換。使用高層次綜合技術進行硬件設計減少了傳統(tǒng)手工編碼可能會引入的設計誤差,更重要的是在實現(xiàn)速度上要快很多,從而縮短通信系統(tǒng)整體的設計周期。綜合工具并不會對硬件實現(xiàn)的具體細節(jié)進行約束,它探索不同的實現(xiàn)方案,并快速計算出不同微架構對硬件實現(xiàn)結果的影響,這樣可以實現(xiàn)在較短時間內對即將實現(xiàn)的硬件方案在性能、面積和功耗三者之間折中[2-4]。
1 RS譯碼原理
RS碼是一種性能優(yōu)良的線性分組碼,不僅可以糾正隨機錯誤,還可以糾正突發(fā)錯誤,特別是在中短碼長的情況下,其性能幾乎接近理論值。RS碼的編碼效率很高,適合實時性要求較高的信息傳輸場合,故在數(shù)字通信系統(tǒng)中使用廣泛,可以作為提高數(shù)據(jù)傳輸和數(shù)據(jù)存儲可靠性的重要手段[5]。隨著SoC技術的不斷發(fā)展,市場競爭愈發(fā)激烈,如何在更短的時間內設計出更符合要求的產品成為研究重點。
在不同的系統(tǒng)中,對于RS碼的參數(shù)要求可能不同,這使得RS編譯碼器,尤其是設計較為復雜的譯碼器的復用比較困難[6]。但是在使用C、C++等高級語言進行的算法級設計中修改參數(shù)會非常簡便,利用高層次綜合技術可以快速高效地實現(xiàn)RS譯碼器的硬件設計。在本設計中使用C語言完成算法設計,然后使用Synopsis公司的高層次綜合工具SCC進行綜合,最后實現(xiàn)硬件電路的設計。
2 RS譯碼電路實現(xiàn)
使用高層次綜合技術進行RTL設計的流程圖如圖1所示。
從圖1可以看出,原來傳統(tǒng)流程中的微架構設計、RTL代碼編寫以及時序優(yōu)化等幾個過程都被高級綜合技術取代了。使用高級綜合技術進行設計的優(yōu)點是C代碼程序可以被高級綜合工具自動分析,避免了系統(tǒng)工程師、邏輯工程師和驗證工程師因為溝通上的偏差而產生設計上的不足,并且可以縮短設計周期。
2.1 RS譯碼的C代碼優(yōu)化
高層次綜合工具可以自動分析C代碼結構,并根據(jù)分析結果調用不同的硬件資源。本設計中使用SCC高級綜合工具。雖然綜合工具有很強的優(yōu)化能力,但是優(yōu)化結果還是依賴于設計者對于代碼的合理結構設計和良好的代碼風格。良好的代碼架構設計會使綜合工具達到最優(yōu)的綜合輸出,而不好的代碼架構設計會使綜合工具產生錯誤的綜合輸出[7]。
軟件工程師在進行算法設計時并不會對硬件結構進行考慮,例如數(shù)據(jù)的并行操作及流水線操作等,這樣的算法結構直接進行綜合可能不會得到性能最優(yōu)的硬件電路,所以在進行綜合之前需要先對C代碼結構進行優(yōu)化。
2.1.1循環(huán)展開
RS譯碼算法中存在大量的循環(huán)操作,C程序是依次執(zhí)行,屬于順序結構。而RTL語言程序是可以在同一時間執(zhí)行,屬于并行結構。在綜合時,為了提高數(shù)據(jù)的處理速度,可以選擇將能同時處理的計算進行并行操作。循環(huán)展開的聲明設置為“#pragma unroll”。具體來說,循環(huán)展開允許在當前迭代結束之前開始新的迭代計算。使用一個小代碼進行具體說明,如圖2所示,圖2(a)是對C代碼進行的具體約束,而圖2(b)則是對約束后的代碼結構進行的圖示說明。
但并不是所有的循環(huán)都適合添加循環(huán)展開約束,例如數(shù)據(jù)操作之間有依賴關系的,只能按照順序執(zhí)行,不能進行循環(huán)展開操作。
2.1.2流水線設計
在SCC綜合工具中定義了task ii,即在映射成硬件時,函數(shù)連續(xù)調用的最短時間間隔。在對RS譯碼硬件結構增加流水線設計時,需要使用此命令進行約束。在本次的RS譯碼設計中碼長為179,故將task ii約束為179。
在綜合時進行多任務流水線處理時,需要對配置寄存器和存儲器數(shù)組復制多個以備同時使用,否則多任務平臺對同一個寄存器或者存儲器進行操作時不能做到任務流水線化。一般可以在C代碼中,對需要同時被多個任務使用的數(shù)組進行“#pragma multi_buffer”命令來指定映射成多個存儲器。
2.2 C代碼優(yōu)化
2.2.1算法改進
在對V1版本的硬件電路進行分析時,發(fā)現(xiàn)在C代碼中使用了大量的乘除法以及求余運算操作,進行硬件映射時會占用較大的資源,考慮到可以使用加減法代替以減少大量乘法器和除法器的使用。例如,計算伴隨式s[i]的過程中,使用的是迭代循環(huán)計算,由于s[i]的計算方式的關系,會大量使用乘法器以及除法器,在進行并行操作過程中會造成大量資源的浪費,代碼實現(xiàn)的方式如圖3(a)所示。
在進行綜合時添加約束時需要對進行循環(huán)展開,生成的Verilog代碼結果是同時對s[1],s[2],……,s[16]一共16個元素展開并行計算。改進方法是使用加法代替乘法運算,這樣就可以消除占用很多資源的乘法器,而且加法器的實現(xiàn)要比乘法器容易,實現(xiàn)方案如圖3(b)所示。
2.2.2優(yōu)化數(shù)據(jù)存儲
在使用高級綜合工具SCC實現(xiàn)C代碼到RTL代碼自動轉換過程中,對于二維數(shù)組映射成硬件時,會將所有數(shù)據(jù)存儲,并設置相應的輸出端口,不會將其按行進行拆解存儲。這對于數(shù)據(jù)較多的數(shù)組來說,會使用占用空間較大的寄存器,從而占用較多的硬件資源。為了達到一個在資源上更優(yōu)化的結果,如果將多維數(shù)組分割設計成多個子數(shù)組,就可以將每個數(shù)組的端口數(shù)減少,這樣的設計可以在綜合存儲器結構時因減少端口降低硬件資源消耗。
在V1版本的C代碼基礎上對以上2個方面進行改進,形成V2版本進行綜合,也可以得到在性能上滿足要求的RTL代碼。
2.3結構優(yōu)化
在V2版本的基礎上,為了尋求更少的資源調用及更優(yōu)化的結構,借用硬件設計思維對RS譯碼的C代碼進行重新改寫。SCC軟件在進行高級綜合時,對C代碼結構要求比較嚴格,不同的C代碼結構會產生不同的綜合結果。在本設計中采用外置RAM塊結構,進行數(shù)據(jù)存儲。
以(179,163)的RS譯碼為例,具體實現(xiàn)流程如圖4所示。以接收到某一次的譯碼數(shù)組為例,由于RS碼組的碼長為179,故在第一個碼長周期時將數(shù)據(jù)存放在第1個RAM中;在第2個碼長周期中(=1~179),將第1組碼取出并計算其伴隨式Si,同時將接收到的第2組RS碼存放到第2塊RAM中;在第3個碼長周期中,第1組RS碼根據(jù)在上一個周期計算出的伴隨式來計算錯誤位置多項式da,而第2組RS碼可以計算其伴隨式Si,同時將接收到的第3組RS碼存放在第3塊RAM中;在第4個碼長周期中,第1組RS碼可以計算出錯誤位置以及錯誤值,然后在經(jīng)過糾錯后直接輸出,而第2組碼進行錯誤位置多項式的計算,第3組碼進行伴隨式的計算,同時將接收到的第4組碼存放在第4塊RAM中;由于第1組RS碼已成功譯碼,所以當接收到第5組RS碼時可以存放在第1塊RAM中,再重復以上步驟,則圖4中數(shù)據(jù)組接收順序為(-3)(-2)(-1)(1)(2)(3)(4)。
2.4優(yōu)化結果對比
對3種不同層次的優(yōu)化結構在軟件Synphony C Compiler下分別進行綜合。頻率約束都設置為200 MHz。SCC的綜合過程可以分為2個互補的部分:build和仿真驗證。在RS的build階段,會將C代碼通過一些中間轉換(Preprocess、Schedule、Synthesize)最后生成RTL代碼,而每一個中間轉換過程都會有相應的仿真,這是為了驗證每一個中間轉換過程的正確性。任何一個中間階段的失敗都需要返回修改或者調整C代碼[8]。SCC綜合完成之后,除生成了可用的RS的RTL代碼之外,還有一些資源使用情況評估報告,代碼性能評估情況報告,以及供一些下游工具(仿真工具和綜合工具)使用的腳本。通過這些報告以及SCC工具提供的各種架構分析可以及時了解RTL代碼的性能,通過預先指定的工藝庫可以進行ASIC下的資源使用評估。
對比3個版本的綜合結果,首先都實現(xiàn)了硬件功能需求,能夠完成RS譯碼功能,能糾正最多8個錯誤數(shù)據(jù)。通過對V1版本中運算單元以及數(shù)據(jù)存儲方式優(yōu)化后得到的V2版本,根據(jù)SCC工具給出的評估報告可以知道,資源的調用上減少到原來的1/3。而V3版本的C代碼結構借用了硬件設計的思路,將每個模塊之間的具有依賴關系的數(shù)據(jù)采用外置RAM數(shù)據(jù)存儲,取代原先寄存器存儲的方式,不僅在硬件結構上進行了優(yōu)化,資源的使用也進一步減少。SCC工具綜合后在report_summary.txt文檔給出了使用TSMC65gp工藝時3個版本資源的使用預估情況,如表1所示。
3結束語
通過對3種版本的優(yōu)化方式進行比較,發(fā)現(xiàn)在進行高層次綜合時,對C代碼的優(yōu)化過程是必不可少的,而C代碼結構越優(yōu)化,生成的硬件電路也就越理想。經(jīng)過循環(huán)展開、求余簡化、數(shù)據(jù)存儲優(yōu)化以及結構修改,探索了不同層次的C代碼優(yōu)化對生成硬件電路的性能和資源的影響。結果表明,在算法性能滿足要求的情況下,利用高層次綜合技術可以極大地降低設計復雜度,充分探索不同設計結構和約束對設計結果的影響,快速選擇出一種較優(yōu)的設計方案。
由于高級綜合技術發(fā)展時間較短,還有一些地方不是特別的完善。在綜合過程中,需要根據(jù)硬件的需求來對C代碼結構描述進行優(yōu)化,以得到較優(yōu)的硬件電路。但是使用高層次綜合技術生成Verilog代碼的方式與傳統(tǒng)的編寫方式相比,在功能滿足需求的情況下,不僅使設計周期縮短,還可以提前對設計風險進行評估,根據(jù)通信系統(tǒng)目標需求提早對代碼進行修改,降低設計后期出現(xiàn)問題的概率。
參考文獻
[1]游余新.利用Mentor高層次綜合技術(Catapult Synthesis)快速實現(xiàn)復雜DSP算法[J].中國集成電路,2007(5):35-41.
[2]孟祥剛,陳瑤,高騰,等.FFT算法硬件模塊的高層次綜合實現(xiàn)與優(yōu)化[J].微電子學,2017,47(2):217-221.
[3]張望,賈佳,孟淵,等.基于高層次綜合的AES算法研究與設計[J].計算機應用,2017,37(5):1341-1346.
[4]李東海,楊小軍,楊云,等.多項式數(shù)據(jù)通路的高層次綜合方法[J].北京郵電大學學報,2017,40(1):130-136.
[5]胡玉樂.RS譯碼加速器的實現(xiàn)[D].北京:北京郵電大學, 2011.
[6]胡智寬.基于RS編譯碼的數(shù)字通信電路FPGA設計研究[D].北京:北京理工大學,2015.
[7]李璐.基于C/C++的高層次綜合應用研究[D].南京:東南大學,2009.
[8]王歡,李斌,張磊.基于高級綜合技術的RS算法實現(xiàn)[J].中國集成電路,2016,25(11):46-49.