引言
現(xiàn)代系統(tǒng)設(shè)計(jì)許多都是由C/C++,Python等高級(jí)語(yǔ)言來(lái)完成,而且這些系統(tǒng)越來(lái)越復(fù)雜,涉及到的算法的運(yùn)算量也越來(lái)越大,許多算法需要用硬件實(shí)現(xiàn)來(lái)滿足算法的實(shí)時(shí)性要求.FPGA是一種可編程的邏輯器件,它具有便于修改,調(diào)試,并能并行地完成大量的運(yùn)算,從而提高算法的實(shí)時(shí)性,并且隨著硬件制造水平不斷地提高,F(xiàn)PGA的資源越來(lái)越大,工作頻率也越來(lái)越高,使得能在其上面完成的算法也越來(lái)越復(fù)雜.但是傳統(tǒng)的軟硬件分開(kāi)設(shè)計(jì)的方法由于軟硬件設(shè)計(jì)者采用不同的設(shè)計(jì)語(yǔ)言,存在軟硬件設(shè)計(jì)者之間難以溝通導(dǎo)致設(shè)計(jì)周期長(zhǎng)等問(wèn)題,這種設(shè)計(jì)方法已不能滿足快速地增長(zhǎng)的市場(chǎng)要求,如何將這些系統(tǒng)設(shè)計(jì)中的算法快速轉(zhuǎn)換為相應(yīng)的硬件來(lái)實(shí)現(xiàn),需要新的軟硬件協(xié)同設(shè)計(jì)方法.當(dāng)前基于C/C++的軟硬件協(xié)同設(shè)計(jì),有一個(gè)SystemC 標(biāo)準(zhǔn)化組織一直致力于這個(gè)工作,也有少量商業(yè)化工具例如Syn-opsys 公司Synphony C Compiler 和Calypto Design Sys-tems 公司的Catapult SL Synthesis 可以將C/C++算法轉(zhuǎn)換為相應(yīng)的硬件.Python是一種簡(jiǎn)單易學(xué)并且功能強(qiáng)大的編程語(yǔ)言,有許多算法是由Python來(lái)實(shí)現(xiàn),而且這些算法很多是免費(fèi).開(kāi)源的,和C/C++類似需要如何完成基于Python的軟硬件協(xié)同設(shè)計(jì).
1 基于Python 的軟硬件協(xié)同設(shè)計(jì)發(fā)展
由于Python的強(qiáng)大的軟硬件描述能力,近年來(lái)許多研究者在Python的軟硬件協(xié)同設(shè)計(jì)方面進(jìn)行了許多研究,其中Logaras E 提出了一種稱為SysPy(System Py-thon)可以使用Python 來(lái)描述硬件并將其自動(dòng)轉(zhuǎn)換為VHDL,Zhang mi采用PDSDL(Dynamic System Descrip-tion Language)來(lái)進(jìn)行系統(tǒng)建模和校驗(yàn)并可將系統(tǒng)轉(zhuǎn)換為Verilog的硬件描述,特別是Decaluwe J提出一種稱為MyHDL 的Python 擴(kuò)展包來(lái)進(jìn)行軟硬件協(xié)同設(shè)計(jì),Villar J I采用MyHDL 完成了一個(gè)接口設(shè)計(jì)實(shí)例.這些開(kāi)發(fā)工具各自具有自己的一些特點(diǎn),但是他們有一點(diǎn)是相同,就是采用Python來(lái)進(jìn)行軟硬件協(xié)同設(shè)計(jì).下面以MyHDL為例介紹基于Python的軟硬件協(xié)同設(shè)計(jì).
2 基于Python 的MyHDL 包簡(jiǎn)介
MyHDL采用Python擴(kuò)展包的形式使其能支持硬件設(shè)計(jì)和仿真并在仿真結(jié)果符合要求后可將軟件算法自動(dòng)轉(zhuǎn)換為相應(yīng)的采用Verilog 或VHDL 硬件描述,由于MyHDL包是基于Python的硬件擴(kuò)展,下面主要對(duì)MyH-DL硬件方面的一些主要特點(diǎn)做簡(jiǎn)要介紹.
2.1 數(shù)據(jù)類型
標(biāo)準(zhǔn)Python的int類型已經(jīng)具有許多硬件設(shè)計(jì)所需要特征,但是在硬件設(shè)計(jì)中由于包含許多位操作和處理,MyHDL設(shè)計(jì)了intbv類,提供索引和切片操作來(lái)支持位的操作和處理.
在MyHDL采用函數(shù)來(lái)對(duì)硬件的模塊進(jìn)行建模,My-HDL也有信號(hào)對(duì)象,類似于VHDL語(yǔ)言的信號(hào),采用信號(hào)作為函數(shù)的參數(shù)來(lái)定義模塊的端口.
2.3 發(fā)生器
發(fā)生器是MyHDL 的一個(gè)關(guān)鍵概念,用來(lái)建立并發(fā)性模型,對(duì)應(yīng)于Verilog的always塊或者VHDL的進(jìn)程.
2.4 自動(dòng)轉(zhuǎn)換
在一定限制條件下,MyHDL使用toVerilog()或者toVHDL()函數(shù)將MyHDL設(shè)計(jì)自動(dòng)轉(zhuǎn)換為相應(yīng)的Veril-og或者VHDL代碼,如果符合MyHDL可綜合子集的要求,就可使用MyHDL完成可硬件綜和的代碼并在FPGA上實(shí)現(xiàn).
2.5 仿真
MyHDL通過(guò)Cosimulation對(duì)象使其能支持仿真,對(duì)于自動(dòng)轉(zhuǎn)換的Verilog 代碼或者VHDL 代碼,MyHDL 還可作為硬件校驗(yàn)語(yǔ)言來(lái)對(duì)轉(zhuǎn)換后的Verilog或VHDL進(jìn)行協(xié)同仿真和校驗(yàn).
3 采用MyHDL 的硬件設(shè)計(jì)優(yōu)點(diǎn)
Verilog和VHDL是當(dāng)前的主流硬件設(shè)計(jì)語(yǔ)言,但是使用基于Python的MyHDL作為硬件設(shè)計(jì)也具有許多優(yōu)點(diǎn)使得其可以作為設(shè)計(jì)者特別是硬件設(shè)計(jì)的初學(xué)者另外一種較好的選擇.
3.1 MyHDL使用成本低
MyHDL是免費(fèi)的并且開(kāi)源,在使用MyHDL設(shè)計(jì)的工具鏈中同樣可以使用大量的免費(fèi)工具比如ICArus,IVERILOG仿真工具,GTKWAVE查看仿真波形,從而可以減少設(shè)計(jì)成本.
3.2 在硬件設(shè)計(jì)中使用先進(jìn)的軟件開(kāi)發(fā)技術(shù)
由于Python本身是一種軟件開(kāi)發(fā)語(yǔ)言,現(xiàn)代軟件開(kāi)發(fā)的先進(jìn)方法比如快速應(yīng)用開(kāi)發(fā),測(cè)試驅(qū)動(dòng)開(kāi)發(fā)都在Python上得以體現(xiàn),由于硬件描述語(yǔ)言的硬件設(shè)計(jì)和軟件開(kāi)發(fā)具有一定的相似性,采用MyHDL可以使用最新的軟件開(kāi)發(fā)技術(shù).
3.3 軟硬件設(shè)計(jì)可以采用同樣的開(kāi)發(fā)環(huán)境
Python是算法實(shí)現(xiàn)的一種理想的語(yǔ)言,很多算法都由Python實(shí)現(xiàn),通常算法的軟硬件實(shí)現(xiàn)由不同工程師來(lái)實(shí)現(xiàn),軟件工程師使用Python,硬件工程師使用通用的硬件描述語(yǔ)言,例如Verilog或VHDL,硬件工程師和軟件工程師之間存在一條鴻溝,而采用MyHDL,就可以在同一個(gè)Python環(huán)境實(shí)現(xiàn)算法設(shè)計(jì),仿真和校驗(yàn).
3.4 其他優(yōu)點(diǎn)
對(duì)于沒(méi)有一定硬件設(shè)計(jì)經(jīng)驗(yàn)的設(shè)計(jì)者,通常采用Verilog 設(shè)計(jì)會(huì)混淆阻塞和非阻塞賦值,不清楚Verilog的符號(hào)運(yùn)算,采用VHDL進(jìn)行設(shè)計(jì)又不理解VHDL的信號(hào)概念,會(huì)覺(jué)得VHDL的類型和位寬轉(zhuǎn)換很繁瑣,但是如果采用基于Python 的MyHDL 包作為設(shè)計(jì)語(yǔ)言,這些都將不成為問(wèn)題.
4 基于Python 的軟硬件設(shè)計(jì)流程
在現(xiàn)代系統(tǒng)設(shè)計(jì)中,軟件工程師采用Python等高級(jí)語(yǔ)言,而硬件系統(tǒng)設(shè)計(jì)多采用Verilog,VHDL硬件描述語(yǔ)言,在如何將Python描述的軟件映射為相應(yīng)的硬件上,軟硬件開(kāi)發(fā)者之間的交流存在一道天然的鴻溝,而采用Py-thon來(lái)進(jìn)行軟硬件協(xié)同設(shè)計(jì)就可以解決這一個(gè)問(wèn)題,基于Python的軟硬件協(xié)同設(shè)計(jì)的流程如圖1所示.
首先采用Python進(jìn)行系統(tǒng)設(shè)計(jì),然后根據(jù)系統(tǒng)性能要求進(jìn)行軟硬件劃分,對(duì)于系統(tǒng)性能要求比較高的部分采用Python的MyHDL擴(kuò)展包的形式來(lái)由硬件實(shí)現(xiàn),同時(shí)采用Python來(lái)編寫硬件測(cè)試平臺(tái).測(cè)試仿真如果不符合系統(tǒng)設(shè)計(jì)要求可以重新進(jìn)行軟硬件劃分,如果測(cè)試仿真結(jié)果不正確,可重新修改.仿真通過(guò)后可以用MyHDL擴(kuò)展包自動(dòng)將Python轉(zhuǎn)換為Verilog代碼,這時(shí)的Python測(cè)試平臺(tái)無(wú)需修改還可以與轉(zhuǎn)換后的Verilog代碼一起進(jìn)行混合仿真,如果仿真通過(guò)就可以進(jìn)行硬件的綜合,下載,測(cè)試階段,這與傳統(tǒng)的硬件設(shè)計(jì)過(guò)程相同.
5 結(jié)語(yǔ)
從上面分析可以看出基于Python的MyHDL既是一種軟硬件協(xié)同設(shè)計(jì)方法,同時(shí)其也是Python的擴(kuò)展包,使得整個(gè)開(kāi)發(fā)過(guò)程僅使用一種Python語(yǔ)言,并可以很方便地將一個(gè)軟件算法快速地轉(zhuǎn)換為其相應(yīng)的硬件實(shí)現(xiàn),從而完成一個(gè)軟硬件系統(tǒng)設(shè)計(jì).由于Python目前的可綜合子集的限制和其本身還處在發(fā)展階段,基于Python的軟硬件設(shè)計(jì)還主要用于系統(tǒng)的建模方面,將其用于芯片設(shè)計(jì)的應(yīng)用還不是很多,有研究者比較過(guò)MyHDL與傳統(tǒng)硬件設(shè)計(jì)語(yǔ)言的實(shí)現(xiàn),對(duì)于小規(guī)模的應(yīng)用優(yōu)勢(shì)不是很明顯.但是隨著現(xiàn)代系統(tǒng)的算法越來(lái)越復(fù)雜性,系統(tǒng)規(guī)模也不斷增大,相對(duì)于傳統(tǒng)的軟硬件設(shè)計(jì)方法采用Python來(lái)進(jìn)行軟硬件協(xié)同設(shè)計(jì)的優(yōu)勢(shì)就會(huì)體現(xiàn)出來(lái),系統(tǒng)設(shè)計(jì).仿真.校驗(yàn)的速度會(huì)大大提高,采用Python進(jìn)行系統(tǒng)設(shè)計(jì)的產(chǎn)品能更快地進(jìn)入市場(chǎng).隨著基于Python系統(tǒng)設(shè)計(jì)方法和工具的發(fā)展,基于Python的軟硬件協(xié)同設(shè)計(jì)方法將會(huì)有廣泛的應(yīng)用前景.
-
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1951瀏覽量
35023 -
C++
+關(guān)注
關(guān)注
22文章
2114瀏覽量
73899 -
python
+關(guān)注
關(guān)注
56文章
4811瀏覽量
85080
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論