本公開的實施例大體涉及集成電路(IC),更具體地說,涉及在高級綜合過程中提取用于電路設(shè)計的系統(tǒng)架構(gòu)。
背景技術(shù):
高級綜合是一種自動化設(shè)計過程,其根據(jù)電子系統(tǒng)的高級編程語言描述創(chuàng)建電路設(shè)計。電子系統(tǒng)的高級編程語言描述是一種算法描述。高級編程語言的例子包括但不限于C、C++、SystemC等。電子設(shè)計自動化(EDA)工具對高級編程語言描述進行操作,并生成電路設(shè)計。電路設(shè)計可以是使用硬件描述語言(HDL)說明的電子系統(tǒng)的寄存器傳輸級硬件描述。
在高級綜合的過程中,一個目的是識別可能引入并行的高級編程語言描述中的順序部分。當(dāng)被包含在電路設(shè)計中時,并行在得到的電路中提供了更高的資源利用效率和更好的系統(tǒng)性能。很多高級編程語言描述在本質(zhì)上是迭代的,并利用復(fù)雜的編程語言構(gòu)造,比如循環(huán)、數(shù)組等。從具有這些復(fù)雜構(gòu)造的高級編程語言描述中提取數(shù)據(jù)流架構(gòu)很困難,并且一般不會使用。
技術(shù)實現(xiàn)要素:
一種方法包括確定高級編程語言描述的第一函數(shù)和高級編程描述的控制流構(gòu)造中包含的第二函數(shù),確定第二函數(shù)是第一函數(shù)的數(shù)據(jù)消費函數(shù)(data consuming function),以及在電路設(shè)計中并且使用處理器,自動生成包括本地存儲器的端口。該端口在電路設(shè)計中將實施第一函數(shù)的第一電路模塊耦接至實施第二函數(shù)的第二電路模塊。
一種系統(tǒng),包括被編程以啟動可執(zhí)行操作的處理器。該可執(zhí)行操作包括確定高級編程語言描述的第一函數(shù)和高級編程描述的控制流構(gòu)造中包含的第二函數(shù),確定第二函數(shù)是第一函數(shù)的數(shù)據(jù)消費函數(shù),以及在電路設(shè)計中自動生成包括本地存儲器的端口。該端口在電路設(shè)計中將實施第一函數(shù)的第一電路模塊耦接至實施第二函數(shù)的第二電路模塊。
一種非瞬態(tài)計算機可讀存儲媒介包括儲存在其中的指令。該指令在被處理器執(zhí)行時,實施一種方法。該方法包括確定高級編程語言描述的第一函數(shù)和高級編程描述的控制流構(gòu)造中包含的第二函數(shù),確定第二函數(shù)是第一函數(shù)的數(shù)據(jù)消費函數(shù),以及在電路設(shè)計中使用處理器,自動生成包括本地存儲器的端口。該端口在電路設(shè)計中將實施第一函數(shù)的第一電路模塊耦接至實施第二函數(shù)的第二電路模塊。
通過參考以下具體實施方式和權(quán)利要求書,可以認(rèn)識本發(fā)明的其它特征。
附圖說明
圖1是說明了一種示例性數(shù)據(jù)處理系統(tǒng)的框圖;
圖2是說明了一種根據(jù)一種電子系統(tǒng)的高級編程語言描述(以下簡稱“描述”)創(chuàng)建電路設(shè)計的示例性方法的流程圖;
圖3-1和3-2是說明了根據(jù)一種電子系統(tǒng)的描述自動創(chuàng)建一種電路設(shè)計的框圖;
圖4-1和4-2是說明了根據(jù)一種電子系統(tǒng)的描述自動創(chuàng)建另一種電路設(shè)計的框圖;
圖5是說明了根據(jù)一種電子系統(tǒng)的描述自動創(chuàng)建另一種電路設(shè)計的框圖;
圖6是說明了根據(jù)一種電子系統(tǒng)的描述自動創(chuàng)建另一種電路設(shè)計的框圖;
圖7是說明了一種使用自同步端口(self-synchronized port)的電子系統(tǒng)的一種示例性描述;
圖8是說明了一種使用自同步端口的電子系統(tǒng)的另一種示例性描述;
圖9是用于集成電路的一種示例性架構(gòu)。
具體實施方式
盡管定義了新特征的權(quán)利要求書總結(jié)了本公開,可以相信本公開中描述的各種特征可以通過參考與附圖相關(guān)的描述得到更好的理解。這里描述的過程、機器、制造以及其它任何變化以說明目的被提供。本公開中描述的特定的結(jié)構(gòu)性和功能性的細(xì)節(jié)不應(yīng)被理解為限制,而只是作為權(quán)利要求書的基礎(chǔ),以及作為教導(dǎo)本領(lǐng)域技術(shù)人員以各種方式在幾乎任何適當(dāng)?shù)木唧w結(jié)構(gòu)中實施描述的特征的代表性的基礎(chǔ)。進一步地,本公開中使用的術(shù)語和詞匯不應(yīng)理解為限定性的,而是提供所描述特征的一種可理解的描述。
本公開涉及集成電路(IC),并且更具體地,涉及在高級綜合的過程中提取用于電路設(shè)計的系統(tǒng)架構(gòu)。依照本公開中描述的創(chuàng)造性設(shè)置,電子系統(tǒng)的高級編程語言描述被處理以生成用于該電子系統(tǒng)的電路設(shè)計。高級編程語言描述是一種算法描述,其可以包括各種控制流構(gòu)造中的任一種構(gòu)造,比如非嵌套循環(huán)、數(shù)組、調(diào)節(jié)控制結(jié)構(gòu)等。通過引入有助于數(shù)據(jù)依賴的時間行為(data-dependent timing behavior)的控制電路,控制流構(gòu)造被處理。電路設(shè)計的數(shù)據(jù)依賴的時間行為在各種電路模塊中控制和/或綜合,這些電路模塊通過使用可以由控制電路生成的控制信號生成。
得到的電路設(shè)計是電子系統(tǒng)的硬件描述。電路設(shè)計可以使用硬件描述語言說明。進一步地,電路設(shè)計支持電子系統(tǒng)的原始高級編程語言描述的程序代碼主體部分多個且同時地執(zhí)行。
在一方面,這里描述的創(chuàng)造性設(shè)置可以被作為數(shù)據(jù)處理系統(tǒng)執(zhí)行的方法或過程實施。在另一方面,這些創(chuàng)造性設(shè)置可以作為數(shù)據(jù)處理系統(tǒng)實施,其具有被編程以執(zhí)行或啟動生成這里所述的電路設(shè)計的可執(zhí)行操作的處理器。又一個方面,這些創(chuàng)造性設(shè)置可以被作為儲存程序代碼的非瞬態(tài)計算機可讀存儲媒介,這些程序代碼當(dāng)被執(zhí)行時使處理器和/或系統(tǒng)實施方法或過程。
下面給出在整個文件中應(yīng)用的一些定義。這里所定義的術(shù)語“自動地”表示是沒有用戶干預(yù)。這里所定義的術(shù)語“用戶”表示人類。
這里定義的術(shù)語“高級編程語言”表示用來描述一個數(shù)據(jù)處理系統(tǒng)的一組指令,例如,一個電子系統(tǒng),其中的指令往往是對所描述系統(tǒng)的細(xì)節(jié)進行了很強的抽象。高級編程語言可以隱藏所描述系統(tǒng)的操作的一些方面,比如存儲器管理或機器指令,并且可以使用高級編程語言寫出的程序轉(zhuǎn)換為各種系統(tǒng)。當(dāng)使用高級編程語言時,用戶可以但不需要明確地描述程序所要生成的系統(tǒng)的寄存器、存儲器地址、機器指令等。高級編程語言的例子包括但不限于C、C++、SystemC等。在一些例子中,特定數(shù)據(jù)處理系統(tǒng)的指令集可以被認(rèn)為是一種“高級編程語言”,當(dāng)它被轉(zhuǎn)換為替換的或不同的數(shù)據(jù)處理系統(tǒng)的指令集中表示的程序時。
這里定義的術(shù)語“控制流構(gòu)造”表示高級編程語言的一個或多個聲明(statement)或指令,其被執(zhí)行以導(dǎo)致對遵循兩個或更多數(shù)據(jù)流路徑中的哪些數(shù)據(jù)流路徑進行選擇??刂屏鳂?gòu)造與函數(shù)不同??刂屏鳂?gòu)造的一個例子是條件分支。條件分支指只有當(dāng)條件滿足時才執(zhí)行聲明,或執(zhí)行聲明直到條件滿足的情況。條件分支包括循環(huán)構(gòu)造、for-next構(gòu)造、do-until構(gòu)造、if-then構(gòu)造、if-then-else構(gòu)造等。
這里定義的術(shù)語“硬件描述語言”是有助于數(shù)字系統(tǒng)的文檔、設(shè)計以及實施的計算機語言。數(shù)字系統(tǒng)的實施可以包括從數(shù)字系統(tǒng)到一組用于IC制造的掩膜的轉(zhuǎn)換、可編程IC比如現(xiàn)場可編程門陣列(FPGA)的編程等。例如,通過使用HDL,用戶可以設(shè)計并指定電子電路,描述電路的操作,并創(chuàng)建測試以檢驗電路的操作。HDL包括設(shè)計的數(shù)字系統(tǒng)的空間和暫時結(jié)構(gòu)以及行為的標(biāo)準(zhǔn)的基于文本的表達。HDL語法和語義包括明確的引用以表達數(shù)字系統(tǒng)中同時進行的操作,以及同步同時進行操作的進程以實現(xiàn)特定的組合行為。在許多電路中,這種同步是基于一種全局可見的稱為“時鐘”的信號。然而,應(yīng)當(dāng)理解,用于在電路的不同部分間同步的其它機制也可以被提供。
正如這里定義的,術(shù)語“握手”或“握手通信”表示一種控制通信,其可以包括建立同步或通過交換特定特征配置和/或信號在發(fā)送和接收設(shè)備(例如電路)之間提供通知。握手可以使用一組與時鐘信號相關(guān)的信號實施,或者可以使用一組獨立于時鐘信號的信號實施(例如,“二相握手”),或者可以通過組合一組更原始的同步和通信的協(xié)議使用數(shù)據(jù)包或消息交換來實施。
為了說明的簡潔和清楚考慮,附圖中所示的元件不一定按照比例畫出。例如,一些元件的尺寸相比其它元件被放大了,以更清楚地表示。此外,在適當(dāng)?shù)那闆r下,在附圖之間參考編號重復(fù)出現(xiàn)以表示相應(yīng)的、類似的或相似的特征。
圖1是說明了一個示例性的數(shù)據(jù)處理系統(tǒng)(系統(tǒng))100的框圖。系統(tǒng)100包括至少一個處理器(例如中央處理器)105,其通過系統(tǒng)總線115或其它適合的電路耦接至存儲器元件110。系統(tǒng)100在存儲器元件110中儲存程序代碼。處理器105執(zhí)行通過系統(tǒng)總線115訪問存儲器元件110得到的程序代碼。然而,應(yīng)當(dāng)了解,系統(tǒng)100可以以任何能夠執(zhí)行本說明書所述功能的,包括處理器和存儲器的系統(tǒng)形式實施。
存儲器元件110包括一個或多個物理存儲器件,比如,本地存儲器120和一個或多個大容量存儲設(shè)備125。本地存儲器120指在執(zhí)行程序代碼時通常使用的隨機存取存儲器(RAM)或其它非持久性存儲設(shè)備。大容量存儲設(shè)備125可以由硬盤驅(qū)動器(HDD)、固態(tài)驅(qū)動器(SSD)或其它持久性數(shù)據(jù)存儲器件實現(xiàn)。系統(tǒng)100還可以包括一個或多個高速緩存(沒有示出),其為至少一些程序代碼提供臨時存儲,以減少在執(zhí)行過程中程序代碼必須從大容量存儲設(shè)備125中取出的次數(shù)。
輸入/輸出(I/O)設(shè)備比如鍵盤130、顯示設(shè)備135以及指點設(shè)備140可以有選擇地耦接到系統(tǒng)100。I/O設(shè)備可以直接或者通過中間I/O控制器耦接到系統(tǒng)100。網(wǎng)絡(luò)適配器145也可以被耦接到系統(tǒng)100,以使系統(tǒng)100可以通過中間專用或公用網(wǎng)絡(luò)耦接到其它系統(tǒng)、計算機系統(tǒng)、遠(yuǎn)程打印機和/或遠(yuǎn)程存儲設(shè)備。調(diào)制解調(diào)器、電纜調(diào)制解調(diào)器、以太網(wǎng)卡和無線收發(fā)機是系統(tǒng)100可以使用的不同種類的網(wǎng)絡(luò)適配器145的例子。
如圖1所示,存儲器元件110儲存電子設(shè)計自動化(EDA)應(yīng)用150。以可執(zhí)行程序代碼的形式實施的EDA應(yīng)用150可以被系統(tǒng)100執(zhí)行。這樣,EDA應(yīng)用150被認(rèn)為是系統(tǒng)100的一個組成部分。EDA應(yīng)用150根據(jù)收到的需要開發(fā)的電子系統(tǒng)的高級編程語言描述155運行。為方便澄清和討論,高級編程語言描述155被簡稱為“描述”155或電子系統(tǒng)的“描述”。使用高級編程語言說明的描述155是對電子系統(tǒng)的算法描述。描述155沒有說明需要使用的特定硬件。
EDA應(yīng)用150對算法描述155進行操作,并生成用于該電子系統(tǒng)的電路設(shè)計160。電路設(shè)計160是被描述155說明的電子系統(tǒng)的硬件描述。電路設(shè)計160可以由用HDL寫出或指定的寄存器傳輸級硬件描述說明。
包括描述155和/或電路設(shè)計160的EDA應(yīng)用150以及任意數(shù)據(jù)項,當(dāng)其被用為系統(tǒng)100的一部分或被進一步處理以實現(xiàn)在IC(無論是可編程IC、應(yīng)用專用IC、部分可編程IC還是不可編程的IC)中時,都是傳遞功能的功能性數(shù)據(jù)結(jié)構(gòu)。
圖2是說明了一種由一個電子系統(tǒng)的描述創(chuàng)建電路設(shè)計的示例性方法200的流程圖。方法200可以用一個系統(tǒng),比如圖1的系統(tǒng)100執(zhí)行。為了說明的目的,方法200被描述為處理一種控制流構(gòu)造。然而,應(yīng)當(dāng)了解,方法200可以被迭代地實施以處理描述中所識別的更多控制流構(gòu)造,或被調(diào)整以處理描述中所識別的多個控制流構(gòu)造。
在模塊205中,系統(tǒng)接收電子系統(tǒng)的描述以進行處理。該描述用高級編程語言說明。另外,該描述包括控制流構(gòu)造。在模塊210中,系統(tǒng)確認(rèn)描述中識別的函數(shù)。
在模塊215中,系統(tǒng)識別描述中的控制流構(gòu)造。在模塊220中,系統(tǒng)依照情況,確定哪種或哪些函數(shù)包含在控制流構(gòu)造中。在本說明書中,控制流構(gòu)造中包含的函數(shù)被稱為“目標(biāo)函數(shù)”。當(dāng)控制流構(gòu)造的執(zhí)行確定該目標(biāo)函數(shù)是否被執(zhí)行和/或目標(biāo)函數(shù)是否被執(zhí)行一定次數(shù)的(迭代)時,一個函數(shù)被包含在控制流構(gòu)造中。
在模塊225中,系統(tǒng)確定描述的哪些函數(shù),包括任意目標(biāo)函數(shù),是數(shù)據(jù)生成函數(shù)(data generating function),以及哪些函數(shù)是數(shù)據(jù)消費函數(shù)(data consuming functions)。這里定義的術(shù)語“數(shù)據(jù)生成函數(shù)”表示生成或輸出數(shù)據(jù)的描述的函數(shù),該數(shù)據(jù)被另一函數(shù)(可能是也可能不是目標(biāo)函數(shù))作為輸入使用。這里定義的術(shù)語“數(shù)據(jù)消費函數(shù)”表示作為輸入接收由另一個函數(shù)(可能是也可能不是目標(biāo)函數(shù))生成或輸出的數(shù)據(jù)的描述的函數(shù)。系統(tǒng)識別數(shù)據(jù)生成函數(shù)和數(shù)據(jù)消費函數(shù)間的關(guān)系。一個給定的函數(shù)相對于一個函數(shù)可以被當(dāng)做數(shù)據(jù)生成函數(shù)運行,相對于另一個不同的函數(shù)也可以當(dāng)做數(shù)據(jù)消費函數(shù)運行。
在模塊230中,系統(tǒng)評估描述的數(shù)據(jù)生成和數(shù)據(jù)消費函數(shù)間的數(shù)據(jù)交換。例如,系統(tǒng)評估目標(biāo)函數(shù)和為目標(biāo)函數(shù)提供輸入的數(shù)據(jù)生成函數(shù)之間的數(shù)據(jù)交換。系統(tǒng)還可以評估目標(biāo)函數(shù)和接收目標(biāo)函數(shù)的輸出的數(shù)據(jù)消費函數(shù)間的數(shù)據(jù)交換。
因為每個函數(shù)被轉(zhuǎn)換為一個電路模塊,因此得到的電路模塊用端口耦接。這里定義的術(shù)語“端口”指耦接兩個或更多的電路模塊從而使這些電路模塊能夠交換信號和/數(shù)據(jù)的電路或電路的硬件描述,這些電路例如導(dǎo)線、存儲器、接口等。用于耦接為數(shù)據(jù)生成函數(shù)創(chuàng)建的電路模塊和為數(shù)據(jù)消費函數(shù)創(chuàng)建的電路模塊的端口的類型可以通過評估數(shù)據(jù)生成函數(shù)和數(shù)據(jù)消費函數(shù)間發(fā)生的數(shù)據(jù)交換來確定。
系統(tǒng)可以確定數(shù)據(jù)交換的一個或多個屬性。在一方面,系統(tǒng)可以檢測電子系統(tǒng)的描述中包括的編譯指令(compiler directive),其指示一個函數(shù)和目標(biāo)函數(shù)間執(zhí)行的一種數(shù)據(jù)交換。例如,在描述中,可以找到與說明一種數(shù)據(jù)交換的特定函數(shù)相關(guān)聯(lián)的“pragma”或“#pragma”指令。一個指令,例如當(dāng)其被檢測到與目標(biāo)函數(shù)相關(guān)聯(lián)時,可以指示在創(chuàng)建電路設(shè)計時將會用到的一種端口。數(shù)據(jù)交換的屬性也可以包括一種按描述的高級編程語言中定義的方式交換的數(shù)據(jù)。
在另一方面,系統(tǒng)可以分析函數(shù)的輸入、函數(shù)的輸出,和/或確定輸入數(shù)據(jù)項處理和/或輸出數(shù)據(jù)項生成的順序。系統(tǒng)可以確定例如數(shù)據(jù)生成函數(shù)生成的數(shù)據(jù)是否被數(shù)據(jù)消費函數(shù)以和數(shù)據(jù)生成函數(shù)的生成順序相同的順序消費。類似地,系統(tǒng)可以確定數(shù)據(jù)生成函數(shù)生成的數(shù)據(jù)是否被數(shù)據(jù)消費函數(shù)以和數(shù)據(jù)生成函數(shù)的生成順序不同的順序消費。
在模塊235中,系統(tǒng)根據(jù)數(shù)據(jù)生成和數(shù)據(jù)消費函數(shù)間數(shù)據(jù)交換的評估確定端口的類型。在一個或多個方面,系統(tǒng)可以根據(jù)檢測的編譯指令或交換的數(shù)據(jù)類型確定端口類型。在另一方面,系統(tǒng)根據(jù)數(shù)據(jù)交換以及更具體地,數(shù)據(jù)生成的順序相比于數(shù)據(jù)隨后消費的順序,確定端口的類型。
例如,當(dāng)數(shù)據(jù)的消費順序與生成順序相同時,端口可以使用先進先出(FIFO)存儲器實施。使用FIFO存儲器意味著端口被作為自同步端口實施。數(shù)據(jù)的消費順序與生成順序不同的情況下,數(shù)據(jù)交換可以使用自同步(self-synchronized)端口或非自同步(non-self-synchronized)端口實施。然而,當(dāng)數(shù)據(jù)消費順序與生成順序不同時,不能使用FIFO存儲器。相反,使用本地存儲器實施該端口。
為方便解釋和澄清,為函數(shù)而生成的電路模塊、電路裝置或電路使用相似的術(shù)語指代。例如,為數(shù)據(jù)生成器生成函數(shù)而生成的電路模塊可以被稱為數(shù)據(jù)生成電路模塊。為目標(biāo)函數(shù)生成的電路模塊可以被稱為目標(biāo)電路模塊。相似地,為數(shù)據(jù)消費函數(shù)而生成的電路模塊可以被稱為數(shù)據(jù)消費電路模塊。
總的來說,無論是自同步端口還是非自同步端口,這些端口都使用模塊級握手。自同步端口允許數(shù)據(jù)在數(shù)據(jù)消費模塊開始處理后到達數(shù)據(jù)消費電路模塊。這個能力要求除模塊級握手通信之外額外的握手通信。數(shù)據(jù)消費電路模塊可以完成模塊級的啟動握手(start handshake)并在例如存儲器包含數(shù)據(jù)前開始處理一部分?jǐn)?shù)據(jù)。隨著額外數(shù)據(jù)生成并被放入存儲器,數(shù)據(jù)消費電路模塊可以完成額外的握手通信,以從存儲器移除該數(shù)據(jù)并處理數(shù)據(jù)。相似地,數(shù)據(jù)生成電路模塊可以完成握手通信,以在完成處理前將數(shù)據(jù)放入存儲器。數(shù)據(jù)生成電路模塊可以隨后完成模塊級完成握手(done handshake)。
一個自同步端口的例子是數(shù)據(jù)流接口(streaming interface)。數(shù)據(jù)流接口的一個例子是高級可擴展接口(AXI)協(xié)議,符合協(xié)議的數(shù)據(jù)流接口有時被稱為“AXI-stream”。在一方面,數(shù)據(jù)流接口包括FIFO存儲器。在這種情況下,自同步端口遵循FIFO數(shù)據(jù)傳輸方案。在另一方面,數(shù)據(jù)流接口可以包括本地存儲器,在本地存儲器的情況下,自同步端口可以不按順序,例如不按FIFO順序,訪問數(shù)據(jù),或遵循FIFO數(shù)據(jù)傳輸方案。然而,在任意一種情況下,自同步端口包括模塊級握手通信之外的握手通信,該模塊級握手通信比如在數(shù)據(jù)消費和/或數(shù)據(jù)生成電路模塊間執(zhí)行的握手通信,以及包括被使用的特定存儲器。
如前所述,非自同步端口使用模塊級握手通信。模塊級握手通信表示數(shù)據(jù)消費和/或數(shù)據(jù)生成電路模塊在彼此之間執(zhí)行握手通信,而不使用數(shù)據(jù)傳輸涉及的特定存儲器執(zhí)行握手通信。數(shù)據(jù)消費電路模塊可以完成模塊級啟動握手并訪問本地存儲器中的數(shù)據(jù),而不完成額外的握手通信,例如與存儲器進行握手通信。數(shù)據(jù)生成電路模塊可以訪問本地存儲器中的數(shù)據(jù)而不完成握手通信,然后執(zhí)行模塊級完成握手通信。在非自同步端口的情況下,所有將被提供給數(shù)據(jù)消費電路模塊的數(shù)據(jù)必須在數(shù)據(jù)消費電路模塊開始處理之前準(zhǔn)備好并可以被數(shù)據(jù)消費電路模塊使用。
非自同步端口包括具有地址和數(shù)據(jù)信號的本地存儲器。該電路結(jié)構(gòu)允許數(shù)據(jù)被以不同于儲存的順序讀取??捎糜趯嵤┳酝蕉丝诨蚍亲酝蕉丝诘氖纠缘谋镜卮鎯ζ靼ǖ幌抻诓樵儽?LUT)隨機存取存儲器、隨機存取存儲器模塊、觸發(fā)器等。電子系統(tǒng)將被被實施于其中的IC外部的存儲器也被用作“本地存儲器”。
在模塊240中,系統(tǒng)在電路設(shè)計中自動生成端口,每個端口耦接一個數(shù)據(jù)生成電路模塊和一個數(shù)據(jù)消費電路模塊,并以模塊235確定的類型實施。因此,每個端口包括合適的存儲器種類。在電路設(shè)計中生成電路模塊或端口意味著系統(tǒng)依情形生成HDL模塊以說明電路模塊、電路或端口,并在電路設(shè)計中包括HDL。硬件描述模塊集合在一起組成了用于電子系統(tǒng)的電路設(shè)計。因此,在本公開中,術(shù)語“硬件描述模塊”、“電路”、“電路模塊”、“端口”和/或“電路裝置”可以不時互換使用。
在模塊245中,系統(tǒng)在電路設(shè)計中自動生成控制電路。控制電路而已包括啟動控制電路和結(jié)束控制電路??刂齐娐穼嶋H上在硬件層面實施了算法描述的控制流構(gòu)造。
根據(jù)將數(shù)據(jù)生成函數(shù)和數(shù)據(jù)消費函數(shù)連接到目標(biāo)函數(shù)的端口是否是自同步的,控制電路被配置為生成必要的控制信號,以實現(xiàn)符合控制流構(gòu)造的數(shù)據(jù)生成、目標(biāo)以及數(shù)據(jù)消費模塊間的數(shù)據(jù)流動。選擇或確定實施的端口的種類和檢測到的控制流構(gòu)造的種類,至少部分地決定控制信號的程度。
在一方面,在電路設(shè)計中生成端口包括自動生成用于數(shù)據(jù)傳輸?shù)拇鎯ζ?。例如,在確定數(shù)據(jù)被消費的順序與生成的順序不同的情況下,系統(tǒng)自動嵌入可尋址存儲器,其協(xié)助數(shù)據(jù)從數(shù)據(jù)生成電路模塊傳輸?shù)侥繕?biāo)電路模塊。系統(tǒng)還可以在相似的情況下,例如數(shù)據(jù)生成順序與數(shù)據(jù)消費順序不同的情況下,自動嵌入尋址存儲器以協(xié)助數(shù)據(jù)從目標(biāo)電路模塊傳輸?shù)綌?shù)據(jù)消費電路模塊。在一些情況下,這些存儲器可以是分段式存儲器(segmented memory)(例如乒乓存儲器(ping-pong memory)),其包括多個可以獨立讀寫的獨立區(qū)域。
在另一個實施例中,在確定目標(biāo)電路模塊消費數(shù)據(jù)的順序與數(shù)據(jù)生成電子模塊生成數(shù)據(jù)的順序相同的情況下,系統(tǒng)自動嵌入FIFO存儲器以協(xié)助數(shù)據(jù)從數(shù)據(jù)生成電路模塊傳輸?shù)侥繕?biāo)電路模塊。在相似的情況下,系統(tǒng)還可以自動嵌入FIFO存儲器以協(xié)助數(shù)據(jù)從目標(biāo)電路模塊傳輸?shù)綌?shù)據(jù)消費電路模塊。
在模塊250中,系統(tǒng)為描述的每個函數(shù)自動生成電路模塊。在模塊255中,系統(tǒng)輸出得到的電路設(shè)計。例如,該系統(tǒng)在存儲器(比如持久性存儲設(shè)備等)中儲存電路設(shè)計。
圖3-1和3-2是說明了根據(jù)一個電子系統(tǒng)的描述自動創(chuàng)建電路設(shè)計的框圖。圖3-1和3-2中說明的過程可以用圖1中說明的系統(tǒng)實施。
圖3-1示出了一個電子系統(tǒng)的描述305,其中使用非自同步端口實施電路設(shè)計。描述305包括三個函數(shù),分別被稱為函數(shù)A、函數(shù)B和函數(shù)C。在這個實施例中,描述305包括一個循環(huán)型的控制流構(gòu)造。如圖所示,函數(shù)B包含在控制流構(gòu)造中,并且是目標(biāo)函數(shù)。如前所述,控制流構(gòu)造中包含的函數(shù)是一種函數(shù),該函數(shù)的執(zhí)行,不管是執(zhí)行條件和/或執(zhí)行的次數(shù),直接被控制流構(gòu)造控制。
系統(tǒng)生成了電路設(shè)計310。電路設(shè)計310以圖形的方式表示。函數(shù)A、B和C中的每一個都在電路設(shè)計310中畫出,分別表示為具有標(biāo)簽A、B和C的模塊或電路模塊。除了將函數(shù)A、B和C轉(zhuǎn)換為電路模塊之外,系統(tǒng)還自動地嵌入控制電路315??偟膩碚f,控制電路315是描述305中識別的控制流構(gòu)造的硬件實施。控制電路315包括啟動控制電路320和結(jié)束控制電路325。
如前面討論的,系統(tǒng)確定了函數(shù)A和函數(shù)B之間的數(shù)據(jù)交換作為非自同步端口實施。系統(tǒng)嵌入了存儲器330以實現(xiàn)從電路模塊A到電路模塊B的數(shù)據(jù)傳輸。存儲器330是RAM。系統(tǒng)還嵌入了存儲器335,以實現(xiàn)從電路模塊B到電路模塊C的數(shù)據(jù)傳輸。存儲器335是RAM。在一方面,算法描述305中說明的任意數(shù)組都被轉(zhuǎn)換為兩個或更多的可被特定電路模塊訪問的本地存儲器,例如RAM比如是330和335。分別訪問每個本地存儲器,例如330和335至少部分地被控制電路315執(zhí)行的握手通信控制或限制。
在圖3-6中,數(shù)據(jù)信號通路用實線說明;并且,控制信號用點線或虛線表示。例如,從電路模塊A到存儲器330、到電路模塊B、到存儲器335以及到電路模塊C的實線箭頭代表提到的電路模塊間的數(shù)據(jù)流動。數(shù)據(jù)信號通路還存在于電路模塊A和啟動控制電路320之間,以及存在于啟動控制電路320和結(jié)束控制電路325之間。算法描述305中控制流構(gòu)造的檢測導(dǎo)致控制電路315的生成,其允許電路設(shè)計310同時執(zhí)行大量的任務(wù)。電路設(shè)計310允許電路模塊A、B和C以流水線的方式同時操作。
在電路設(shè)計310中,循環(huán)控制可以被以如下方式實施。在一方面,電路模塊A向啟動控制電路320設(shè)置(assert)完成控制信號(done control signal)生效,以啟動包括電路模塊B的循環(huán)處理的迭代。電路模塊A通過數(shù)據(jù)通路傳遞(communicate)循環(huán)的結(jié)束條件(例如,循環(huán)邊界(loop bound))到啟動控制電路320,其反過來通過數(shù)據(jù)通路把結(jié)束條件傳遞到結(jié)束控制電路325。
每次開始執(zhí)行循環(huán)主體例如循環(huán)模塊B,啟動控制電路320可以與電路模塊B執(zhí)行握手通信。因此,啟動控制電路320可以計數(shù)啟動執(zhí)行循環(huán)主體的次數(shù)。啟動控制電路320還可以把計數(shù)傳遞至結(jié)束控制電路325,或當(dāng)執(zhí)行啟動的次數(shù)達到結(jié)束條件時通知結(jié)束控制電路325。在每次結(jié)束循環(huán)主體的執(zhí)行時,結(jié)束控制電路325還可以與電路模塊B執(zhí)行握手通信。結(jié)束控制電路325可以計數(shù)結(jié)束執(zhí)行循環(huán)主體的次數(shù),并且確定何時結(jié)束執(zhí)行的次數(shù)達到結(jié)束條件。
在開始執(zhí)行計數(shù)以及在結(jié)束執(zhí)行計數(shù)達到循環(huán)邊界時,結(jié)束控制電路325都與電路模塊C執(zhí)行握手通信。例如,在啟動控制電路320和結(jié)束控制電路325都達到循環(huán)邊界或結(jié)束條件時,結(jié)束控制電路325可以向電路模塊C設(shè)置啟動控制信號生效,以結(jié)束或完成包括電路模塊B的循環(huán)。
關(guān)于數(shù)據(jù)流,在空間可用時,例如電路模塊A生成的數(shù)據(jù)被推送至存儲器330中。根據(jù)電路設(shè)計310的實施,數(shù)據(jù)流的握手通信可以是前面作為分開或額外線路所描述或?qū)嵤┑目刂莆帐滞ㄐ诺囊徊糠帧?/p>
在循環(huán)的每次迭代中,電路模塊B從存儲器330中讀取數(shù)據(jù)。電路模塊B利用的數(shù)據(jù)被保留在存儲器330中,直到電路模塊B為循環(huán)的最后一次執(zhí)行最后一次讀取數(shù)據(jù)。在一方面,啟動控制電路320和結(jié)束控制電路325可以與電路模塊B執(zhí)行握手通信,指示電路模塊B可以在完成所有循環(huán)主體的啟動執(zhí)行后,清除存儲器330中不再需要的數(shù)據(jù)。在其它例子中,系統(tǒng)可以更早地允許這樣的握手通信,如果系統(tǒng)確定存儲器330中儲存的數(shù)據(jù)不再被電路模塊B需要。
結(jié)束控制電路325也必須在電路模塊B和電路模塊C之間執(zhí)行握手通信,以指示電路模塊C可以消費或讀取電路模塊B輸出至存儲器335的數(shù)據(jù)。在完成所有上述循環(huán)主體的執(zhí)行時,執(zhí)行用來通知電路模塊C數(shù)據(jù)可用的握手通信。
可以使用多種已知物理存儲器件中的任意種類,實施存儲器330和存儲器335。例如,存儲器330和存儲器335可以使用查詢表(LUT)RAM、RAM模塊、觸發(fā)器、實施電路設(shè)計310的IC之外的存儲器等實施。此外,存儲器330和335中存儲位置的數(shù)量或尺寸會根據(jù)描述305的要求而變化。
在另一個可替代的實施例中,啟動控制電路320和結(jié)束控制電路325可以對循環(huán)的每次迭代執(zhí)行握手通信。循環(huán)的最后一次迭代可以由從啟動控制電路320到結(jié)束控制電路325的單獨信號指示。在來自啟動控制電路320的該信號指示循環(huán)完成時,結(jié)束控制電路325可以與電路模塊C執(zhí)行必要的握手通信。
圖3-2示出了自同步端口被用來實施電路設(shè)計的例子。在圖3-2所示的例子中,自同步端口350被實施以從電路模塊A向電路模塊B傳遞數(shù)據(jù)。自同步端口355被實施以從電路模塊B向電路模塊C傳遞數(shù)據(jù)。在一方面,自同步端口350和自同步端口355使用FIFO存儲器實施。在另一方面,自同步端口350和自同步端口355使用本地存儲器實施。在另一方面,自同步端口350和355中的一個可以使用FIFO存儲器實施而自同步端口350和355中的另一個使用本地存儲器實施。
圖4-1和4-2是說明了根據(jù)一個電子系統(tǒng)的描述自動創(chuàng)建另一個電路設(shè)計的框圖。圖4-1和4-2描述的過程可以用圖1中的系統(tǒng)實施。
圖4-1示出了一個電子系統(tǒng)的描述305,其中非自同步端口被用于實施該電路設(shè)計。圖4說明了一個替代性的實施例,其中描述305被轉(zhuǎn)換為電路設(shè)計410。電路設(shè)計410與圖3-1的電路設(shè)計310大體相似,除了函數(shù)B由多個電路模塊B1、B2和B3實施以協(xié)助額外的流水線之外。因此,啟動控制電路420與電路模塊B1執(zhí)行握手通信。結(jié)束控制電路425與電路模塊B3執(zhí)行握手通信。握手通信還在電路模塊B1和B2之間以及B2和B3之間執(zhí)行。
圖4-2示出了使用自同步端口實施電路設(shè)計的一個例子。在圖4-2所示的例子中,自同步端口450被實施以從電路模塊A向電路模塊B1傳遞數(shù)據(jù)。自同步端口455被實施以從電路模塊B3向電路模塊C傳遞數(shù)據(jù)。在一個方面中,自同步端口450和自同步端口455使用FIFO存儲器實施。在另一個方面中,自同步端口450和自同步端口455使用本地存儲器實施。在另一個方面中,自同步端口450和455中的一個可以使用FIFO存儲器實施而自同步端口450和455中的另一個使用本地存儲器實施。
圖5是說明了根據(jù)一個電子系統(tǒng)的描述創(chuàng)建另一個電路設(shè)計的框圖。圖5中說明的過程可以由圖1中的系統(tǒng)實施。圖5示出了一個電子系統(tǒng)的描述505。描述505包括四個函數(shù),分別叫函數(shù)A、函數(shù)B1、函數(shù)B2和函數(shù)C。在這個實施例中,算法描述505包括一個“if-then-else”類型的控制流構(gòu)造。如圖所示,函數(shù)B1和B2作為相互排他的執(zhí)行選項都被包含在控制流構(gòu)造中。
系統(tǒng)生成了電路設(shè)計510。電路設(shè)計510用圖說明。函數(shù)A、B1、B2和C中的每一個都在電路設(shè)計510中畫出,作為電路或電路模塊分別被標(biāo)記為A、B1、B2和C。系統(tǒng)自動嵌入控制電路515??刂齐娐?15是描述505中識別的“if-then-else”控制流構(gòu)造的硬件實施??刂齐娐?15包括啟動控制電路520和結(jié)束控制電路525。
在圖5的實施例中,系統(tǒng)生成非自同步端口。系統(tǒng)還嵌入了存儲器530,以實現(xiàn)從電路模塊A到電路模塊B1或B2的傳輸。系統(tǒng)還嵌入了存儲器535以實現(xiàn)數(shù)據(jù)從電路模塊B1或B2到電路模塊C的傳輸??刂齐娐?15執(zhí)行的握手通信控制或限制對各個本地存儲器的訪問,例如對存儲器530和535的訪問。存儲器530和535是RAM類型的存儲器。
例如,啟動控制電路520可以從電路模塊A接收完成信號。響應(yīng)于完成信號,啟動控制電路520可以根據(jù)從電路模塊A向啟動控制電路520傳遞控制流構(gòu)造的一個條件,向電路模塊B1或電路模塊B2設(shè)置啟動控制信號生效或輸出啟動控制信號。結(jié)束控制電路525可以依照情形,從電路模塊B1或B2接收完成控制信號,并且響應(yīng)于完成控制信號,向電路模塊C設(shè)置啟動控制信號生效或輸出啟動控制信號。
圖6是說明了由一個電子系統(tǒng)的描述自動創(chuàng)建另一個電路設(shè)計的框圖。圖6中說明的過程可以由圖1的系統(tǒng)實施。圖6展示了更具體的說明,其中,系統(tǒng)由描述605生成了電路設(shè)計610,并使用了非自同步端口。
在電路設(shè)計610中,系統(tǒng)確定函數(shù)的每個輸入和輸出都作為存儲器實施。如圖所示,電路設(shè)計610包括對應(yīng)outputA的輸出A存儲器、對應(yīng)outputB1的輸出B1存儲器、對應(yīng)outputB2的輸出B2存儲器。向電路模塊A提供數(shù)據(jù)并從電路模塊C接收數(shù)據(jù)的存儲器沒有被示出以簡化說明。
在圖6的實施例中,輸出A存儲器、輸出B1存儲器和輸出B2存儲器中的每一個都可以用乒乓存儲器實施,或具有至少兩個獨立存儲區(qū)域以協(xié)助電路模塊對不同數(shù)據(jù)組的并行或同時執(zhí)行的存儲器實施。例如,當(dāng)電路模塊A完成操作時,其結(jié)果可以被儲存在輸出A存儲器的第一存儲器區(qū)域中。因為函數(shù)B接收“outputA”作為輸入,所以電路模塊A向啟動控制電路620設(shè)置完成控制信號生效。來自電路模塊A的完成控制信號啟動了包括電路模塊B1和B2的循環(huán)的執(zhí)行。電路模塊A可以開始對下一個數(shù)據(jù)組進行操作,而結(jié)果則被儲存在輸出A存儲器的第二區(qū)域。這樣,在電路模塊A向輸出A存儲器的第二區(qū)域?qū)懭霐?shù)據(jù)時,電路模塊B1可以繼續(xù)訪問輸出A存儲器的第一區(qū)域。
啟動控制電路620通過向電路模塊B1設(shè)置控制信號有效,開始循環(huán)的執(zhí)行。啟動控制電路620可以繼續(xù)啟動循環(huán)的新的迭代,直到循環(huán)退出條件被確定為真。當(dāng)電路模塊B1完成操作時,結(jié)果數(shù)據(jù)被儲存在輸出B1存儲器的第一區(qū)域中。電路模塊B1還向電路模塊B2設(shè)置啟動控制信號有效。電路模塊B2開始對輸出B1存儲器第一區(qū)域中儲存的數(shù)據(jù)進行操作。同時,電路模塊B1可以開始為下一次迭代進行運算。如果這是循環(huán)的最后一次迭代,那么啟動控制邏輯可以開始一個新的循環(huán)啟動,并且模塊B1可以通過從輸出A存儲器的第二區(qū)域中取出下一個數(shù)據(jù)組開始運算。電路模塊B1生成的數(shù)據(jù)被儲存在輸出B1存儲器的第二區(qū)域中。
當(dāng)電路模塊B1和電路模塊B2結(jié)束循環(huán)的所有迭代時,結(jié)束控制電路625向電路模塊C設(shè)置啟動控制信號有效。響應(yīng)于來自結(jié)束控制電路625的啟動控制信號,電路模塊C從輸出B2存儲器中獲取數(shù)據(jù)以進行處理。
圖7說明了一個使用自同步端口的電子系統(tǒng)的一個示例性的描述705。如描述705中聲明的,函數(shù)A、B1、B2和C之間的數(shù)據(jù)交換通過流數(shù)據(jù)類型傳達。系統(tǒng)評估描述705,并且由描述自身以及使用的流數(shù)據(jù)的類型確定這些自同步端口可以被用在電路設(shè)計中。
圖8描述了一個使用自同步端口的電子系統(tǒng)的另一個示例性的描述805。在描述805的例子中,系統(tǒng)分析了生產(chǎn)者函數(shù),并且發(fā)現(xiàn)數(shù)據(jù)以索引0到N-1的順序生成。系統(tǒng)還分析了消費者函數(shù),并且確定生產(chǎn)者函數(shù)生成的數(shù)據(jù)以和生產(chǎn)者函數(shù)生成同樣的順序被消費。系統(tǒng)使用FIFO存儲器,這是因為系統(tǒng)可以證明或確定數(shù)據(jù)的生成順序和消費順序是相同的。在一個方面,當(dāng)系統(tǒng)不能確定或證明數(shù)據(jù)以和生成相同的順序被消費時,系統(tǒng)評估這種情況等同于確定數(shù)據(jù)被消費的順序與生成的順序不相同。
圖9是說明了根據(jù)本說明書中公開的一個實施例的一個示例性IC架構(gòu)的框圖。架構(gòu)900可以在例如現(xiàn)場可編程門陣列(FPGA)型的IC中實施。本說明書中描述的各種電路設(shè)計還可以被處理(例如轉(zhuǎn)換為配置比特流),并被加載到使用架構(gòu)900的IC中。
如圖所示,架構(gòu)900包括多個不同種類的可編程電路(例如邏輯)模塊。例如,架構(gòu)900可以包括大量不同的可編程單元,包括千兆收發(fā)器(MGT)901、可配置邏輯模塊(CLB)902、隨機存取存儲器模塊(BRAM)903、輸入/輸出模塊(IOB)904、配置和時鐘邏輯(CONFIG/CLOCKS)905、電子信號處理模塊(DSP)906、專用輸入/輸出模塊907(例如配置端口和時鐘端口)以及其它可編程邏輯908,比如數(shù)字時鐘管理器、模數(shù)轉(zhuǎn)換器、系統(tǒng)監(jiān)控邏輯等。
在一些IC中,每個可編程單元包括可編程互連元件(INT)911,其標(biāo)準(zhǔn)化連接到以及連接自每個相鄰單元中對應(yīng)的INT 911。因此,這些INT 911合在一起實施了被說明的IC的可編程互連結(jié)構(gòu)。每個INT 911還連接到和連接自同一單元中的可編程邏輯元件,如圖9頂部包括的實施例所示。
例如,CLB 902可以包括可配置邏輯元件(CLE)912,其加上單個INT 911可以被編程以實施用戶邏輯。BRAM 903除了一個或多個INT 911之外還可以包括BRAM邏輯元件(BRL)913。通常,一個單元中包括的INT 911的數(shù)量取決于該單元的高度。在如圖所示的實施例中,BRAM單元具有與5個CLB相同的高度,但其它數(shù)字(例如,4)也可以被使用。DSP單元906除了合適數(shù)量的INT 911之外可以包括DSP邏輯元件(DSPL)914。IOB 904除INT 911之外還可以包括,例如,兩個I/O邏輯元件(IOL)915的實例。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)清楚,實際的例如連接到IOL 915的I/O焊盤,通常不被限制在IOL 915的區(qū)域中。
在圖9所示的實施例中,舉例來說由區(qū)域905、907和908組成的接近裸片中央的列區(qū)域可以被用于配置、時鐘和其它控制邏輯。從該欄延伸的水平區(qū)域909可以被用于在可編程IC的寬度上分配時鐘和配置信號。
一些使用圖9中說明的架構(gòu)的IC包括額外的邏輯模塊用來打斷構(gòu)成IC很大一部分的常規(guī)的列結(jié)構(gòu)。額外的邏輯模塊可以是可編程模塊和/或?qū)S秒娐贰@?,被表示為PROC910的處理器模塊跨越了多列的CLB和BRAM。
在一個方面,PROC 910被實施為專用電路,例如,硬線處理器(hard-wired processor),其被作為實施IC中可編程電路的裸片的一部分而制造。PROC 910可以代表任意的各不同種類處理器和/或系統(tǒng),其復(fù)雜度的范圍可以從獨立的處理器(例如可以執(zhí)行程序代碼的單核)到包括一個或多個核、模塊、協(xié)處理器、接口等的整個處理器系統(tǒng)。
在另一個方面,PROC 910從架構(gòu)900中省去并被替換為一個或多個其它各種所述可編程模塊。此外,這些模塊可以被用來組成“軟處理器”,這樣各種可編程電路模塊可以被用來組成如PROC 910一樣能夠執(zhí)行程序代碼的處理器。
短語“可編程電路”可以指IC中的可編程電路元件,例如,這里所述的各種可編程或可配置電路模塊或單元,以及根據(jù)加載到IC中的配置數(shù)據(jù)選擇性耦接各種電路模塊、單元和/或元件的互連電路。例如,圖9中所示的PROC 910之外的部分比如CLB 902和BRAM903可以被認(rèn)為是IC的可編程電路。
總的來說,可編程電路的功能直到配置數(shù)據(jù)被加載到IC中才確立。一組配置比特可以被用來編程IC的可編程電路,比如FPGA。配置比特通常被稱為“配置比特流”??偟膩碚f,可編程電路只有先將配置比特流加載到IC中才可以操作或發(fā)揮功能。配置比特流有效地在可編程電路中實施或?qū)嵗囟ǖ碾娐吩O(shè)計。例如,電路設(shè)計指定了可編程電路模塊的功能性的方面和各種可編程電路模塊間的物理連接。
“硬線的”或“硬化的”(harden)電路(例如,非可編程的)被作為IC的一部分而制造。與可編程電路不同,硬線電路或電路模塊不是在IC制造后通過加載配置比特流實施的。硬線電路一般被認(rèn)為具有專用電路模塊和互連,舉例來說,它們不需要先加載配置比特流到IC中就具有功能,例如PROC 910。
在一些例子中,硬線電路可以具有一個或多個可選擇模式,可以根據(jù)注冊設(shè)置或儲存在IC中的一個或多個存儲器元件中的數(shù)值設(shè)置或選擇。例如,可選模式可以通過加載配置比特流到IC中設(shè)置。盡管有這樣的特點,但是硬線電路不被認(rèn)為是可編程電路,因為硬線電路在作為IC的一部分被制造時就是可操作的并具有特定功能。
圖9被用來說明可被用于實施包括可編程電路(例如,可編程結(jié)構(gòu))的IC示例性架構(gòu)。例如,一列中邏輯模塊的數(shù)量、列的相對寬度、列的數(shù)量和順序、列中包括的邏輯模塊的種類、邏輯模塊的相對尺寸,圖9頂部包括的互連/邏輯實施都完全是示例性的。例如,在實際的IC中無論CLB在什么位置,通常都有不止一個列與CLB鄰接,以協(xié)助用戶電路設(shè)計的有效實施。然而,鄰接CLB列的數(shù)量可以隨著IC的總體尺寸而變化。進一步地,IC中如PROC 910這樣的模塊的尺寸和位置,只是用作說明目的,而不用于限制本說明書中公開的一個或多個實施例。
根據(jù)這里公開的創(chuàng)造性的安排,一個電子系統(tǒng)的描述可以被評估以識別控制流構(gòu)造。在由描述生成電路設(shè)計時,控制電路被嵌入到實施控制流構(gòu)造的功能的電路設(shè)計中。控制電路運行例如握手通信的函數(shù)以增加并行度,從而有效地使用資源并且增加得到的電路設(shè)計。
出于解釋的目的,特定的術(shù)語被提出以提供對這里公開的各種創(chuàng)造性構(gòu)思的透徹理解。然而,這里使用的術(shù)語只是出于描述創(chuàng)造性安排的特定方面的目的,而不用于限定。
這里使用的術(shù)語“一種”和“一個”被定義為一個或不止一個。這里使用的術(shù)語“多個”被定義為兩個或多于兩個。這里使用的術(shù)語“另一個”被定義為至少第二個或更多。這里使用的術(shù)語“耦接”除非另有說明,被定義為連接,不管是沒有任何中間元件的直接連接還是用一個或多個中間元件間接連接。除非另有說明,兩個元件也可以機械地、電氣地或通過通信信道、通路、網(wǎng)絡(luò)或系統(tǒng)通信地耦接。
這里使用的術(shù)語“和/或”指代并包括一個或多個相關(guān)列出的項目的任何以及所有可能的組合。還應(yīng)當(dāng)理解,本公開中使用的術(shù)語“包括”指代出現(xiàn)所述的特征、整數(shù)、步驟、操作、元件和/或部件,但不排除出現(xiàn)一個或多個其它特征、整數(shù)、步驟、操作、元件、部件和/或它們的集合。還應(yīng)當(dāng)理解,盡管這里可能使用術(shù)語第一、第二等描述各種元素,這些元素不應(yīng)當(dāng)被這些術(shù)語限制,因為這些用語只是用來將一個元素與另一個區(qū)別開。
術(shù)語“如果”可以根據(jù)上下文被理解為“當(dāng)”或“一旦”或“響應(yīng)于確定”或“響應(yīng)于檢測到”。
類似地,短語“如果確定”或“如果(所述條件或事件)被檢測到”可以根據(jù)上下文被理解為“一旦確定”或“響應(yīng)于確定”或“一旦檢測到(所述條件或事件)”或“響應(yīng)于檢測到(所述條件或事件)”。
在本公開中,相同的參考標(biāo)記被用來指代終端、信號線、線路和它們對應(yīng)的信號。出于這樣的考慮,術(shù)語“信號”、“線路”、“連接”、“終端”和“引腳”可以在本公開中被不時地互換使用。還應(yīng)當(dāng)理解,術(shù)語“信號”、“線路”等可以代表一個或多個信號,例如單個比特通過一條線路的傳輸或者多個并行的比特通過多條并行線路的傳輸。此外,每個線路或信號可以根據(jù)情況,代表通過信號或線路連接的兩個或更多部件間的雙向通信。
本公開描述的一個或多個方面可以使用硬件或者硬件與軟件的結(jié)合實現(xiàn)。一個或多個方面可以在一個系統(tǒng)中以集中的方式實現(xiàn),也可以以不同元件分散在多個互連的系統(tǒng)中的分散的方式實現(xiàn)。任何一種數(shù)據(jù)處理系統(tǒng)或其它被采用以實現(xiàn)這里描述的方法的至少一部分的裝置都是合適的。
一個或多個方面還可以被體現(xiàn)在計算機程序產(chǎn)品中,其包括所有使這里描述的方法能夠?qū)嵤┑奶卣?。計算機程序產(chǎn)品包括計算機可讀數(shù)據(jù)存儲介質(zhì)。這里定義的術(shù)語“計算機可讀數(shù)據(jù)存儲介質(zhì)”意思是包含或儲存供指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與指令執(zhí)行系統(tǒng)、裝置或設(shè)備關(guān)聯(lián)的程序代碼的存儲介質(zhì)。計算機可讀存儲介質(zhì)是非瞬態(tài)的,這樣其本身不是瞬態(tài)傳播信號。計算機可讀存儲介質(zhì)的例子可以包括但不限于光介質(zhì)、磁介質(zhì)、磁光介質(zhì)、計算機存儲器例如隨機存取存儲器、大容量存儲設(shè)備(例如硬盤)等。
附圖中的流程圖和框圖說明了根據(jù)這里公開的創(chuàng)造性安排的各個方面的系統(tǒng)、方法和計算機程序產(chǎn)品可能的實施例的架構(gòu)、功能和操作。在這點上,流程圖和框圖中的每個模塊可以代表代碼的模塊、片段或部分,該代碼包括一個或多個可執(zhí)行的指令以實施指定的邏輯函數(shù)。應(yīng)當(dāng)注意,在一些替代性的實施例中,模塊中提到的函數(shù)可能以不同于圖中所示的順序?qū)崿F(xiàn)。例如,所示兩個連續(xù)的模塊可以被基本同時執(zhí)行,或者這些模塊有時可以以相反的順序執(zhí)行,這取決于設(shè)計的功能。還需要注意的是,框圖和/或流程圖中說明的每個模塊以及框圖和/或流程圖中說明的模塊的組合,可以用執(zhí)行指定函數(shù)或行為的特定目的的基于硬件的系統(tǒng)實施,或者用特定目的的硬件和計算機指令的組合實施。
這樣,在整個公開中,使用比如“處理”或“運算”或“計算”或“確定”或“顯示”等術(shù)語的敘述指代數(shù)據(jù)處理系統(tǒng)(例如,計算機系統(tǒng)或類似的電子計算器件)的動作或處理,其操作并將計算機系統(tǒng)的寄存器和/或存儲器中用物理(電子)量表示的數(shù)據(jù)轉(zhuǎn)換為計算機系統(tǒng)的存儲器和/或寄存器或其它這樣的信息存儲、傳輸或顯示設(shè)備中用物理量類似地表示的其它數(shù)據(jù)。
對應(yīng)的結(jié)構(gòu)、材料、步驟以及權(quán)利要求書中全部方法或步驟加上功能元素(function element)應(yīng)當(dāng)包括任何用來根據(jù)特定的要求執(zhí)行與其它要求的元素結(jié)合的函數(shù)的結(jié)構(gòu)、材料或步驟。
一種方法包括確定高級編程語言描述的第一函數(shù)和包含在高級編程語言描述的控制流構(gòu)造中的第二函數(shù),確定第二函數(shù)是第一函數(shù)的數(shù)據(jù)消費函數(shù),在電路設(shè)計中并且使用處理器自動生成包括本地存儲器的端口。該端口在電路設(shè)計中將實施第一函數(shù)的第一電路模塊耦接至實施第二函數(shù)的第二電路模塊。
該方法可以包括在電路設(shè)計中自動生成作為非自同步端口的控制電路,通過在第一電路模塊和第二電路模塊之間執(zhí)行握手通信控制第二電路模塊的運行。
在一個方面,自動生成控制電路可以包括生成實施流控制構(gòu)造的啟動控制電路和結(jié)束控制電路。
在另一個方面,自動生成控制電路可以包括生成啟動控制電路,其響應(yīng)于從第一電路模塊接收到完成控制信號,根據(jù)控制流構(gòu)造的一個條件輸出啟動控制信號到第二電路模塊或第三電路模塊。可以生成結(jié)束控制電路,其響應(yīng)于從第二電路模塊或第三電路模塊接收到完成控制信號,向第四電路模塊提供啟動控制信號。第四電路模塊是由一個函數(shù)生成的,該函數(shù)是第二函數(shù)或第三函數(shù)的數(shù)據(jù)消費函數(shù)。
在另一方面,自動生成控制電路可以包括生成啟動控制電路,其響應(yīng)于從第一電路模塊接收到完成控制信號,根據(jù)控制流構(gòu)造的一個條件輸出啟動控制信號到第二電路模塊。可以生成結(jié)束控制電路,其響應(yīng)于從第二電路模塊接收到完成控制信號,向第三電路模塊提供啟動控制信號。第三電路模塊是由第三函數(shù)生成的,其是第二函數(shù)的數(shù)據(jù)消費函數(shù)。
在又一個方面,自動生成控制電路可以包括生成啟動控制電路,其響應(yīng)于從第一電路模塊接收到完成控制信號,輸出啟動控制信號至第二電路模塊。可以生成結(jié)束控制電路,其響應(yīng)于確定控制流構(gòu)造的結(jié)束條件被滿足,向第三電路模塊提供啟動控制信號。第三電路模塊是由第三函數(shù)生成的,其是第二函數(shù)的數(shù)據(jù)消費函數(shù)。
啟動控制電路可以向結(jié)束控制電路傳遞流控制構(gòu)造的結(jié)束條件。另外,結(jié)束控制電路響應(yīng)于啟動控制電路和結(jié)束控制電路都檢測到結(jié)束條件,可以向第三電路模塊提供啟動控制信號。
一種系統(tǒng)包括被編程為啟動可執(zhí)行操作的處理器。可執(zhí)行操作包括確定高級編程語言描述的第一函數(shù)以及高級編程語言的控制流構(gòu)造中包含的第二函數(shù),確定第二函數(shù)是第一函數(shù)的數(shù)據(jù)消費函數(shù),并且在電路設(shè)計中自動生成包括本地存儲器的端口。該端口在電路設(shè)計中將實施第一函數(shù)的第一電路模塊耦接到實施第二函數(shù)的第二電路模塊。
可執(zhí)行操作可以包括在電路設(shè)計中自動生成作為非自同步端口的控制電路,其通過在第一電路模塊和第二電路模塊之間執(zhí)行握手通信控制第二電路模塊的運行。
在一個方面,自動生成控制電路可以包括生成實施流控制構(gòu)造的啟動控制電路和結(jié)束控制電路。
在另一個方面,自動生成控制電路可以包括生成啟動控制電路,其響應(yīng)于從第一電路模塊接收完成控制信號,根據(jù)控制流構(gòu)造的條件輸出啟動控制信號至第二電路模塊或第三電路模塊??梢陨山Y(jié)束控制電路,其響應(yīng)于從第二電路模塊或第三電路模塊接收完成控制信號,向第四電路模塊提供啟動控制信號。第四電路模塊是由一個函數(shù)生成的,該函數(shù)是第二函數(shù)或第三函數(shù)的數(shù)據(jù)消費函數(shù)。
在另一個方面,自動生成控制電路可以包括生成啟動控制電路,其響應(yīng)于從第一電路模塊接收完成控制信號,根據(jù)控制流構(gòu)造的條件輸出啟動控制信號至第二電路模塊??梢陨山Y(jié)束控制電路,其響應(yīng)于從第二電路模塊接收完成控制信號,向第三電路模塊提供啟動控制信號。第三電路模塊是由第三函數(shù)生成的,其是第二函數(shù)的數(shù)據(jù)消費函數(shù)。
在又一個方面,自動生成控制電路可以包括生成啟動控制電路,其響應(yīng)于從第一電路模塊接收完成控制信號,輸出啟動控制信號至第二電路模塊。可以生成結(jié)束控制電路,其響應(yīng)于確定控制流構(gòu)造的結(jié)束條件被滿足,向第三電路模塊提供啟動控制信號。第三電路模塊是由第三函數(shù)生成的,其是第二函數(shù)的數(shù)據(jù)消費函數(shù)。
啟動控制電路可以向結(jié)束控制電路傳遞流控制構(gòu)造的結(jié)束條件。另外,結(jié)束控制電路響應(yīng)啟動控制電路和結(jié)束控制電路都檢測到結(jié)束條件,可以向第三電路模塊提供啟動控制信號。
一種非瞬態(tài)計算機可讀存儲媒介包括其中儲存的指令。這些指令在被處理器執(zhí)行時,實施一種方法。該方法包括確定高級編程語言描述的第一函數(shù)和包含在高級編程語言描述的控制流構(gòu)造中的第二函數(shù),確定第二函數(shù)是第一函數(shù)的數(shù)據(jù)消費函數(shù),并在電路設(shè)計中使用處理器自動生成包括本地存儲器的端口。該端口在電路設(shè)計中將實施第一函數(shù)的第一電路模塊耦接至實施第二函數(shù)的第二電路模塊。
該方法可以包括在電路設(shè)計中自動生成作為非自同步端口的控制電路,通過在第一電路模塊和第二電路模塊之間執(zhí)行握手通信控制第二電路模塊的運行。
在一個方面,自動生成控制電路可以包括生成實施流控制構(gòu)造的啟動控制電路和結(jié)束控制電路。
啟動控制電路可以向結(jié)束控制電路傳遞流控制構(gòu)造的結(jié)束條件。
本公開中描述的特征可以被體現(xiàn)在其它形式中,只要不偏離本公開的精神和必要的屬性。因此,應(yīng)當(dāng)按照權(quán)利要求書而不是前面的其它公開確認(rèn)這些特征和實施例的范圍。