亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        MATLAB 高層次綜合工具性能探究*

        2022-10-20 01:09:54陳書祺占薇劉益巧徐龍潔陳鑫
        電子器件 2022年3期
        關(guān)鍵詞:設(shè)計

        陳書祺,占薇,劉益巧,徐龍潔,陳鑫

        (南京航空航天大學(xué)電子信息工程學(xué)院,江蘇 南京 211106)

        高層次綜合工具大部分都采用C/C++作為輸入并輸出寄存器傳輸級代碼,從而極大地降低了硬件編程門檻并縮短了開發(fā)時間,HLS 系統(tǒng)還提供了各種優(yōu)化方法使得開發(fā)人員可以從高級語言層面對硬件結(jié)構(gòu)進(jìn)行優(yōu)化,部分還提供了視圖以方便對每個時鐘周期的電路行為進(jìn)行分析,進(jìn)一步提高了生成RTL 的性能[1]。

        文獻(xiàn)[2]顯示,現(xiàn)階段高層次綜合工具已經(jīng)可以應(yīng)用于中、高復(fù)雜度的應(yīng)用系統(tǒng),并且相較于傳統(tǒng)基于寄存器傳輸級(RTL)的技術(shù)路線,開發(fā)周期減少約60%,且最高工作速度提升了一倍。但是,現(xiàn)階段大部分已報道的高層次綜合工具主要是賽靈思公司開發(fā)的Vivado HLS 開發(fā)工具[3-4]。由于賽靈思公司是老牌的FPGA 芯片制造商,且Vivado HLS 開發(fā)工具源于FPGA 的設(shè)計工具EDA,因此Vivado HLS 開發(fā)工具主要被硬件開發(fā)工程師所熟悉。

        因為MATLAB 具有運算能力強、語法簡單易于學(xué)習(xí)掌握、應(yīng)用范圍廣等特點,廣泛被算法開發(fā)工程師所應(yīng)用。雖然MATLAB 也具有高層次綜合工具功能,但經(jīng)檢索發(fā)現(xiàn),國內(nèi)幾乎沒有報道使用MATLAB 作為高層次綜合工具,僅有少部分人嘗試Simulink 結(jié)合HDL Coder 來完成FPGA 的快速設(shè)計[5-6]。國外雖然存在使用HDL Coder 來轉(zhuǎn)化代碼的個別案例,但此方法并未被大量采用[7]。此外,所有已發(fā)表文獻(xiàn)僅僅將MATLAB 作為工程的一種實現(xiàn)方式,而未對其進(jìn)行評估。

        因此,本文研究了基于MATLAB 高層次綜合方法,并探究其設(shè)計效率。首先,本文研究了MATLAB的高層次綜合方法,總結(jié)了一些必要的MATLAB 代碼設(shè)計風(fēng)格。隨后,建立了一套行之有效的MATLAB 的高層次綜合方法,并確定了作為評估對象的電路類型和設(shè)計方法。最后,本文將同樣的算法邏輯,在Vivado 和MATLAB 中分別實現(xiàn),并對編寫的模塊進(jìn)行功能性仿真以及時序仿真,并對仿真數(shù)據(jù)進(jìn)行性能比較和評估。最終結(jié)果顯示,在簡單電路模塊的構(gòu)建上,與Verilog 搭建電路相比,用MATLAB 進(jìn)行設(shè)計,功耗減少程度在-5%~10%區(qū)間內(nèi)波動,面積使用量增加約5%,時序減少程度則是-14%~17%不等,主要由于各項數(shù)據(jù)之間的平衡,某項性能的提升會以另一項性能的降低為代價。這表明高層次綜合已經(jīng)足夠成熟,并且在特定場合可以在面積,資源利用上實現(xiàn)突破。

        1 高層次綜合流程和代碼風(fēng)格

        1.1 設(shè)計流程

        HDL Coder 是MathWorks 推出的一款工具,它支持從MATLAB 代碼自動生成HDL 代碼,允許工程師用MATLAB 語言實現(xiàn)FPGA 和ASIC 設(shè)計。同時發(fā)布的還有HDL Verifier,該產(chǎn)品包含用于測試的FPGA 硬件在環(huán)功能。這兩款產(chǎn)品使得MathWorks可提供利用MATLAB 和Simulink 進(jìn)行HDL 代碼生成和驗證的能力[8]。

        本文使用的MATLAB 版本為R2019b,HDL Coder 設(shè)計流程圖如圖1 所示。在新建的腳本文件中以function 的形式確定模塊的功能,同時明確模塊的輸入和輸出。接著,編寫testbench 測試文件,規(guī)定模塊輸入和輸出數(shù)據(jù)的類型和大小。在命令行窗口中輸入hdlcoder,在彈出的MATLAB HDL Coder Project 窗口中設(shè)置工程名稱以及存放位置。然后在HDL Code Generation 中添加前文提到的function和testbench,最后在workflow advisor 的HDL Code Generation 步驟中,設(shè)置語言為Verilog。在HDL Verification 上右擊選擇運行到選定任務(wù),無報錯即可得到轉(zhuǎn)換的Verilog 代碼。

        圖1 HDL Coder 設(shè)計流程圖

        1.2 代碼風(fēng)格

        在function 的編寫過程中,由于目前并沒有較完整的代碼風(fēng)格,編寫者大多依靠經(jīng)驗,我們在嘗試的過程中發(fā)現(xiàn)了一些可以遵循的規(guī)律。具體地來說,我們發(fā)現(xiàn)通過編寫function 和testbench 從MATLAB 函數(shù)中生成Verilog 代碼時,MATLAB 代碼風(fēng)格對轉(zhuǎn)化結(jié)果起至關(guān)重要的作用,相同邏輯用不合適的語法描述時可能會得到不理想的結(jié)果甚至引起報錯。我們探究了不同數(shù)據(jù)類型、輸入、結(jié)構(gòu)語句及MATLAB 中函數(shù)對生成結(jié)果的影響。結(jié)果如下:

        從數(shù)據(jù)類型角度分析:

        (1)轉(zhuǎn)化的Verilog 代碼的輸入輸出均為wire類型;

        (2)function 中input 與output 的數(shù)據(jù)類型以及長度大小由testbench 決定,而在MATLAB 中設(shè)置為不同的數(shù)據(jù)類型如logical,double,uint8 等不影響轉(zhuǎn)化結(jié)果,但不可設(shè)置為string,否則fixed-point conversion 階段將不支持;

        (3)HDL Coder 不支持2D 矩陣作為function 的輸入,1×n或n×1 矩陣是唯一可以轉(zhuǎn)化的矩陣,轉(zhuǎn)化后變?yōu)閚個寄存器,寄存器長度相同且由矩陣中最大的數(shù)值決定。在HDL 程序中由寄存器組作為中間變量進(jìn)行操作。且轉(zhuǎn)化所得的寄存器組完全一致;且輸入輸出矩陣n的大小必須通過testbench 固定,不支持動態(tài)矩陣。

        從語法角度分析:

        (1)MATLAB 中的switch 語句轉(zhuǎn)化為Verilog 中的case 語句,elseif 語句轉(zhuǎn)化為if 語句,while 語句不支持轉(zhuǎn)化,建議使用for 語句;

        (2)較高級的數(shù)學(xué)函數(shù)不支持轉(zhuǎn)化,已知的有l(wèi)og2(n),dec2bin(),imread()等。

        2 待測電路設(shè)計

        為了更好地研究MATLAB 高層次綜合方法的設(shè)計效率,本文擬對數(shù)據(jù)通路的典型電路,具體包括加法器,比較器,數(shù)據(jù)選擇器,乘法器四種電路進(jìn)行設(shè)計。

        2.1 加法器設(shè)計

        算術(shù)邏輯單元(ALU)不僅能完成算術(shù)運算也能完成邏輯運算,是微處理器芯片中的一個十分重要的部件[9]。但是所有基本算術(shù)運算(加、減、乘、除)最終都可歸結(jié)為加法運算,所以加法運算的實現(xiàn)顯得尤為重要[10]。

        本文采用四位加法器對比設(shè)計,考慮到帶有進(jìn)位的加法器設(shè)計,采用的方法為手工擴展輸入一位,執(zhí)行常規(guī)加法,截取和的最高位作為進(jìn)位。

        在MATLAB 的腳本文件中,編寫代碼得到兩個輸入相加的和,再把和分為進(jìn)位以及非進(jìn)位部分,如圖2(a)所示,再編寫測試文件,由于MATLAB HDL Coder 的特殊性,需要在激勵文件中通過給輸入輸出賦值,來達(dá)到約束位數(shù)的作用,如針對此加法器,x1 和x2 的賦值區(qū)間在[8,15]時,轉(zhuǎn)化生成的Verilog 代碼中的輸入為4 位2 進(jìn)制。同理,如果賦值區(qū)間為[16,31],得到的轉(zhuǎn)化代碼中input 的位數(shù)也就為5 位。因此如圖2(b)中,給x1 和x2 賦值為15,使得約束加法器的輸入為4 位2 進(jìn)制,就可以得到相同原理的四位加法器模塊。

        圖2 基于HDL Coder 的加法器代碼

        2.2 比較器設(shè)計

        在數(shù)字電路中,數(shù)值比較器的輸入是要進(jìn)行比較的兩個二進(jìn)制數(shù),輸出是比較的結(jié)果[11],是一種比較常見且很常用的邏輯模塊。

        本文采用最基本的32 位比較器,即輸入的數(shù)均為字長為一個字節(jié)的無符號整型數(shù),通過比較大小輸出相應(yīng)的結(jié)果值。輸出三個值x、y、z初始均為0,若a>b,則x變?yōu)?;若a=b,則y變?yōu)?;若a<b,則z變?yōu)?。

        在腳本文件中新建function comp_1,如圖3,在此函數(shù)中,編寫基本比較器的邏輯,即當(dāng)a>b時,x=1,y=0,z=0;即當(dāng)a=b時,x=0,y=1,z=0;即當(dāng)a<b時,x=0,y=0,z=1。整個函數(shù)通過三個if 結(jié)構(gòu)來完成。

        圖3 比較器代碼

        2.3 數(shù)據(jù)選擇器設(shè)計

        數(shù)據(jù)選擇器(也稱多路選擇器)是一種多輸入、單輸出的組合邏輯電路,在地址端的控制下將多個輸入信號中的一個從輸出端輸出[12]。數(shù)據(jù)選擇器屬于組合邏輯電路,他的基本功能是在數(shù)據(jù)傳輸過程中完成多路數(shù)據(jù)到一路數(shù)據(jù)的有序轉(zhuǎn)換,還可代替繁多的邏輯門實現(xiàn)組合邏輯函數(shù),從而使電路簡化[13],因此也是個十分重要的模塊。

        本文選用的是四位四選一數(shù)據(jù)選擇器,通過判斷輸入的值來選擇哪個通路的數(shù)據(jù)被輸出。

        如圖4,在MATLAB 的腳本文件中通過case 結(jié)構(gòu)實現(xiàn),當(dāng)a 的取值分別為00、01、10、11 時,輸出端out 將分別輸出in0,in1,in2,in3 的數(shù)據(jù)。

        圖4 數(shù)據(jù)選擇器代碼

        2.4 乘法器設(shè)計

        在各類處理器中,乘法器有著不可或缺的地位。高性能的乘法器是提高中央處理器運算速度的關(guān)鍵。在常見的FPGA 芯片上都不會搭載多位乘法器模塊,需要我們進(jìn)行設(shè)計來實現(xiàn),所以研究FPGA 的數(shù)字乘法器是有著非常重要的意義。在乘法器設(shè)計上,以位移相乘法和booth 算法居多[14]。本文主要研究采用位移相乘法的乘法器模塊。

        本文研究基本的16 位乘法器模塊,算法為從乘數(shù)的最末尾開始依次與被乘數(shù)相乘,并將乘得的結(jié)果依次左移再相加求和。

        如圖5 所示,在MATLAB 的腳本文件中,編寫代碼得到兩個輸入相乘的積。

        圖5 乘法器代碼

        3 實驗結(jié)果

        3.1 實驗平臺

        此次對比測試中,我們選擇FPGA 板卡型號為xc7k325tffg900-2。仿真的過程中,我們分別將直接編寫的Verilog 代碼與MATLAB 轉(zhuǎn)化后生成的Verilog 代碼使用Vivado 進(jìn)行仿真。

        3.2 性能評估方法

        單個模塊差異過小,如功耗差異出現(xiàn)在小數(shù)點后3位以上,造成無法比較。為了解決這個問題,我們將兩份代碼進(jìn)行處理,處理的方法即在新建的頂層模塊中使用generate 語句,生成函數(shù)名為<模塊名>bit[0].f1到<模塊名>bit[999].f1 的1 000 個相同的該模塊,這樣可以便捷地實現(xiàn)1 000 個相同功能模塊的并行,使得兩份代碼在增加功耗的同時消除錯誤影響。

        同時,1 000 個輸出的末端可能出現(xiàn)“線與”的問題,此問題主要體現(xiàn)在造成了電路末端信號的冒險與競爭,在妨礙正常波形輸出(產(chǎn)生毛刺等錯誤)的同時還增加了不確定的功耗,導(dǎo)致兩者的對比結(jié)果不準(zhǔn)確,乃至導(dǎo)致結(jié)論錯誤。因此,為了避免這一問題,我們在每個模塊的末端增加數(shù)據(jù)選擇器,并且在輸出的每一位bit 處使用或門得到正確的輸出。這樣雖然增加了功耗,但是每個模塊的增加功耗相同。因此,差異不會改變,最終也就可以正確地得出所有結(jié)論。

        在Vivado 中編寫每個頂層模塊的testbench,其中在每個激勵文件中,利用random 函數(shù)每過30 ns隨機生成給定范圍內(nèi)的激勵信號,使得仿真生成的saif 向量文件輔助測試功耗有較高的可信度。

        將代碼改寫后,我們先將工程進(jìn)行綜合以及實現(xiàn),對代碼進(jìn)行布局布線之后才能獲得準(zhǔn)確的功耗以及資源利用情況。在做完實現(xiàn)之后,根據(jù)官方提供的手冊ug997 進(jìn)行時序仿真,來生成saif 向量文件,這個向量文件用以獲得置信水平為high 的功耗報告。這樣通過對兩份代碼的仿真,分別獲得溫度、功耗,時序,原理圖,資源等數(shù)據(jù),并且確保了置信水平為high。

        3.3 性能結(jié)果

        我們通過對比兩種代碼的功耗,資源,原理圖,時序等(如表1),發(fā)現(xiàn)了以下的結(jié)論:Verilog 編寫在復(fù)雜電路中總體更優(yōu),但高級語言的HDL 各項數(shù)據(jù)也較為接近,在簡單電路中表現(xiàn)甚至更為優(yōu)秀,具體的數(shù)據(jù)差異體現(xiàn)在功耗、時間、面積的相互轉(zhuǎn)換上,即一項性能的提升會帶來另一項性能的降低。

        表1 四種基本運算模塊的性能對比

        我們采用式(1)來計算MATLAB HLS 的性能改進(jìn)程度:

        該公式僅用于計算功耗、IO、LUT,對于WNS 則不需要公式前的負(fù)號。計算所得的百分比若為正則表示性能的提升,為負(fù)則表示性能的下降。

        由表可知,使用MATLAB HLS,在加法器的設(shè)計上功耗優(yōu)化了11.50%,面積優(yōu)化了2.11%,時延優(yōu)化了16.12%,再者,數(shù)據(jù)選擇器設(shè)計功耗優(yōu)化了0.96%,時延快2.39%,但面積多出來0.92%;比較器的優(yōu)勢主要集中在功耗上,優(yōu)化28.96%。由此看來,在簡單電路的構(gòu)建上,MATLAB 高層次綜合與Verilog 搭建電路相比,性能指標(biāo)的差異主要集中在功耗、時間和面積的相互轉(zhuǎn)化上。但針對復(fù)雜電路如乘法器電路,功耗、面積以及時延皆不如Verilog編寫的代碼,具體的差距分別為0.09%,9.29%和11.43%??梢?高級語言的HLS 在復(fù)雜電路的轉(zhuǎn)化和優(yōu)化上還有很長的路要走。

        在此基礎(chǔ)上,繼續(xù)測試了不同位寬下MATLAB HLS 和Verilog 直接編寫代碼的性能對比。當(dāng)位寬為4 位、8 位、16 位、32 位依次增長時,兩種設(shè)計方式的功耗、LUT 呈現(xiàn)上升的趨勢,WNS 呈現(xiàn)下降的趨勢,這也是意料之內(nèi)的結(jié)果。

        在上述設(shè)計的基礎(chǔ)上進(jìn)行不同位寬下的性能對比,我們?nèi)匀徊捎檬?1)來計算功耗、LUT 和WNS的性能改進(jìn)程度,其中以加法器的不同位寬性能對比為例,計算功耗、LUT 使用以及WNS 的性能提升百分比,如圖6 所示,位寬為4 位時MATLAB HLS全面占優(yōu),而位寬為8 位時,僅速度優(yōu)于直接編寫的代碼,在16 位加法器中則為面積占優(yōu),最后32 位加法器只有面積劣于Verilog 直接編寫的代碼。隨著位數(shù)的增加,性能的差異沒有一成不變,而是體現(xiàn)在功耗、時間、面積的相互轉(zhuǎn)換上。如圖7 所示,數(shù)據(jù)選擇器也是同理。

        圖6 加法器不同位寬性能對比

        圖7 數(shù)據(jù)選擇器不同位寬性能對比

        但對于乘法器這種復(fù)雜電路來說,如圖8 所示,僅在4 位和8 位電路相對簡單時,MATLAB HLS 在速度上稍占優(yōu)勢,隨著位數(shù)的增加,電路復(fù)雜度的提升,在16 位和32 位時性能全面處于劣勢,但劣勢不是很大,32 位時功耗和面積分別低3.39%和0.88%,也就是說MATLAB HLS 在復(fù)雜電路的轉(zhuǎn)化上還有一定的提升空間,但Verilog 直接編寫代碼的優(yōu)勢也不明顯。折線圖依然可以體現(xiàn)功耗、時間、面積性能的相互轉(zhuǎn)換。

        圖8 乘法器不同位寬性能對比

        4 結(jié)語

        本文研究了基于MATLAB 的高層次綜合方法,并用該方法完成了加法器、比較器、四選一數(shù)據(jù)選擇器、乘法器這些運算模塊的設(shè)計。在與傳統(tǒng)的RTL級設(shè)計的功能與時序仿真對比中,得知使用MATLAB 進(jìn)行高層次綜合的設(shè)計功耗減少程度在-5%~10%區(qū)間內(nèi)波動,面積使用量約增加5%,時序減少程度則是-14%~17%不等,主要為各項數(shù)據(jù)之間的平衡。評估結(jié)果顯示,現(xiàn)階段使用高級語言如MATLAB 進(jìn)行高層次綜合的設(shè)計已經(jīng)成為了可能,在性能差距可以接受的前提下,MATLAB 高層次綜合已經(jīng)足夠成熟,并且在特定場合可以在面積,資源利用上實現(xiàn)突破。

        猜你喜歡
        設(shè)計
        二十四節(jié)氣在平面廣告設(shè)計中的應(yīng)用
        河北畫報(2020年8期)2020-10-27 02:54:06
        何為設(shè)計的守護(hù)之道?
        《豐收的喜悅展示設(shè)計》
        流行色(2020年1期)2020-04-28 11:16:38
        基于PWM的伺服控制系統(tǒng)設(shè)計
        電子制作(2019年19期)2019-11-23 08:41:36
        基于89C52的32只三色LED搖搖棒設(shè)計
        電子制作(2019年15期)2019-08-27 01:11:50
        基于ICL8038的波形發(fā)生器仿真設(shè)計
        電子制作(2019年7期)2019-04-25 13:18:16
        瞞天過海——仿生設(shè)計萌到家
        設(shè)計秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設(shè)計叫而專
        Coco薇(2017年5期)2017-06-05 08:53:16
        從平面設(shè)計到“設(shè)計健康”
        商周刊(2017年26期)2017-04-25 08:13:04
        欧美精品日韩一区二区三区 | 国内偷拍第一视频第一视频区| 开心五月激情五月五月天| 国产两女互慰高潮视频在线观看| 开心婷婷五月激情综合社区| 亚洲欧洲日产国码久在线| 精品久久一区二区三区av制服| 成人欧美一区二区三区在线| 99热久久精里都是精品6| 亚洲国产香蕉视频欧美| 日本一区二区三区精品不卡| 国产区女主播在线观看| 成人妇女免费播放久久久| 亚洲欧美日韩中文字幕网址| 久久久精品网站免费观看| 久久久亚洲欧洲日产国码二区| 一本久久a久久精品亚洲| 国产亚洲精品性爱视频| 麻豆国产av在线观看| 久久天天躁狠狠躁夜夜avapp| 国产精品露脸视频观看| 亚洲精品一区二区在线播放| 国产亚洲精品av一区| 久久亚洲私人国产精品va| 亚洲久无码中文字幕热| 日韩精品综合在线视频| 伦伦影院午夜理论片| 在线观看午夜亚洲一区| 91久久国产情侣真实对白| 国产精品一区久久综合| 正在播放国产多p交换视频| 亚洲三级黄色| 一级二级三一片内射视频| 精品露脸国产偷人在视频| 99re热这里只有精品最新| 日韩av在线不卡一区二区三区| 国产精品亚洲av高清二区| 真人做爰片免费观看播放| 国产精品久久久久久久久免费观看 | 亚洲嫩模一区二区三区视频| 国产日产久久高清ww|