文獻(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)域的蓬勃興起,對(duì)通用處理器的計(jì)算能力要求越來(lái)越高。采用更加復(fù)雜的算法設(shè)計(jì)、探索效率更高的架構(gòu)有助于提升通用處理器的性能。然而在傳統(tǒng)的寄存器傳輸級(jí)(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)致較長(zhǎng)的設(shè)計(jì)周期。Stratus高階綜合工具(High-level Synthesis,HLS)基于高階綜合設(shè)計(jì)方法學(xué),將設(shè)計(jì)層次抽象到算法級(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)乘法模塊,并在此過(guò)程中探討高階綜合完成產(chǎn)品前端設(shè)計(jì)、驗(yàn)證、優(yōu)化、性能評(píng)估的方法和流程。
1 HLS應(yīng)用流程
Stratus HLS將設(shè)計(jì)抽象到算法級(jí),對(duì)算法做硬件微架構(gòu)實(shí)現(xiàn)的構(gòu)想后,使用高級(jí)語(yǔ)言SystemC/C/C++描述設(shè)計(jì),并在高級(jí)語(yǔ)言層對(duì)設(shè)計(jì)做充分的非時(shí)序功能驗(yàn)證,如圖1中設(shè)計(jì)階段1所示。在設(shè)計(jì)階段2,首先需根據(jù)設(shè)計(jì)目標(biāo)設(shè)置高階綜合的約束文件及工藝庫(kù)。然后將設(shè)計(jì)階段1完成的SystemC代碼和約束文件灌入Stratus HLS工具,由工具完成狀態(tài)機(jī)、寄存器插入、流水線級(jí)數(shù)設(shè)置等控制電路,生成符合時(shí)序、面積、性能要求的RTL代碼。最后對(duì)RTL代碼做PPA檢查,選擇使用邏輯綜合工具再一次對(duì)HLS生成的RTL代碼做性能評(píng)估,如果符合要求,則開始做RTL的完整功能驗(yàn)證。如果PPA檢查不能達(dá)到目標(biāo)要求,則需要對(duì)關(guān)鍵路徑進(jìn)行分析、優(yōu)化,此時(shí)可以充分利用HLS工具自帶的優(yōu)化功能加速優(yōu)化設(shè)計(jì)迭代的完成過(guò)程。功能驗(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文件,連接測(cè)試環(huán)境Testbench和待測(cè)設(shè)計(jì)DUT。DUT即Fmul64,用SystemC語(yǔ)言中的SC_MODULE類實(shí)現(xiàn),作為此次設(shè)計(jì)的頂層模塊,同時(shí)在此模塊內(nèi)定義模塊的端口、時(shí)鐘信號(hào)、復(fù)位信號(hào)、輸入端口、輸出端口等,作為設(shè)計(jì)的頭文件,并包含在其他文件內(nèi)使用。SystemC語(yǔ)言提供兩個(gè)方法用于設(shè)計(jì)功能的描述:SC_METHOD和SC_CTHREAD。其中SC_METHOD用于組合邏輯電路實(shí)現(xiàn),內(nèi)部不能包括wait()語(yǔ)句,而要實(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ù)位值,然后是定義無(wú)限循環(huán)語(yǔ)句,并在內(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行為級(jí)實(shí)現(xiàn)
雙精度浮點(diǎn)乘法運(yùn)算過(guò)程如圖4所示。首先對(duì)輸入乘法操作數(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)算,讓工具來(lái)完成乘法運(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)語(yǔ)句(主要是HLS_DPOPT_REGION)如圖5所示。
至此,SC代碼設(shè)計(jì)已完成,并且按照設(shè)計(jì)目標(biāo)的要求使用高階綜合指導(dǎo)語(yǔ)句設(shè)置了流水線和時(shí)序要求,可以開始后續(xù)的驗(yàn)證和高階綜合處理。雖然設(shè)計(jì)是使用高級(jí)語(yǔ)言SystemC描述,但是其微架構(gòu)仍然是符合硬件設(shè)計(jì)和實(shí)現(xiàn)規(guī)則的,所以需要注意保持良好的SystemC代碼風(fēng)格非常重要。
3 功能驗(yàn)證
Stratus HLS工具提供統(tǒng)一的驗(yàn)證平臺(tái),所以在SC級(jí)的測(cè)試用例可以同樣用于RTL代碼的驗(yàn)證。但是,SC設(shè)計(jì)是不包含時(shí)序信息的,所以包含時(shí)序的RTL驗(yàn)證也是必需的,除了在Stratus內(nèi)回歸測(cè)試SC代碼的用例,還將使用已有的UVM平臺(tái),對(duì)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行為級(jí)模型驗(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),并連接到測(cè)試模塊和待測(cè)設(shè)計(jì)模塊。Testbench中共實(shí)現(xiàn)兩個(gè)進(jìn)程,Stimuli和Monitor。Stimuli進(jìn)程里調(diào)用SystemC語(yǔ)言提供的隨機(jī)數(shù)據(jù)生成函數(shù),生成測(cè)試的隨機(jī)數(shù)據(jù)。Monitor進(jìn)程實(shí)現(xiàn)簡(jiǎn)單的雙精度乘法運(yùn)算模型,用于待測(cè)設(shè)計(jì)的參考模型,并在此處監(jiān)測(cè)DUT的結(jié)果輸出,獲得DUT結(jié)果并與參考模型結(jié)果做比對(duì),判斷結(jié)果的正確性。Stratus HLS工具內(nèi)可以自動(dòng)實(shí)現(xiàn)對(duì)SC設(shè)計(jì)和RTL設(shè)計(jì)使用同一個(gè)Testbench驗(yàn)證,只要在project.tcl中定義不同的define_sim_config時(shí),指定為RTL_C是對(duì)SC設(shè)計(jì)驗(yàn)證或者指定RTL_V是測(cè)試高階綜合生成的RTL模型。
3.2 基于UVM的SystemC&RTL驗(yàn)證
UVM驗(yàn)證環(huán)境是既有的乘法運(yùn)算驗(yàn)證環(huán)境,如圖7所示,可以對(duì)Fmul64_hls設(shè)計(jì)做完整的功能驗(yàn)證、覆蓋率收集、斷言監(jiān)測(cè),同時(shí)將SC設(shè)計(jì)也放到了驗(yàn)證環(huán)境里,但是需要對(duì)其外包一個(gè)殼,可以由Stratus工具自動(dòng)生成。此部分功能驗(yàn)證即如圖1 Stratus HLS設(shè)計(jì)流程的設(shè)計(jì)階段2中的功能驗(yàn)證2,因?yàn)楦唠A綜合生成RTL代碼的可讀性較差,所以如果測(cè)試用例結(jié)果不一致,尤其SC設(shè)計(jì)的結(jié)果也報(bào)錯(cuò)的話,則需要將測(cè)試用例轉(zhuǎn)到Stratus HLS環(huán)境下進(jìn)行調(diào)試。
4 性能評(píng)估
4.1 優(yōu)化設(shè)計(jì)
Stratus HLS在將SC設(shè)計(jì)轉(zhuǎn)化為RTL代碼時(shí),由于評(píng)估的謹(jǐn)慎性,會(huì)給出更加悲觀的結(jié)果,因此本文選擇使用邏輯綜合工具評(píng)估HLS設(shè)計(jì)的PPA檢查,邏輯綜合約束參考設(shè)計(jì)實(shí)際實(shí)現(xiàn)要求,所以比HLS工具中的邏輯綜合約束設(shè)置得更加細(xì)致,最后根據(jù)邏輯綜合結(jié)果來(lái)決定是否做設(shè)計(jì)優(yōu)化的迭代。
在時(shí)序較為緊張的時(shí)候,Stratus通常需要很長(zhǎng)的時(shí)間來(lái)做高階綜合優(yōu)化和調(diào)度,這就使設(shè)計(jì)優(yōu)化迭代的時(shí)間非常長(zhǎng),是違背使用高階綜合工具提高設(shè)計(jì)效率初衷的。但是Stratus提供多種有效的數(shù)據(jù)路徑優(yōu)化方法,可以有效地改善路徑延遲,提高高階綜合效率。比如在設(shè)計(jì)優(yōu)化迭代過(guò)程中添加DPOPT,如圖5 SC實(shí)現(xiàn)Fmul64過(guò)程中的主要HLS指導(dǎo)語(yǔ)句所示。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)算功能模塊,要求在沒(méi)有此模塊運(yùn)算指令的情況下,模塊完全關(guān)閉,動(dòng)態(tài)功耗為零;有乘法運(yùn)算指令的情況下,動(dòng)態(tài)功耗和靜態(tài)功耗能夠盡可能小。Fmul4_booth3的初次功耗評(píng)估結(jié)果如表1所示。
通過(guò)上述數(shù)據(jù),可以了解到Fmul64_HLS設(shè)計(jì)在無(wú)乘法運(yùn)算時(shí),滿足動(dòng)態(tài)功耗為零的要求,但是在有乘法運(yùn)算指令時(shí)的功耗卻比較大,不滿足功耗要求,需要對(duì)功耗做進(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對(duì)RTL架構(gòu)的影響如圖8所示。
顯然dpopt_with_enable=on的RTL架構(gòu)是對(duì)靜態(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所示。
可以看到通過(guò)設(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ì)可以做邏輯綜合。對(duì)兩種Fmul64架構(gòu)分別作了邏輯綜合,在28 nm工藝下,邏輯綜合結(jié)果如表3所示。
Stratus HLS給出的面積評(píng)估結(jié)果與邏輯綜合工具的結(jié)果有所不同,經(jīng)分析,Stratus HLS綜合約束并不嚴(yán)格,所以面積、延遲的評(píng)估數(shù)據(jù)存在誤差。而對(duì)比兩種架構(gòu)綜合結(jié)果,可以看到Fmul64用乘號(hào)代替波茲編碼算法的設(shè)計(jì)面積上更優(yōu)化,而時(shí)序結(jié)果相對(duì)較差,但是,其在設(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í)間等問(wèn)題的解決提前到了算法級(jí),而且可以將微架構(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)了我們?cè)诠こ添?xiàng)目中推廣使用高階綜合工具的信心和決心。
作者信息:
苑佳紅
(天津飛騰信息技術(shù)有限公司,湖南 長(zhǎng)沙410000)