《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > EDA與制造 > 設(shè)計(jì)應(yīng)用 > Stratus HLS工具在高性能雙精度浮點(diǎn)乘法設(shè)計(jì)中的應(yīng)用流程
Stratus HLS工具在高性能雙精度浮點(diǎn)乘法設(shè)計(jì)中的應(yīng)用流程
2018年電子技術(shù)應(yīng)用第8期
苑佳紅
天津飛騰信息技術(shù)有限公司,湖南 長(zhǎng)沙410000
摘要: 雙精度浮點(diǎn)乘法部件是高性能CPU的核心運(yùn)算部件之一。描述了使用Cadence Stratus HLS工具設(shè)計(jì)和實(shí)現(xiàn)雙精度浮點(diǎn)乘法部件,探索新設(shè)計(jì)方法學(xué)在關(guān)鍵路徑延時(shí)調(diào)整、數(shù)據(jù)路徑優(yōu)化以及低功耗優(yōu)化等問(wèn)題的解決方法,并探討如何將新的設(shè)計(jì)流程結(jié)合到原有項(xiàng)目開發(fā)中等問(wèn)題。最終,高階綜合設(shè)計(jì)的RTL,在28 nm工藝下綜合實(shí)現(xiàn)頻率為2.5 GHz、面積為28 211 μm2,基本滿足高性能微處理器的開發(fā)要求,增強(qiáng)了在項(xiàng)目中更加廣泛地使用新設(shè)計(jì)方法學(xué)的信心。
中圖分類號(hào): TP302.2
文獻(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.
The application flow of Stratus HLS tool in high performance double precision floating point multiplication design
Yuan Jiahong
Phytium Technology Co.,Ltd.,Changsha 410000,China
Abstract: Double-precision floating-point multiplication parts is one of the most important unit of high performance CPU.This article describes the use of Cadence Stratus HLS tools in 28 nm process design and implement double-precision floating-point multiplication. The frequency of this multiplication is 2.5 GHz, and its area is 28 211 square micrometers, which almost meets the requirements of high performance microprocessor development. The experiences of this work enhance the confidence of the more widely using of the new design methodology in our project.
Key words : high-level synthesis;HLS;double-precision floating-point multiplication

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)。

wdz5-t1.gif

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。

wdz5-t2.gif

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ù)。

wdz5-t3.gif

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所示。

wdz5-t4.gif

wdz5-t5.gif

    至此,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模型。

wdz5-t6.gif

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)試。

wdz5-t7.gif

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所示。

wdz5-b1.gif

    通過(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所示。

wdz5-t8.gif

    顯然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所示。

wdz5-b2.gif

    可以看到通過(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所示。

wdz5-b3.gif

    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)

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。