專利名稱:一種集成電路的高級綜合方法
技術(shù)領(lǐng)域:
本發(fā)明涉及集成電路設(shè)計(jì)技術(shù)領(lǐng)域,尤其涉及一種集成電路的高級綜合方法。
背景技術(shù):
隨著通信、計(jì)算機(jī)、消費(fèi)電子等領(lǐng)域的快速發(fā)展,對承載這些應(yīng)用的硬件系統(tǒng)在性能、功耗、成本、上市時(shí)間、靈活性、可擴(kuò)展性等方面提出了更高的要求,傳統(tǒng)的設(shè)計(jì)方法如 ASIC (Application Specific Intergrated Circuits,專用集成電路),DSP (Digital Signal Processing,數(shù)字信號處理器)/CPU 以及 FPGA (Field Programmable Gate Array, 現(xiàn)場可編程門陣列)都面臨著一些問題。ASIC設(shè)計(jì)的復(fù)雜性和規(guī)模不斷提升,使得ASIC設(shè)計(jì)成本增加,設(shè)計(jì)周期變長,同時(shí)由于不具靈活性,不可擴(kuò)展,產(chǎn)品的快速上市和低成本的需求使得ASIC設(shè)計(jì)遇到了瓶頸。而CPU/DSP依靠復(fù)雜的體系結(jié)構(gòu)和指令系統(tǒng)的方法得到性能提升所需要付出的代價(jià)越來越大,單個(gè)處理器的處理能力已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足當(dāng)前應(yīng)用的需要。FPGA作為并行計(jì)算較早的應(yīng)用,它的性能和能耗比介于ASIC和DSP/CPU之間,具有一定的靈活性,可反復(fù)編程, 能夠滿足快速上市和低成本的應(yīng)用需求。但是FPGA的設(shè)計(jì)并不支持從算法到硬件的直接映射,設(shè)計(jì)需要算法人員和硬件人員的共同參與,硬件描述語言的抽象層次較低,應(yīng)用的開發(fā)仍然存在著很大的復(fù)雜性。北京大學(xué)深圳研究生院集成微系統(tǒng)實(shí)驗(yàn)室提出的一種基于并行計(jì)算技術(shù)的統(tǒng)一架構(gòu)的可重構(gòu)算子陣列結(jié)構(gòu),圖1為APU(Array Processing for UnificationArchitecture)的總體結(jié)構(gòu)圖。該APU結(jié)構(gòu)1000由算術(shù)類可重構(gòu)算子1001、 路徑類可重構(gòu)算子1002、調(diào)度類可重構(gòu)算子1003、DSP類可重構(gòu)算子1004、存儲類可重構(gòu)算子1005以及101006組成。在APU結(jié)構(gòu)1000的內(nèi)部,算術(shù)類可重構(gòu)算子1001、路徑類可重構(gòu)算子1002、調(diào)度類可重構(gòu)算子1003、DSP類可重構(gòu)算子1004、存儲類可重構(gòu)算子1005按照一定的比例,按照類型獨(dú)立地以列為單位,分布式交叉排列。APU支持大量數(shù)據(jù)并行/串行的運(yùn)算和傳輸需求,并且能夠支撐多種應(yīng)用實(shí)現(xiàn)的需要。APU應(yīng)用設(shè)計(jì)描述語言為高級語言,抽象層次較高,縮短了應(yīng)用開發(fā)時(shí)間。故須引入對應(yīng)的高級綜合方法以實(shí)施應(yīng)用。常規(guī)的高級綜合方法根據(jù)輸入文件和約束文件只能生成對應(yīng)的數(shù)字電路信息,生成的數(shù)字電路信息通常只能在FPGA上實(shí)施或轉(zhuǎn)換為對應(yīng)的ASIC。常規(guī)高級綜合方法把輸入文件的語言元素轉(zhuǎn)換成⑶TO (Control Data FlowGraph,數(shù)據(jù)控制流圖),再給每個(gè)CDTO節(jié)點(diǎn)分配對應(yīng)的時(shí)間節(jié)點(diǎn)信息,輸出文件的發(fā)射過程把CDre對應(yīng)的時(shí)間節(jié)點(diǎn)信息轉(zhuǎn)換成數(shù)字電路的狀態(tài)機(jī)信息。由于數(shù)字電路狀態(tài)機(jī)的狀態(tài)切換有一定時(shí)間間隔,所以常規(guī)高級綜合方法相當(dāng)于通過時(shí)間標(biāo)識調(diào)度輸入文件所描述的系統(tǒng),執(zhí)行效率和靈活性都很難拓展。
發(fā)明內(nèi)容
本發(fā)明要解決的主要技術(shù)問題是,提供一種集成電路的高級綜合方法,其輸出具有多目標(biāo)性,且具有靈活、可執(zhí)行性高、執(zhí)行效率高的特點(diǎn),同時(shí)其輸出既可以在可重構(gòu)算子陣列上實(shí)施,也可以下載到FPGA或ASIC上實(shí)施。為解決上述技術(shù)問題,本發(fā)明采用的技術(shù)方案如下一種集成電路的高級綜合方法,包括步驟輸入描述數(shù)字電路的高級語言輸入文件,并進(jìn)行綜合約束設(shè)置;根據(jù)所述數(shù)字電路的高級語言輸入文件和綜合約束,生成第一中間語言,所述第一中間語言的每一條語句代表一個(gè)特定的數(shù)字電路結(jié)構(gòu)及各數(shù)字電路結(jié)構(gòu)間的連接關(guān)系;將所述第一中間語言轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件,并下載至所述可重構(gòu)算子陣列中實(shí)施,或者將所述第一中間語言轉(zhuǎn)換為對應(yīng)的硬件描述文件,并根據(jù)所述硬件描述文件生成相應(yīng)的數(shù)字電路。進(jìn)一步地,生成所述第一中間語言包括步驟將輸入的所述高級語言輸入文件和綜合約束進(jìn)行預(yù)綜合,生成第三中間語言,所述第三中間語言為由帶有列表接口的語句塊或者帶有列表接口的嵌套語句塊構(gòu)成的主函數(shù);將所述第三中間語言進(jìn)行綜合前端,綜合生成抽象語法樹,所述抽象語法樹包含所述高級語言輸入文件所描述的語句塊信息、語句塊之間接口信息與輸入文件所描述的數(shù)字電路系統(tǒng)輸入輸出接口信息的;遍歷所述抽象語法樹,并按照預(yù)定的綜合策略轉(zhuǎn)換為第二中間語言,所述第二中間語言的每一條語句都代表一個(gè)功能模塊與此功能模塊與其他模塊的連接關(guān)系;將所述第二中間語言進(jìn)行綜合后端,生成第一中間語言。進(jìn)一步地,所述預(yù)定的綜合策略包括綜合后輸出系統(tǒng)的運(yùn)算速度、功率消耗、實(shí)際使用的電路面積、各類電路資源相對比例、目標(biāo)可重構(gòu)算子陣列的硬件結(jié)構(gòu)、輸入文件語言格式、電路資源使用策略。進(jìn)一步地,所述抽象語法樹包括根節(jié)點(diǎn);第一節(jié)點(diǎn),用于存儲所述高級語言輸入文件所描述系統(tǒng)的輸入輸出信息;第二節(jié)點(diǎn),用于存儲高級語言輸入文件中的全局變量或數(shù)組的聲明信息;第三節(jié)點(diǎn),用于存儲高級語言輸入文件中的所有函數(shù)的信息,所述第一節(jié)點(diǎn)、第二節(jié)點(diǎn)和第三節(jié)點(diǎn)均與所述根節(jié)點(diǎn)相連,則遍歷所述抽象語法樹生成所述第二中間語言包括步驟讀取抽象語法樹的每一個(gè)節(jié)點(diǎn),得到每一個(gè)節(jié)點(diǎn)的信息;收集抽象語法樹中與函數(shù)語句塊相關(guān)的信息,并存儲;根據(jù)所述節(jié)點(diǎn)信息和函數(shù)信息,檢查所述抽象語法樹生成是否正確,如是,則根據(jù)讀取的節(jié)點(diǎn)信息發(fā)射第二中間語言。進(jìn)一步地,對所述第一中間語言進(jìn)行仿真包括步驟在仿真系統(tǒng)啟動時(shí)配置仿真系統(tǒng)運(yùn)行參數(shù),包括輸入待仿真的第一中間語言、輸入仿真數(shù)據(jù)文件、輸出仿真數(shù)據(jù)文件、仿真系統(tǒng)運(yùn)行時(shí)間等;讀取輸入待仿真的第一中間語言的系統(tǒng)描述文件,生成系統(tǒng)描述文件中描述的各子模塊;
將輸入仿真數(shù)據(jù)文件中的數(shù)據(jù)輸入到系統(tǒng)的數(shù)據(jù)存儲容器中,等待各子模塊啟動;讀取輸入待仿真的系統(tǒng)描述文件,連接生成的所述所有子模塊;啟動整個(gè)仿真的運(yùn)行,即啟動所有子模塊工作;輸出仿真數(shù)據(jù)文件中所描述的輸出數(shù)據(jù)到指定文件。進(jìn)一步地,將所述第一中間語言轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件包括步驟根據(jù)所述第一中間語言在可重構(gòu)算子陣列上進(jìn)行布局布線;對布局布線后的可重構(gòu)算子陣列進(jìn)行仿真與驗(yàn)證;將經(jīng)過驗(yàn)證后的輸出的文件轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件。進(jìn)一步地,根據(jù)所述第一中間語言再可重構(gòu)算子陣列上進(jìn)行布局布線包括步驟根據(jù)所述第一中間語言的每條語句中的特定數(shù)字電路結(jié)構(gòu)確定其在可重構(gòu)算子陣列中的實(shí)施位置;再根據(jù)所述第一中間語言的各個(gè)語句中各特定數(shù)字電路結(jié)構(gòu)之間的連接關(guān)系,確定完成各特定的數(shù)字電路結(jié)構(gòu)之間的連接關(guān)系所消耗的電路資源情況。進(jìn)一步地,所述第一中間語言的每一條語句包括功能信息和連接信息,則將所述第一中間語言轉(zhuǎn)換為相應(yīng)的硬件描述文件包括步驟主要讀取所述第一中間語言的功能信息和連接信息;根據(jù)所述功能信息查找硬件描述語言模型庫,得到相應(yīng)的硬件描述語言描述;結(jié)合所述連接信息,生成相應(yīng)的硬件描述語言文件。本發(fā)明的有益效果是本發(fā)明的高級綜合方法,包括輸入描述數(shù)字電路的高級語言輸入文件,并對其進(jìn)行綜合約束設(shè)置;再根據(jù)所述數(shù)字電路的高級語言輸入文件和綜合約束,生成第一中間語言,所述第一中間語言的每一條語句代表一個(gè)特定的數(shù)字電路結(jié)構(gòu)及各數(shù)字電路結(jié)構(gòu)間的連接關(guān)系;然后將所述第一中間語言轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件,并下載至所述可重構(gòu)算子陣列中實(shí)施,或者將所述第一中間語言轉(zhuǎn)換為對應(yīng)的硬件描述文件,并根據(jù)所述硬件描述文件生成相應(yīng)的數(shù)字電路。本發(fā)明的高級綜合方法通過生成第一中間語言,再由該第一中間語言生成可重構(gòu)算子陣列可執(zhí)行文件,從而把高級語言輸入文件所描述的系統(tǒng)下載到可重構(gòu)算子陣列上實(shí)施,或者根據(jù)該第一中間語言生成硬件描述文件,從而把高級語言輸入文件所描述的系統(tǒng)下載到FPGA或ASIC上實(shí)施,即本發(fā)明的高級綜合方法的輸出具有多目標(biāo)性,且靈活性、可執(zhí)行性高、執(zhí)行效率高。另一方面,本發(fā)明的高級綜合方法,通過將高級輸入文件轉(zhuǎn)換為抽象層次高的第三中間語言,再由該第三中間語言轉(zhuǎn)換為抽象層次較低的第二中間語言,該第二中間語言接近于模塊化的數(shù)字電路描述,再由該第二中間語言轉(zhuǎn)換為第一中間語言,最后由該第一中間語言直接轉(zhuǎn)換為硬件描述語言或可重構(gòu)算子陣列。本發(fā)明采用模塊化思想的第一中間語言、第二中間語言和第三中間語言作為轉(zhuǎn)換過程的中間表示形式,并著重描述具有一定功能模塊的特性與模塊間的連接關(guān)系和通信關(guān)系。這種高級綜合過程通過模塊特性、模塊間的連接關(guān)系和模塊間的通信機(jī)制來調(diào)度高級語言輸入文件所描述的系統(tǒng),從而生成的可重構(gòu)算子陣列配置信息或者數(shù)字電路信息靈活、可執(zhí)行性高,且執(zhí)行效率高。
圖1為一種可重構(gòu)算子陣列的結(jié)構(gòu)示意圖;圖2為本發(fā)明的集成電路的高級綜合方法的一種實(shí)施例的流程圖;圖3為本發(fā)明的集成電路的高級綜合方法中生成第一中間語言的一種實(shí)施例的流程圖;圖4為本發(fā)明的集成電路的高級綜合方法中生成的第三中間語言的語言結(jié)構(gòu)的一種實(shí)施例的示意圖;圖5為本發(fā)明的集成電路的高級綜合方法中生成的第三中間語言的語句塊的組成結(jié)構(gòu)的一種實(shí)施例的示意圖;圖6a和圖6b分別為本發(fā)明的高級語言輸入文件的一種實(shí)施例,和由高級語言輸入文件對應(yīng)生成的第三中間語言的一種實(shí)施例;圖7為本發(fā)明的對高級語言輸入文件進(jìn)行預(yù)綜合的一種實(shí)施例的流程圖;圖8為本發(fā)明的集成電路的高級綜合方法中生成的抽象語法樹的總結(jié)構(gòu)的一種實(shí)施例的示意圖;圖9為圖本發(fā)明的集成電路的高級綜合方法中生成的第三節(jié)點(diǎn)的子節(jié)點(diǎn)的組成結(jié)構(gòu)的一種實(shí)施例的示意圖;圖10為本發(fā)明的集成電路的高級綜合方法中生成第二中間語言的一種實(shí)施例的流程圖;圖11為本發(fā)明的集成電路的高級綜合方法中生成的抽象語法樹的一種具體實(shí)施例的結(jié)構(gòu)示意圖;圖12為本發(fā)明的集成電路的高級綜合方法中對生成的第一中間語言進(jìn)行仿真的一種實(shí)施例的流程圖;圖13a和圖1 分別為本發(fā)明的集成電路的高級綜合方法中生成的第二中間語言描述文件的一種實(shí)施例,和由該第二中間語言描述文件生成的第一中間語言描述文件的一種實(shí)施例;圖14為本發(fā)明的集成電路的高級綜合方法中對生成的第一中間語言進(jìn)行仿真的一種實(shí)施例的流程圖;圖15為本發(fā)明的集成電路的高級綜合方法中生成可重構(gòu)算子陣列可執(zhí)行文件的一種實(shí)施例的流程圖;圖16為本發(fā)明的集成電路的高級綜合方法中生成硬件描述語言文件的一種實(shí)施例的流程圖;圖17a和圖17b分別為本發(fā)明的集成電路的高級綜合方法生成的第一中間語言描述文件的一種實(shí)施例,和由該第一中間語言描述文件轉(zhuǎn)換為硬件描述文件的一種實(shí)施例。
具體實(shí)施例方式下面通過具體實(shí)施方式
結(jié)合附圖對本發(fā)明作進(jìn)一步詳細(xì)說明。請參考圖2,本實(shí)施方式的集成電路的高級綜合方法,包括步驟Si,輸入描述數(shù)字電路的高級語言輸入文件。本實(shí)施方式中的高級語言輸入文件為描述數(shù)字電路情況的輸入文件,其可以為C語言或者其他高級語言,如Java,C++, Matlab等。S2,進(jìn)行綜合約束設(shè)置。本實(shí)施方式中的綜合約束以文件輸入或者鍵盤輸入等人機(jī)界面實(shí)現(xiàn)。本實(shí)施方式通過綜合約束設(shè)置約束了系統(tǒng)設(shè)計(jì)輸出的運(yùn)算速度、功率消耗、實(shí)際使用的電路面積、各類電路資源相對比例、目標(biāo)可重構(gòu)算子陣列的硬件結(jié)構(gòu)、輸入文件語言格式、電路資源使用策略。其中,電路資源使用策略是指在實(shí)現(xiàn)同樣功能的情況下,在多種不同的電路資源使用方案中的選擇策略,不同的方案間使用的電路模塊類型和不同電路模塊類型之間的比例都不一樣。S3,根據(jù)數(shù)字電路的高級語言輸入文件和綜合約束,生成第一中間語言。本實(shí)施方中的第一中間語言的每一條語句代表一個(gè)特定的數(shù)字電路結(jié)構(gòu)及各數(shù)字電路結(jié)構(gòu)間的連接關(guān)系。請參考圖3,本實(shí)施方式中,步驟S3中由高級語言輸入文件生成第一中間語言包括步驟S31,將輸入的高級語言輸入文件和綜合約束進(jìn)行預(yù)綜合,生成第三中間語言。即將高級語言輸入文件轉(zhuǎn)換為由帶有列表接口的語句塊或者帶有列表接口的嵌套語句塊構(gòu)成的主函數(shù),即第三中間語言。本實(shí)施方式中的抽象句法樹是一個(gè)樹型的數(shù)據(jù)存儲結(jié)構(gòu),它包含數(shù)字電路情況的高級語言輸入文件所描述的語句塊信息、語句塊之間接口信息與輸入文件所描述的數(shù)字電路系統(tǒng)輸入輸出接口信息。請參考圖4,為本實(shí)施方式的第三中間語言的語言結(jié)構(gòu)圖,最頂層的描述是主函數(shù)塊301,主函數(shù)301完成了對高級語言輸入文件所描述系統(tǒng)的描述。該主函數(shù)301中包含了各子語句塊302,高層的語句塊302可以由底層的語句塊302組成,其中,最底層子語句塊 302由各語句303或各類控制結(jié)構(gòu)304組成。當(dāng)然,本實(shí)施方式中的語句塊302之間還可互相嵌套,如圖5所示。本實(shí)施方式中的語句303可以是常數(shù)賦值語句,即把一個(gè)常數(shù)賦值給一個(gè)變量; 該語句303也可以是運(yùn)算賦值語句,即把某些變量運(yùn)算的結(jié)果賦值給一個(gè)變量。在本實(shí)施方式的第三中間語言一種具體實(shí)施例中
8const 1=2; const2=4;
if (ipl>ip2) #info (op2 ; op3 ; opl ; ip3, ip4 ; ip3, ip4 ; ip3, ip4) {
opl=ip3+ip4; op2=ip3 * ip4 * const 1;
}
else
{
opl=ip3-ip4; op3 =ip3+ip4 * const2 ;
}其中"const2 = 4 ;,,即為常數(shù)賦值語句303 ;"opl = ip3+ip4 ;,,即為運(yùn)算賦值語句303。請參考圖4,本實(shí)施方式中的控制結(jié)構(gòu)304分為分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和復(fù)用結(jié)構(gòu)。 其中分支結(jié)構(gòu)由if語句塊實(shí)現(xiàn),循環(huán)結(jié)構(gòu)由while語句塊實(shí)現(xiàn),復(fù)用結(jié)構(gòu)由函數(shù)實(shí)現(xiàn)。該控制結(jié)構(gòu)304主要包括控制結(jié)構(gòu)的關(guān)鍵字,控制結(jié)構(gòu)的執(zhí)行體,該執(zhí)行體描述控制結(jié)構(gòu)的功能,以及列表接口 305,列表接口 305由變量或數(shù)組以一定的集合組成。請參考圖5,本實(shí)施方式中的列表接口 305用于描述語句塊和語句塊之間的接口信息,語句塊之間通過該列表接口 305進(jìn)行通信。本實(shí)施方式中的循環(huán)結(jié)構(gòu)由第三中間語言實(shí)現(xiàn)的一種具體實(shí)施例中
while (i==const) #info (a, i; b, const; const; i) {
a=b+i; i=i+c_l ;
}其中,while為關(guān)鍵字,代表循環(huán);"{a = b+i ;i = i+c_l ;} ”即為該控制結(jié)構(gòu)304 的執(zhí)行體,描述了該控制結(jié)構(gòu)304的功能;“#inf0(a,i ;b,const ;const ;i) ”即為該控制結(jié)構(gòu)304的列表接口。請參考圖6a,為輸入高級語言輸入文件的一種實(shí)施例的節(jié)選,其中opl,op2, op3, wr_tmpl, wr_tmp2等變量均為全局變量,數(shù)組a_ar []、b_ar []均為全局?jǐn)?shù)組。請參考圖7, 對圖6a所示的輸入高級語言文件進(jìn)行預(yù)綜合,從而轉(zhuǎn)換為第三中間語言的一種具體實(shí)施例包括步驟S701、檢測該高級語言輸入文件。S702、當(dāng)檢測到上述的子函數(shù)testFun后,檢測該子函數(shù)testFun中被讀取的數(shù)組,即出現(xiàn)在“=”的右邊的數(shù)組,并根據(jù)該數(shù)組相應(yīng)生成列表接口的第一個(gè)元素a_ar。S703,檢測該子函數(shù)testFun中被寫入的數(shù)組,即出現(xiàn)在”=”左邊的數(shù)組,并根據(jù)該數(shù)據(jù)生成列表接口的第二個(gè)元素b_ar。S704,檢測被賦予子函數(shù)testFun的返回值的變量,并根據(jù)該變量生成列表接口的第三個(gè)元素opl。S705,檢測該子函數(shù)testFun中,完成寫入或讀取數(shù)組操作的變量,并根據(jù)該變量生成相應(yīng)的列表接口的第四個(gè)元素wr_tmpl,wr_tmp2, χ, y。S706,生成對應(yīng)的第三中間語言描述文件,如圖6b所示S32,將生成的第三中間語言進(jìn)行綜合前端,綜合生成抽象語法樹。請參考圖8,為本實(shí)施方式中的抽象語法樹AST的總結(jié)構(gòu),包括整個(gè)程序的根節(jié)點(diǎn) programSOl ;第一節(jié)點(diǎn)802的子節(jié)點(diǎn)存儲了步驟Sl中高級語言輸入文件所描述系統(tǒng)的輸入輸出信息;第二節(jié)點(diǎn)803存儲了步驟Sl中高級語言輸入文件中的全局變量或數(shù)組的聲明信息,全局變量或數(shù)組是指在所有函數(shù)中都有效的變量或數(shù)組;第三節(jié)點(diǎn)804存儲了步驟Sl 中高級語言輸入文件中的所有函數(shù)的信息。請參考圖9,其中第三節(jié)點(diǎn)804是由多個(gè)節(jié)點(diǎn)901組成,節(jié)點(diǎn)901的第一子節(jié)點(diǎn)902 包含了函數(shù)返回值的類型信息,第二子節(jié)點(diǎn)903包含了函數(shù)名稱信息,第三子節(jié)點(diǎn)904包含了函數(shù)形參信息,第四子節(jié)點(diǎn)905和第六子節(jié)點(diǎn)907包含了這個(gè)函數(shù)語句塊與其他語句塊接口信息,第五子節(jié)點(diǎn)906包含了函數(shù)體語句塊的信息。S33,遍歷上述抽象語法樹,并按照預(yù)定的綜合策略,將該抽象語法樹轉(zhuǎn)換為第二中間語言。本實(shí)施方式中的預(yù)定的綜合策略包括綜合后輸出系統(tǒng)的運(yùn)算速度、功率消耗、實(shí)際使用的電路面積、各類電路資源相對比例、目標(biāo)可重構(gòu)算子陣列的硬件結(jié)構(gòu)、輸入文件語言格式、電路資源使用策略。本實(shí)施方式中的第二中間語言的每一條語句都代表一個(gè)功能模塊與此功能模塊與其他模塊的連接關(guān)系。請參考圖10,本實(shí)施方式中步驟S33包括步驟S331,讀取AST樹的每一個(gè)節(jié)點(diǎn),從而得到每一個(gè)節(jié)點(diǎn)的信息。S332,收集AST中與函數(shù)語句塊相關(guān)的信息,并進(jìn)行存儲。S333,根據(jù)讀取的節(jié)點(diǎn)信息和收集的函數(shù)信息,檢查AST生成是否正確,如是,則進(jìn)行步驟S334,否則,系統(tǒng)停止,拋出異常警告用戶。S334,根據(jù)讀取的節(jié)點(diǎn)信息發(fā)射第二中間語言。S335,輸出第二中間語言。本實(shí)施方式中同類型的節(jié)點(diǎn)信息對應(yīng)了固定發(fā)射了一條或幾條第二中間語言或一條第二中間語言的某部分。請參考圖11,本實(shí)施方式中由AST轉(zhuǎn)換為對應(yīng)的第二中間語言的一種具體實(shí)施例中,AST的節(jié)點(diǎn)1301對應(yīng)“SUB8”,節(jié)點(diǎn)1302對應(yīng)“port8@205”,節(jié)點(diǎn)1303對應(yīng)“port8@177”,節(jié)點(diǎn)1304對應(yīng)“port8@238”,所以發(fā)射的第二中間語言的語句為M33 =SUBB port8il77,port8i2380本實(shí)施方式中由于第三中間語言的語言描述抽象層次高,類似于高級語言描述, 而第二中間語言的語言描述抽象層次較低,更接近于模塊化的數(shù)字電路描述,且第二中間語言的每一條語句都代表一個(gè)功能模塊與此功能模塊與其他模塊的連接關(guān)系,因此通過將第三中間語言轉(zhuǎn)換為第二中間語言來降低系統(tǒng)輸入文件的抽象層次,以便于后面將系統(tǒng)輸入文件轉(zhuǎn)換為相應(yīng)的可重構(gòu)算子陣列可執(zhí)行文件或者相應(yīng)的硬件描述。S34,將第二中間語言進(jìn)行綜合后端,生成第一中間語言,并進(jìn)行仿真。本實(shí)施方式中的第二中間語言的描述抽象層次,雖然低于類似于高級語言的第三中間語言,但是不能直接轉(zhuǎn)換成硬件描述語言或可重構(gòu)算子陣列可執(zhí)行文件。本實(shí)施方式通過將第二中間語言轉(zhuǎn)換為第一中間語言,即通過降低第二中間語言的抽象層次,從而第一中間語言可以直接轉(zhuǎn)換成硬件描述語言或可重構(gòu)算子陣列。請參考圖12,本實(shí)施方式的將第二中間語言進(jìn)行綜合后端,生成第一中間語言包括步驟S341,分解第二中間語言的運(yùn)算粒度到更低的層次。S342,轉(zhuǎn)換第二中間語言中功能模塊到第一中間語言,且功能等效。S;343,插入對應(yīng)通信單元。本實(shí)施方式中,由于在第二中間語言中描述的抽象層次較高,部分模塊連接的通信機(jī)制在硬件上無法直接實(shí)現(xiàn),因此需加入一定的通信單元。S344,修改模塊間連接信號的編號。本實(shí)施方式中,由于加入了新的通信單元,各個(gè)功能模塊間的連接不能直接套用第二中間語言的形式,因此,需要對負(fù)責(zé)功能模塊間連接的信號進(jìn)行重新編號。請參考圖13a,為本實(shí)施方的一種實(shí)施例中,通過遍歷抽象語法樹,生成的第二中間語言描述文件。請參考圖13b,為對圖13a的第二中間語言描述文件進(jìn)行綜合后端,得到的第三中間語言描述文件。其中,圖13a的第二中間語言描述文件中的一條16位加法語句(即兩個(gè)十六位數(shù)相加):M1 =AND 16port32il, port32i2, port32@3,經(jīng)過降低其粒度, 轉(zhuǎn)換為了第三中間語言描述中的兩條8位加法語句分別為M1 =AND portil_l, porti2_l, porti3_l, Ml :AND portil_2, porti2_2, porti3_2 ;其中,由于該第二中間語言描述文件中的語句M3 :-8C0NU-16 port8i5, port6@6,不能夠直接拆分,對其進(jìn)行功能等效轉(zhuǎn)換為第三中間語言描述的語句為:M3 :BRD porti5_l, porti5_5, porti5_6, M3 :0R porti5_5, porti6_3, porti6_l, M3 =MOVI 127,porti6_4 ;其中,第三中間語言描述中的語句M4 :BRD porti9_l, port@9_3,是插入的通信單元,從而把原來第二中間語言中的port8@9信號廣播成了 2個(gè)信號,使p0rt8@9中的數(shù)據(jù)可以被更多模塊使用。請參考圖13a和圖13b,生成的第三中間語言中的信號編號發(fā)生了一定變化。本實(shí)施方式中的第一中間語言中每一條語句都代表一個(gè)特定的數(shù)字電路結(jié)構(gòu)及各數(shù)字電路結(jié)構(gòu)間的連接關(guān)系。這個(gè)特定的數(shù)字電路結(jié)構(gòu)既可以通過步驟S^和步驟Sfe 下載到可重構(gòu)算子陣列上實(shí)施,或者由步驟S4b和S^3后轉(zhuǎn)換成具體的數(shù)字電路。請參考圖14實(shí)施方式中對生成的第一中間語言進(jìn)行仿真包括步驟S341,在仿真系統(tǒng)啟動時(shí)配置仿真系統(tǒng)運(yùn)行參數(shù),包括輸入待仿真的系統(tǒng)描述文件、輸入仿真數(shù)據(jù)文件、輸出仿真數(shù)據(jù)文件、仿真系統(tǒng)運(yùn)行時(shí)間等。本實(shí)施方式中的待仿真的系統(tǒng)描述文件為由第一語言描述文件。S342,讀取輸入待仿真的系統(tǒng)描述文件,生成系統(tǒng)描述文件中描述的各子模塊。S343,將輸入仿真數(shù)據(jù)文件中的數(shù)據(jù)輸入到系統(tǒng)的數(shù)據(jù)存儲容器中,等待各子模塊啟動,這些數(shù)據(jù)即被釋放。S344,通過讀取輸入待仿真的系統(tǒng)描述文件,連接步驟S342中所生成的所有子模塊。S345,啟動整個(gè)仿真的運(yùn)行,即啟動所有子模塊工作。S346,輸出仿真數(shù)據(jù)文件中所描述的輸出數(shù)據(jù)到指定文件。S4a,將該第一中間語言轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件,并執(zhí)行步驟S5a。請參考圖15,本實(shí)施方式的步驟S^包括步驟S^l,根據(jù)第一中間語言在可重構(gòu)算子陣列上進(jìn)行布局布線。本實(shí)施方式中進(jìn)行布局布線包括步驟S4all,根據(jù)該第一中間語言的每條語句中的特定數(shù)字電路結(jié)構(gòu)確定其在可重構(gòu)算子陣列中的實(shí)施位置。S4al2,再根據(jù)第一中間語言的各個(gè)語句中各特定數(shù)字電路結(jié)構(gòu)之間的連接關(guān)系, 確定完成各特定的數(shù)字電路結(jié)構(gòu)之間的連接關(guān)系所消耗的電路資源情況。 本實(shí)施方式中的電路資源主要指硬件連線資源。S^2,對布局布線后的可重構(gòu)算子陣列進(jìn)行仿真與驗(yàn)證;S^3,將經(jīng)過驗(yàn)證后的輸出的文件轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件,并下載實(shí)施。S4b,將第一中間語言轉(zhuǎn)換為對應(yīng)的硬件描述文件,執(zhí)行步驟S5b。本實(shí)施方式中的第一中間語言的每一條語句包括功能信息和連接信息。請參考圖16,本實(shí)施方式將第一中間語言轉(zhuǎn)換為硬件描述文件包括步驟S4bl,轉(zhuǎn)換系統(tǒng)從由第一中間語言描述的輸入文件中主要讀取兩部分信息。一部分是第一中間語言中各條語句的功能信息;另一部分是第一中間語言中各條語句的連接信息,即語句間數(shù)據(jù)交換通路的信息。S4b2,在讀取到功能信息后,查找硬件描述語言模型庫,得到對應(yīng)功能信息的硬件描述語 .描述。S4b3,再結(jié)合連接信息,即可生成整個(gè)系統(tǒng)的硬件描述語言描述。S5a,調(diào)試可重構(gòu)算子陣列,并執(zhí)行步驟S6。S5b,根據(jù)該硬件描述文件生成相應(yīng)的數(shù)字電路。S6,輸出結(jié)果。請參考圖17a,為本實(shí)施方式的一種實(shí)施例中,由第二中間語言經(jīng)過綜合后端,生成的第一中間語言描述文件的節(jié)選。請參考圖17b,為將圖17a所示的第一中間語言轉(zhuǎn)換成硬件描述文件后的verilog。其中硬件描述文件中的功能模塊alu_operator u_alu_l和 alu_operator u_alu_2對應(yīng)第一中間語言ADD模塊和NOT模塊,第一中間語言中的連接關(guān)系在硬件描述文件中轉(zhuǎn)化為了 reg信號和wire信號(見verilog程序的開頭部分),硬件描述文件中通過對兩個(gè)模塊輸入不同的信號完成等同于第一中間描述的不同硬件功能的實(shí)現(xiàn)。
本發(fā)明的高級綜合方法通過綜合生成第一中間語言,再由第一中間語言生成相應(yīng)的可重構(gòu)算子可執(zhí)行文件或者硬件描述文件,從而輸出具有多目標(biāo)的特性,即既可以通過生成可重構(gòu)算子陣列可執(zhí)行文件把高級語言輸入文件所描述的系統(tǒng)下載到可重構(gòu)算子陣列上實(shí)施,又可以通過生成硬件描述文件把輸入文件所描述的系統(tǒng)下載到FPGA或ASIC上實(shí)施。另一方面,本發(fā)明的高級綜合方法,通過將高級輸入文件轉(zhuǎn)換為抽象層次高的第三中間語言,再由該第三中間語言轉(zhuǎn)換為抽象層次較低的第二中間語言,該第二中間語言接近于模塊化的數(shù)字電路描述,再由該第二中間語言轉(zhuǎn)換為第一中間語言,最后由該第一中間語言直接轉(zhuǎn)換為硬件描述語言或可重構(gòu)算子陣列。本發(fā)明采用模塊化思想的第一中間語言、第二中間語言和第三中間語言作為轉(zhuǎn)換過程的中間表示形式,并著重描述具有一定功能模塊的特性與模塊間的連接關(guān)系和通信關(guān)系。這種高級綜合過程通過模塊特性、模塊間的連接關(guān)系和模塊間的通信機(jī)制來調(diào)度高級語言輸入文件所描述的系統(tǒng),從而生成的可重構(gòu)算子陣列配置信息或者數(shù)字電路信息靈活、可執(zhí)行性高,且執(zhí)行效率高。以上內(nèi)容是結(jié)合具體的實(shí)施方式對本發(fā)明所作的進(jìn)一步詳細(xì)說明,不能認(rèn)定本發(fā)明的具體實(shí)施只局限于這些說明。對于本發(fā)明所屬技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干簡單推演或替換,都應(yīng)當(dāng)視為屬于本發(fā)明的保護(hù)范圍。
權(quán)利要求
1.一種集成電路的高級綜合方法,其特征在于,包括步驟 輸入描述數(shù)字電路的高級語言輸入文件,并進(jìn)行綜合約束設(shè)置;根據(jù)所述數(shù)字電路的高級語言輸入文件和綜合約束,生成第一中間語言,所述第一中間語言的每一條語句代表一個(gè)特定的數(shù)字電路結(jié)構(gòu)及各數(shù)字電路結(jié)構(gòu)間的連接關(guān)系;將所述第一中間語言轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件,并下載至所述可重構(gòu)算子陣列中實(shí)施,或者將所述第一中間語言轉(zhuǎn)換為對應(yīng)的硬件描述文件,并根據(jù)所述硬件描述文件生成相應(yīng)的數(shù)字電路。
2.如權(quán)利要求1所述的方法,其特征在于,生成所述第一中間語言包括步驟將輸入的所述高級語言輸入文件和綜合約束進(jìn)行預(yù)綜合,生成第三中間語言,所述第三中間語言為由帶有列表接口的語句塊或者帶有列表接口的嵌套語句塊構(gòu)成的主函數(shù);將所述第三中間語言進(jìn)行綜合前端,綜合生成抽象語法樹,所述抽象語法樹包含所述高級語言輸入文件所描述的語句塊信息、語句塊之間接口信息與輸入文件所描述的數(shù)字電路系統(tǒng)輸入輸出接口信息的;遍歷所述抽象語法樹,并按照預(yù)定的綜合策略轉(zhuǎn)換為第二中間語言,所述第二中間語言的每一條語句都代表一個(gè)功能模塊與此功能模塊與其他模塊的連接關(guān)系; 將所述第二中間語言進(jìn)行綜合后端,生成第一中間語言,并進(jìn)行仿真。
3.如權(quán)利要求2所述的方法,其特征在于,所述預(yù)定的綜合策略包括綜合后輸出系統(tǒng)的運(yùn)算速度、功率消耗、實(shí)際使用的電路面積、各類電路資源相對比例、目標(biāo)可重構(gòu)算子陣列的硬件結(jié)構(gòu)、輸入文件語言格式、電路資源使用策略。
4.如權(quán)利要求2所述的方法,其特征在于,所述抽象語法樹包括根節(jié)點(diǎn);第一節(jié)點(diǎn),用于存儲所述高級語言輸入文件所描述系統(tǒng)的輸入輸出信息;第二節(jié)點(diǎn),用于存儲高級語言輸入文件中的全局變量或數(shù)組的聲明信息;第三節(jié)點(diǎn),用于存儲高級語言輸入文件中的所有函數(shù)的信息,所述第一節(jié)點(diǎn)、第二節(jié)點(diǎn)和第三節(jié)點(diǎn)均與所述根節(jié)點(diǎn)相連,則遍歷所述抽象語法樹生成所述第二中間語言包括步驟讀取抽象語法樹的每一個(gè)節(jié)點(diǎn),得到每一個(gè)節(jié)點(diǎn)的信息; 收集抽象語法樹中與函數(shù)語句塊相關(guān)的信息,并存儲;根據(jù)所述節(jié)點(diǎn)信息和函數(shù)信息,檢查所述抽象語法樹生成是否正確,如是,則根據(jù)讀取的節(jié)點(diǎn)信息發(fā)射第二中間語言。
5.如權(quán)利要求2所述的方法,其特征在于,對所述第一中間語言進(jìn)行仿真包括步驟 在仿真系統(tǒng)啟動時(shí)配置仿真系統(tǒng)運(yùn)行參數(shù),包括輸入待仿真的第一中間語言、輸入仿真數(shù)據(jù)文件、輸出仿真數(shù)據(jù)文件、仿真系統(tǒng)運(yùn)行時(shí)間等;讀取輸入待仿真的第一中間語言的系統(tǒng)描述文件,生成系統(tǒng)描述文件中描述的各子模塊;將輸入仿真數(shù)據(jù)文件中的數(shù)據(jù)輸入到系統(tǒng)的數(shù)據(jù)存儲容器中,等待各子模塊啟動; 讀取輸入待仿真的系統(tǒng)描述文件,連接生成的所述所有子模塊; 啟動整個(gè)仿真的運(yùn)行,即啟動所有子模塊工作; 輸出仿真數(shù)據(jù)文件中所描述的輸出數(shù)據(jù)到指定文件。
6.如權(quán)利要求1所述的方法,其特征在于,將所述第一中間語言轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件包括步驟根據(jù)所述第一中間語言在可重構(gòu)算子陣列上進(jìn)行布局布線; 對布局布線后的可重構(gòu)算子陣列進(jìn)行仿真與驗(yàn)證; 將經(jīng)過驗(yàn)證后的輸出的文件轉(zhuǎn)換為可重構(gòu)算子可執(zhí)行文件。
7.如權(quán)利要求6所述的方法,其特征在于,根據(jù)所述第一中間語言再可重構(gòu)算子陣列上進(jìn)行布局布線包括步驟根據(jù)所述第一中間語言的每條語句中的特定數(shù)字電路結(jié)構(gòu)確定其在可重構(gòu)算子陣列中的實(shí)施位置;再根據(jù)所述第一中間語言的各個(gè)語句中各特定數(shù)字電路結(jié)構(gòu)之間的連接關(guān)系,確定完成各特定的數(shù)字電路結(jié)構(gòu)之間的連接關(guān)系所消耗的電路資源情況。
8.如權(quán)利要求1所述的方法,其特征在于,所述第一中間語言的每一條語句包括功能信息和連接信息,則將所述第一中間語言轉(zhuǎn)換為相應(yīng)的硬件描述文件包括步驟主要讀取所述第一中間語言的功能信息和連接信息;根據(jù)所述功能信息查找硬件描述語言模型庫,得到相應(yīng)的硬件描述語言描述;結(jié)合所述連接信息,生成相應(yīng)的硬件描述語言文件。
全文摘要
本發(fā)明公開了一種集成電路的高級綜合方法,通過綜合生成第一中間語言,再由第一中間語言生成相應(yīng)的可重構(gòu)算子可執(zhí)行文件或者硬件描述文件,從而輸出具有多目標(biāo)的特性,即既可以通過生成可重構(gòu)算子陣列可執(zhí)行文件把高級語言輸入文件所描述的系統(tǒng)下載到可重構(gòu)算子陣列上實(shí)施,又可以通過生成硬件描述文件把輸入文件所描述的系統(tǒng)下載到FPGA或ASIC上實(shí)施。
文檔編號G06F17/50GK102163248SQ20111008417
公開日2011年8月24日 申請日期2011年4月2日 優(yōu)先權(quán)日2011年4月2日
發(fā)明者吳承昊, 王新安, 藍(lán)晶, 雍珊珊, 龍曉波 申請人:北京大學(xué)深圳研究生院