文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.189018
中文引用格式: 苑佳紅. Stratus HLS工具在高性能雙精度浮點(diǎn)乘法設(shè)計(jì)中的應(yīng)用流程[J].電子技術(shù)應(yīng)用,2018,,44(8):20-23,,30.
英文引用格式: Yuan Jiahong. The application flow of Stratus HLS tool in high performance double precision floating point multiplication design[J]. Application of Electronic Technique,2018,,44(8):20-23,,30.
0 引言
數(shù)字多媒體的廣泛應(yīng)用,、互聯(lián)網(wǎng)的高速發(fā)展,、人工智能等新興領(lǐng)域的蓬勃興起,對通用處理器的計(jì)算能力要求越來越高,。采用更加復(fù)雜的算法設(shè)計(jì),、探索效率更高的架構(gòu)有助于提升通用處理器的性能。然而在傳統(tǒng)的寄存器傳輸級(Register Transfer level,,RTL)設(shè)計(jì)流程中,,設(shè)計(jì)人員完成運(yùn)算功能設(shè)計(jì)時(shí)需消耗大量時(shí)間在狀態(tài)機(jī)設(shè)計(jì)、流水棧劃分和調(diào)整,、端口協(xié)議,、存儲(chǔ)設(shè)計(jì)等復(fù)雜、難以驗(yàn)證和優(yōu)化的部分,。而且由于RTL抽象層次較低,,需要大量的時(shí)間和資源驗(yàn)證RTL的功能,最后導(dǎo)致較長的設(shè)計(jì)周期,。Stratus高階綜合工具(High-level Synthesis,,HLS)基于高階綜合設(shè)計(jì)方法學(xué),,將設(shè)計(jì)層次抽象到算法級,將設(shè)計(jì)的低值且復(fù)雜的領(lǐng)域交給工具自動(dòng)完成,,設(shè)計(jì)人員能夠?qū)⒏嗟臅r(shí)間應(yīng)用在算法設(shè)計(jì),、優(yōu)化、架構(gòu)探索等高價(jià)值領(lǐng)域,,提高設(shè)計(jì)效率,,專注產(chǎn)品質(zhì)量的提升。本文基于Cadence公司的高階綜合工具Stratus設(shè)計(jì)和實(shí)現(xiàn)高頻低功耗的雙精度浮點(diǎn)乘法模塊,,并在此過程中探討高階綜合完成產(chǎn)品前端設(shè)計(jì),、驗(yàn)證、優(yōu)化,、性能評估的方法和流程,。
1 HLS應(yīng)用流程
Stratus HLS將設(shè)計(jì)抽象到算法級,對算法做硬件微架構(gòu)實(shí)現(xiàn)的構(gòu)想后,,使用高級語言SystemC/C/C++描述設(shè)計(jì),,并在高級語言層對設(shè)計(jì)做充分的非時(shí)序功能驗(yàn)證,如圖1中設(shè)計(jì)階段1所示,。在設(shè)計(jì)階段2,,首先需根據(jù)設(shè)計(jì)目標(biāo)設(shè)置高階綜合的約束文件及工藝庫。然后將設(shè)計(jì)階段1完成的SystemC代碼和約束文件灌入Stratus HLS工具,,由工具完成狀態(tài)機(jī),、寄存器插入、流水線級數(shù)設(shè)置等控制電路,,生成符合時(shí)序,、面積、性能要求的RTL代碼,。最后對RTL代碼做PPA檢查,,選擇使用邏輯綜合工具再一次對HLS生成的RTL代碼做性能評估,如果符合要求,,則開始做RTL的完整功能驗(yàn)證。如果PPA檢查不能達(dá)到目標(biāo)要求,,則需要對關(guān)鍵路徑進(jìn)行分析,、優(yōu)化,此時(shí)可以充分利用HLS工具自帶的優(yōu)化功能加速優(yōu)化設(shè)計(jì)迭代的完成過程,。功能驗(yàn)證正確后,,則可以進(jìn)入設(shè)計(jì)階段3,邏輯綜合后,,設(shè)計(jì)交由后端做邏輯實(shí)現(xiàn),。
2 Fmul64 SystemC設(shè)計(jì)
雙精度浮點(diǎn)乘法運(yùn)算部件是通用CPU內(nèi)最基本運(yùn)算部件之一,,其應(yīng)用要求高階綜合獲得RTL設(shè)計(jì)滿足2.5 GHz的高頻率,三站流水,,并且其面積和功耗較小,。此部分將介紹Fmul64的主要結(jié)構(gòu)和SystemC設(shè)計(jì)方法。
2.1 Fmul64_hls總體結(jié)構(gòu)
Fmul64的SC設(shè)計(jì)總體框圖如圖2所示,,sc_main()是SystemC設(shè)計(jì)的top文件,,連接測試環(huán)境Testbench和待測設(shè)計(jì)DUT。DUT即Fmul64,,用SystemC語言中的SC_MODULE類實(shí)現(xiàn),,作為此次設(shè)計(jì)的頂層模塊,同時(shí)在此模塊內(nèi)定義模塊的端口,、時(shí)鐘信號(hào),、復(fù)位信號(hào)、輸入端口,、輸出端口等,,作為設(shè)計(jì)的頭文件,并包含在其他文件內(nèi)使用,。SystemC語言提供兩個(gè)方法用于設(shè)計(jì)功能的描述:SC_METHOD和SC_CTHREAD,。其中SC_METHOD用于組合邏輯電路實(shí)現(xiàn),內(nèi)部不能包括wait()語句,,而要實(shí)現(xiàn)的Fmul64是流水線設(shè)計(jì),,所以使用SC_CTHREAD用于乘法運(yùn)算功能的實(shí)現(xiàn),函數(shù)命名為run,。
2.2 SC_CTHREAD方法實(shí)現(xiàn)
SC_CTHREAD進(jìn)程實(shí)現(xiàn)如圖3所示,,首先設(shè)置需要復(fù)位的信號(hào)和復(fù)位值,然后是定義無限循環(huán)語句,,并在內(nèi)部調(diào)用輸入輸出信號(hào)的讀寫函數(shù)和含3階波茲編碼的乘法運(yùn)算函數(shù)do_booth3_multply,。這里用HLS命令HLS_PIPELINE_LOOP設(shè)置設(shè)計(jì)類型,即吞吐率參數(shù)PIPELINE_Ⅱ設(shè)為1,,即將Fmul64_hls設(shè)置為流水線型設(shè)計(jì),,并用HLS_CONSTRAINT_LATENCY設(shè)定流水線拍數(shù)LATENCY為3。Stratus HLS允許將吞吐率和延遲使用宏定義的形式,,便于架構(gòu)探索時(shí)更改參數(shù),。
2.3 Fmul64行為級實(shí)現(xiàn)
雙精度浮點(diǎn)乘法運(yùn)算過程如圖4所示。首先對輸入乘法操作數(shù)做數(shù)據(jù)的預(yù)處理,,然后做尾數(shù)相乘的乘法運(yùn)算,,在這里,本文做了架構(gòu)探索,,一種架構(gòu)是使用3階波茲編碼算法實(shí)現(xiàn)雙精度浮點(diǎn)尾數(shù)乘法運(yùn)算,;另一種是使用乘號(hào)“*”直接完成浮點(diǎn)尾數(shù)相乘運(yùn)算,,讓工具來完成乘法運(yùn)算的具體實(shí)現(xiàn)。兩種架構(gòu)的驗(yàn)證環(huán)境,、優(yōu)化流程是相同的,,所以后續(xù)設(shè)計(jì)將以Fmul64波茲編碼設(shè)計(jì)為例進(jìn)行介紹,最后會(huì)介紹兩者邏輯綜合結(jié)果,。設(shè)計(jì)中使用到的高階綜合指導(dǎo)語句(主要是HLS_DPOPT_REGION)如圖5所示,。
至此,SC代碼設(shè)計(jì)已完成,,并且按照設(shè)計(jì)目標(biāo)的要求使用高階綜合指導(dǎo)語句設(shè)置了流水線和時(shí)序要求,,可以開始后續(xù)的驗(yàn)證和高階綜合處理。雖然設(shè)計(jì)是使用高級語言SystemC描述,,但是其微架構(gòu)仍然是符合硬件設(shè)計(jì)和實(shí)現(xiàn)規(guī)則的,,所以需要注意保持良好的SystemC代碼風(fēng)格非常重要。
3 功能驗(yàn)證
Stratus HLS工具提供統(tǒng)一的驗(yàn)證平臺(tái),,所以在SC級的測試用例可以同樣用于RTL代碼的驗(yàn)證,。但是,SC設(shè)計(jì)是不包含時(shí)序信息的,,所以包含時(shí)序的RTL驗(yàn)證也是必需的,,除了在Stratus內(nèi)回歸測試SC代碼的用例,還將使用已有的UVM平臺(tái),,對RTL和SC設(shè)計(jì)同時(shí)驗(yàn)證,,一方面驗(yàn)證RTL的功能并收集RTL覆蓋率,另一方面一定程度上驗(yàn)證SC設(shè)計(jì)和RTL代碼的一致性,。所以HLS設(shè)計(jì)的驗(yàn)證分為2個(gè)方面:
(1)基于Stratus HLS的驗(yàn)證
①SC行為級模型驗(yàn)證(SystemC behavioral model)
②綜合的SC RTL模型驗(yàn)證(Synthesized SystemC RTL model)
(2)基于UVM的SystemC&RTL的驗(yàn)證
Verilog RTL實(shí)現(xiàn)驗(yàn)證(Verilog RTL implementation)
3.1 基于Stratus HLS的驗(yàn)證
基于Stratus HLS環(huán)境,,本文使用SystemC建立設(shè)計(jì)的Testbench環(huán)境,其結(jié)構(gòu)框圖如圖6所示,。時(shí)鐘和復(fù)位信號(hào)的定義是在主函數(shù)內(nèi),,并連接到測試模塊和待測設(shè)計(jì)模塊。Testbench中共實(shí)現(xiàn)兩個(gè)進(jìn)程,,Stimuli和Monitor,。Stimuli進(jìn)程里調(diào)用SystemC語言提供的隨機(jī)數(shù)據(jù)生成函數(shù),生成測試的隨機(jī)數(shù)據(jù),。Monitor進(jìn)程實(shí)現(xiàn)簡單的雙精度乘法運(yùn)算模型,,用于待測設(shè)計(jì)的參考模型,并在此處監(jiān)測DUT的結(jié)果輸出,,獲得DUT結(jié)果并與參考模型結(jié)果做比對,判斷結(jié)果的正確性,。Stratus HLS工具內(nèi)可以自動(dòng)實(shí)現(xiàn)對SC設(shè)計(jì)和RTL設(shè)計(jì)使用同一個(gè)Testbench驗(yàn)證,,只要在project.tcl中定義不同的define_sim_config時(shí),,指定為RTL_C是對SC設(shè)計(jì)驗(yàn)證或者指定RTL_V是測試高階綜合生成的RTL模型。
3.2 基于UVM的SystemC&RTL驗(yàn)證
UVM驗(yàn)證環(huán)境是既有的乘法運(yùn)算驗(yàn)證環(huán)境,,如圖7所示,,可以對Fmul64_hls設(shè)計(jì)做完整的功能驗(yàn)證、覆蓋率收集,、斷言監(jiān)測,,同時(shí)將SC設(shè)計(jì)也放到了驗(yàn)證環(huán)境里,但是需要對其外包一個(gè)殼,,可以由Stratus工具自動(dòng)生成,。此部分功能驗(yàn)證即如圖1 Stratus HLS設(shè)計(jì)流程的設(shè)計(jì)階段2中的功能驗(yàn)證2,因?yàn)楦唠A綜合生成RTL代碼的可讀性較差,,所以如果測試用例結(jié)果不一致,,尤其SC設(shè)計(jì)的結(jié)果也報(bào)錯(cuò)的話,則需要將測試用例轉(zhuǎn)到Stratus HLS環(huán)境下進(jìn)行調(diào)試,。
4 性能評估
4.1 優(yōu)化設(shè)計(jì)
Stratus HLS在將SC設(shè)計(jì)轉(zhuǎn)化為RTL代碼時(shí),,由于評估的謹(jǐn)慎性,會(huì)給出更加悲觀的結(jié)果,,因此本文選擇使用邏輯綜合工具評估HLS設(shè)計(jì)的PPA檢查,,邏輯綜合約束參考設(shè)計(jì)實(shí)際實(shí)現(xiàn)要求,所以比HLS工具中的邏輯綜合約束設(shè)置得更加細(xì)致,,最后根據(jù)邏輯綜合結(jié)果來決定是否做設(shè)計(jì)優(yōu)化的迭代,。
在時(shí)序較為緊張的時(shí)候,Stratus通常需要很長的時(shí)間來做高階綜合優(yōu)化和調(diào)度,,這就使設(shè)計(jì)優(yōu)化迭代的時(shí)間非常長,,是違背使用高階綜合工具提高設(shè)計(jì)效率初衷的。但是Stratus提供多種有效的數(shù)據(jù)路徑優(yōu)化方法,,可以有效地改善路徑延遲,,提高高階綜合效率。比如在設(shè)計(jì)優(yōu)化迭代過程中添加DPOPT,,如圖5 SC實(shí)現(xiàn)Fmul64過程中的主要HLS指導(dǎo)語句所示,。DPOPT會(huì)調(diào)用內(nèi)部集成的邏輯綜合工具優(yōu)化這部分設(shè)計(jì),而且DPOPT通常會(huì)使Stratus綜合一版RTL用時(shí)大為縮短,,從而大幅提高優(yōu)化設(shè)計(jì)的效率,。
4.2 低功耗優(yōu)化
Stratus工具自帶低功耗優(yōu)化選項(xiàng),可以自動(dòng)完成寄存器門控時(shí)鐘的插入,、時(shí)鐘樹優(yōu)化,、狀態(tài)機(jī)優(yōu)化等。本文的設(shè)計(jì)是運(yùn)算功能模塊,要求在沒有此模塊運(yùn)算指令的情況下,,模塊完全關(guān)閉,,動(dòng)態(tài)功耗為零;有乘法運(yùn)算指令的情況下,,動(dòng)態(tài)功耗和靜態(tài)功耗能夠盡可能小,。Fmul4_booth3的初次功耗評估結(jié)果如表1所示。
通過上述數(shù)據(jù),,可以了解到Fmul64_HLS設(shè)計(jì)在無乘法運(yùn)算時(shí),,滿足動(dòng)態(tài)功耗為零的要求,但是在有乘法運(yùn)算指令時(shí)的功耗卻比較大,,不滿足功耗要求,,需要對功耗做進(jìn)一步的優(yōu)化。分析設(shè)計(jì)發(fā)現(xiàn)DPOPT功耗和資源共享都會(huì)引起功耗的增加,,所以在project增加以下選項(xiàng)優(yōu)化功耗:
(1)set_attr dpopt_with_enable on
(2)set_attr sharing_effort_parts low
dpopt_with_enable對RTL架構(gòu)的影響如圖8所示,。
顯然dpopt_with_enable=on的RTL架構(gòu)是對靜態(tài)功耗的優(yōu)化大有幫助的。
sharing_effort_parts =low 會(huì)停止演算器的共享,。經(jīng)分析,,這個(gè)選項(xiàng)可以減少不必要的演算器的共享從而可優(yōu)化動(dòng)態(tài)功耗以及時(shí)序。優(yōu)化之后的Fmul64_booth3功耗如表2所示,。
可以看到通過設(shè)置優(yōu)化選項(xiàng),,靜態(tài)功耗和動(dòng)態(tài)功耗均有所優(yōu)化,其中靜態(tài)功耗約優(yōu)化了5%,,動(dòng)態(tài)功耗優(yōu)化了約39%,。寄存器門控比率達(dá)到100%,完全由工具完成寄存器門控時(shí)鐘的插入和低功耗優(yōu)化,,提高設(shè)計(jì)效率,。
4.3 邏輯綜合結(jié)果
高階綜合設(shè)計(jì)的RTL功能驗(yàn)證正確后,則設(shè)計(jì)可以做邏輯綜合,。對兩種Fmul64架構(gòu)分別作了邏輯綜合,,在28 nm工藝下,邏輯綜合結(jié)果如表3所示,。
Stratus HLS給出的面積評估結(jié)果與邏輯綜合工具的結(jié)果有所不同,,經(jīng)分析,Stratus HLS綜合約束并不嚴(yán)格,,所以面積,、延遲的評估數(shù)據(jù)存在誤差。而對比兩種架構(gòu)綜合結(jié)果,,可以看到Fmul64用乘號(hào)代替波茲編碼算法的設(shè)計(jì)面積上更優(yōu)化,,而時(shí)序結(jié)果相對較差,,但是,其在設(shè)計(jì)時(shí)間的節(jié)省是非常顯著的,。
5 結(jié)論
Stratus HLS工具改變了設(shè)計(jì)的抽象層次,,所以其在工程中的應(yīng)用流程與傳統(tǒng)RTL設(shè)計(jì)是有區(qū)別的,,驗(yàn)證環(huán)境,、調(diào)試流程、驗(yàn)證收斂的依據(jù),、邏輯綜合優(yōu)化的時(shí)間等問題的解決提前到了算法級,,而且可以將微架構(gòu)的探索加入到設(shè)計(jì)流程,不變的是設(shè)計(jì)人員仍然需要從硬件的角度考慮SC代碼的微架構(gòu)設(shè)計(jì),。Stratus HLS工具強(qiáng)大的狀態(tài)機(jī)自動(dòng)化設(shè)計(jì),、資源自動(dòng)調(diào)度和共享、低功耗優(yōu)化等功能,,使設(shè)計(jì)人員能夠?qū)⒏嗟臅r(shí)間用于架構(gòu)探索或者算法優(yōu)化,,極大的縮短設(shè)計(jì)周期,拓展設(shè)計(jì)人員可控制設(shè)計(jì)規(guī)模上限,,滿足工程項(xiàng)目的時(shí)間進(jìn)度要求,,也增強(qiáng)了我們在工程項(xiàng)目中推廣使用高階綜合工具的信心和決心。
作者信息:
苑佳紅
(天津飛騰信息技術(shù)有限公司,,湖南 長沙410000)