国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      將軟件程序代碼斷言轉(zhuǎn)換為硬件描述語言程序代碼的方法

      文檔序號:6608888閱讀:414來源:國知局
      專利名稱:將軟件程序代碼斷言轉(zhuǎn)換為硬件描述語言程序代碼的方法
      技術(shù)領(lǐng)域
      本發(fā)明有關(guān)于一種用來設(shè)計數(shù)字化集成電路(integrated circuits,IC)的軟件工具,特別是有關(guān)于一種使用硬件描述語言(hardware description language,HDL)斷言(assertion)的工具。
      背景技術(shù)
      傳統(tǒng)上集成電路設(shè)計包含數(shù)個階段,每個階段都需要使用不同的工具或工具組,一般集成電路設(shè)計者會使用數(shù)種程序語言之一來撰寫程序代碼,在撰寫程序代碼流程的同時會進(jìn)行模擬,設(shè)計者會執(zhí)行模擬工具輸入程序編碼以測試設(shè)計結(jié)果,當(dāng)模擬過程出現(xiàn)問題,測試者對程序代碼編輯以修復(fù)問題并再度進(jìn)行模擬,在模擬后設(shè)計者會使用合成器將程序編碼轉(zhuǎn)譯為集成電路的邏輯表示,接著使用其他集成電路工具將邏輯表示轉(zhuǎn)化成實體集成電路,成為可編程邏輯門陣列(Field Programmalbe Gate Array,F(xiàn)PGA)、專用集成電路(Application-Specific Integrated Circuit,ASIC)、或其他訂制硅集成電路。
      集成電路設(shè)計者可以使用數(shù)種類別的程序語言進(jìn)行設(shè)計,其中有一種語言集合被稱為硬件描述語言(Hardware Description languages,HDL),亦被稱為寄存器傳輸語言(Register Transfer Languages,RTL),一般所知的寄存器傳輸語言包含Verilog與VHDL,寄存器傳輸語言被認(rèn)為是低階程序語言,因為其描述的是特殊硬件特征如時序或是平行度,其他可供集成電路設(shè)計用的程序語言包含C、C++、或其他類似的語言,這類語言傳統(tǒng)上比較常用來開發(fā)軟件而非硬件,這些軟件語言可以讓設(shè)計者以較高階的概念撰寫程序代碼,因此通常會增加設(shè)計者的工作效率。
      一般C/C++與硬件描述語言程序代碼都包含斷言,用以確認(rèn)程序編碼能準(zhǔn)確實行預(yù)期的設(shè)計,一段斷言為用來表示一個特定的設(shè)計特征應(yīng)該或不應(yīng)該如何運(yùn)轉(zhuǎn)的宣告,舉例來說,一個特定區(qū)塊的程序代碼可能會假設(shè)兩批輸出中一次只有一批是有作用的,再舉例來說,一個區(qū)塊可能會假設(shè)每一批輸入的值都不會大于一個特定的最大值,這些假設(shè)可以由設(shè)計者表示為斷言來實現(xiàn)。
      因為大部分的模擬及合成工具都使用硬件描述語言來輸入,而不是C/C++,使用C/C++撰寫程序代碼的設(shè)計者要將程序代碼轉(zhuǎn)譯為硬件描述語言,轉(zhuǎn)譯過程可能是人工轉(zhuǎn)譯、自動轉(zhuǎn)譯、或兩種方式的結(jié)合,然而,并非所有轉(zhuǎn)譯工具都能將C++斷言轉(zhuǎn)譯為適當(dāng)?shù)挠布枋稣Z言斷言,因此,亟需提出一種能轉(zhuǎn)譯軟件程序代碼為硬件描述語言的工具,以克服傳統(tǒng)技術(shù)的缺欠。

      發(fā)明內(nèi)容
      有鑒于上述傳統(tǒng)技術(shù)的諸多缺欠,本發(fā)明的目的在于提出一種能轉(zhuǎn)譯軟件程序代碼的斷言為硬件描述語言的系統(tǒng)與方法,在本發(fā)明的一方法中,一第一來源文件包含以軟件程序語言寫成的源程序代碼,會被轉(zhuǎn)譯為包含硬件描述語言源程序代碼的第二來源文件。第二來源文件會執(zhí)行由第一來源文件程序代碼轉(zhuǎn)譯過來的斷言,這個方法包含由第一來源文件讀取軟件程序代碼斷言;定位第二來源文件中的一第二區(qū)塊,其中第二區(qū)塊對應(yīng)到第一來源文件中的具有軟件程序代碼斷言的第一區(qū)塊;轉(zhuǎn)譯軟件程序代碼斷言為以硬件描述語言表示的硬件程序斷言;決定第二區(qū)塊中的一個位置以插入硬件程序斷言;以及將硬件程序斷言插入第二來源文件中被決定的位置。
      對本領(lǐng)域普通技術(shù)人員而言,其他未包含在本發(fā)明下述所公開的內(nèi)容與附圖中的系統(tǒng)、方法、特征或好處為顯而易見的,因此凡其他未脫離發(fā)明所揭示的精神下所完成的等效改變或修改,均應(yīng)包含在所述的權(quán)利要求范圍內(nèi)。


      圖1顯示使用本發(fā)明的方法轉(zhuǎn)換軟件程序代碼斷言為硬件描述語言程序代碼的整體數(shù)據(jù)流區(qū)塊示意圖。
      圖2A顯示軟件程序代碼與硬件程序代碼階層結(jié)構(gòu)與兩者間對應(yīng)關(guān)系的區(qū)塊層級示意圖。
      圖2B顯示軟件程序代碼與硬件程序代碼文件如何表示圖2A中的階層結(jié)構(gòu)的示意圖。
      圖3顯示軟件程序代碼與硬件程序代碼中另一種階層結(jié)構(gòu)的示意圖。
      圖4顯示一軟件程序代碼函數(shù)以及對應(yīng)的硬件程序代碼模塊示意圖。
      圖5顯示使用本發(fā)明所公開的方法轉(zhuǎn)換如圖4所示的軟件程序代碼函數(shù)中的斷言的硬件程序代碼模塊的示意圖。
      圖6顯示本發(fā)明所公開的方法如何對應(yīng)C/C++形式的斷言于硬件描述語言形式的示意圖。
      圖7顯示本發(fā)明的一實施例中可轉(zhuǎn)換軟件程序斷言為硬件描述語言程序代碼的系統(tǒng)的區(qū)塊示意圖。
      圖8顯示本發(fā)明的一實施例中可轉(zhuǎn)換軟件程序斷言為硬件描述語言程序代碼方法的流程圖。
      圖9顯示用以實施本發(fā)明的轉(zhuǎn)換軟件程序斷言為硬件描述語言程序代碼方法的通用計算機(jī)的硬件區(qū)塊示意圖。
      主要元件符號說明110 軟件程序代碼120 轉(zhuǎn)譯工具130 硬件程序代碼140 斷言轉(zhuǎn)換工具150 包含硬件斷言的硬件程序代碼160 硬件描述語言模擬器210S函數(shù)main210H模塊top220S類別S_MUX220H模塊H_MUX230S類別S_CTR230H模塊H_CTR240S類別S_ENC240H模塊H_ENC310 函數(shù)區(qū)塊320 模塊區(qū)塊330 序列區(qū)塊340 流程區(qū)塊350S軟件控制區(qū)塊
      350H硬件控制區(qū)塊410S軟件函數(shù)410H硬件模塊420S第一控制區(qū)塊420H第一控制區(qū)塊430S第二控制區(qū)塊430H第二控制區(qū)塊440 流程區(qū)塊450 斷言510 硬件斷言610 C/C++(軟件)斷言620 布爾代數(shù)630 輸出字串640 嚴(yán)重程度650 Verilog語言(硬件)斷言660 屬性定義670 ASSERT宣告680 布爾代數(shù)690 $FATAL(嚴(yán)重程度)宣告695 輸出字串710 讀取邏輯720 第一定位邏輯725 軟件指示碼727 軟件區(qū)塊730 第二定位邏輯735 硬件指示碼737 硬件區(qū)塊740 轉(zhuǎn)譯邏輯750 第三定位邏輯760 插入邏輯800 可轉(zhuǎn)換軟件斷言為硬件描述語言程序代碼方法
      810從軟件來源文件中讀取包含軟件斷言的函數(shù)或類別820決定軟件斷言與組成函數(shù)或類別的各種區(qū)塊的相對位置830讀取相對于函數(shù)或類別的硬件模塊840轉(zhuǎn)換軟件斷言到硬件斷言850判斷硬件斷言在硬件程序代碼文件中的插入位置860在插入位置插入硬件斷言900計算機(jī)系統(tǒng)910處理器920網(wǎng)絡(luò)接口930存儲器940非易失性存儲裝置950總線具體實施方式
      本發(fā)明的一些實施例會詳細(xì)描述如下。然而,除了詳細(xì)描述外,本發(fā)明還可以廣泛地在其他的實施例施行,且本發(fā)明的范圍不受限定,其以所提出的權(quán)利要求范圍為準(zhǔn)。再者,在本說明書中,各元件的不同部分并沒有依照尺寸繪圖。某些尺度與其他相關(guān)尺度相比已經(jīng)被夸張,以提供更清楚的描述和本發(fā)明的理解。
      本發(fā)明公開一種將軟件程序代碼斷言轉(zhuǎn)換為硬件描述語言程序代碼的方法,包含將軟件程序代碼與經(jīng)由軟件程序代碼轉(zhuǎn)譯而來的硬件描述語言程序代碼一起檢視;轉(zhuǎn)譯被檢視的軟件程序代碼中的軟件程序代碼斷言為硬件描述語言程序代碼斷言;以及將硬件描述語言程序代碼斷言插入硬件程序代碼中。
      圖1顯示使用本發(fā)明的方法轉(zhuǎn)換軟件程序代碼斷言為硬件描述語言程序代碼的整體數(shù)據(jù)流區(qū)塊示意圖,本發(fā)明的方法使用兩組輸入文件,兩組輸入文件通常被配置在不同的子目錄中,其中一組輸入文件包含軟件程序代碼110,軟件程序代碼110為使用軟件程序語言如C或C++寫成的程序代碼,這些輸入文件還包含用相同軟件程序語言寫成的斷言,軟件程序代碼110會被輸入轉(zhuǎn)譯工具120以將軟件程序代碼轉(zhuǎn)譯為硬件描述語言如VHDL或Verilog,由此轉(zhuǎn)譯工具120轉(zhuǎn)譯產(chǎn)生硬件程序代碼130,硬件程序代碼130為另一組輸入文件,用來輸入斷言轉(zhuǎn)換工具140。
      上述中重要的是,被轉(zhuǎn)譯的硬件程序代碼130并不包含由軟件程序語言轉(zhuǎn)譯成硬件描述語言的斷言,然而,其仍然包含對應(yīng)的其他斷言,這些斷言由轉(zhuǎn)譯工具120產(chǎn)生或是在轉(zhuǎn)譯過程后由人工加入。
      兩組輸入文件都會輸入斷言轉(zhuǎn)換工具140處理,其中會由計算機(jī)程序執(zhí)行本發(fā)明的方法以轉(zhuǎn)換軟件程序代碼斷言為硬件描述語言程序代碼,由此斷言轉(zhuǎn)換工具140產(chǎn)生包含原始硬件描述語言程序代碼與由軟件程序語言轉(zhuǎn)譯為硬件程序代碼的斷言的含硬件斷言的硬件程序代碼150,本發(fā)明的方法讀取軟件程序代碼110中的軟件程序語言斷言,并將其轉(zhuǎn)譯為硬件描述語言斷言,最后將硬件描述語言斷言放入被轉(zhuǎn)譯的硬件程序代碼130中的適當(dāng)位置,于是產(chǎn)生含硬件斷言的硬件程序代碼150,之后含硬件斷言的硬件程序代碼150可以被輸入硬件描述語言模擬器160進(jìn)行模擬驗證。
      如軟件開發(fā)領(lǐng)域的普通技術(shù)人員所能了解的,本發(fā)明的斷言轉(zhuǎn)換工具140可以由多種程序語言加以編碼及編譯執(zhí)行實現(xiàn),因此本發(fā)明并不限定其所使用的程序語言,編碼時可使用的程序語言包含perl、awk、shell script、VBscript或其他程序語言,編譯可使用的程序語言包含C、C++、C#、JAVA、Visual Basic或其他程序語言。
      雖然軟件程序代碼110被包含在多個文件中,然而其整體可視為形成單一軟件實體的階層結(jié)構(gòu),相同的硬件程序代碼130也被包含在多個文件中,但一樣可以視為單一硬件實體的階層結(jié)構(gòu),在Verilog語言中這些實體被稱為模塊(module),而在C語言中則稱為函數(shù)(function),在C++語言中則是被稱為類別(class),其中類別又包含函數(shù)。
      圖2A與圖2B顯示兩種階層結(jié)構(gòu)與其對應(yīng)關(guān)系,以不同觀點繪成的示意圖,圖2A為階層結(jié)構(gòu)的區(qū)塊層級示意圖,在階層結(jié)構(gòu)最上端是單一的頂端實體210,在C/C++語言的階層結(jié)構(gòu)中頂端實體210S為被稱為main的函數(shù),在Verilog語言階層結(jié)構(gòu)中的頂端實體210H為被稱為top的模塊,因此硬件程序代碼130具有對應(yīng)于軟件程序語言階層結(jié)構(gòu)的頂端實體210S的硬件程序語言頂端實體210H。
      在一特定階層的一個實體可以建立或提出位于其他較低階層的實體,如圖2A所示的范例,類別220S“S_MUX”與230S“S_CTR”為中階層軟件實體,由頂端實體210S“main”所提出,同樣的模塊220H“H_MUX”與230H”H_CTR”為中階層硬件實體,由頂端實體210H“top”所提出,更下層的底層軟件實體類別240S“S_ENC”一樣被中階層實體類別220S“S_MUX”所提出,而底層硬件實體模塊240H“H_ENC”則是被中階層實體模塊220H“H_MUX”所提出。
      上述中重要的是硬件程序模塊220H的名稱”H_MUX”可推導(dǎo)自軟件類別220S的名稱”S_MUX”,由于將C/C++軟件程序代碼110轉(zhuǎn)譯為Verilog硬件程序代碼130的轉(zhuǎn)譯流程,不論為自動轉(zhuǎn)譯或人工轉(zhuǎn)譯都會遵循預(yù)先定義好的命名方法,當(dāng)將軟件程序斷言轉(zhuǎn)譯為硬件描述語言程序代碼時,本發(fā)明所公開的方法會檢視構(gòu)成軟件程序代碼110的輸入文件以找出其中的軟件程序代碼階層結(jié)構(gòu),并檢視構(gòu)成硬件程序代碼130的輸入文件以找出硬件程序代碼階層結(jié)構(gòu),使用預(yù)先定義好的命名方法有助于讓本發(fā)明的方法發(fā)現(xiàn)兩者間的對應(yīng)關(guān)系。
      圖2B顯示軟件程序代碼110與硬件程序代碼130文件如何表示圖2A中的階層結(jié)構(gòu)的示意圖,函數(shù)210S“main”提出類別220S“S_MUX”,而類別220S“S_MUX”提出類別240S“S_ENC”,在對應(yīng)的硬件階層結(jié)構(gòu)中,模塊210H“top”提出模塊220H“H_MUX”,而模塊220H“H_MUX”提出模塊240H“H_ENC”。
      在圖2B所示的實施例中,每個類別與獨立函數(shù)(如”main”)都位于分開的文件中,同樣的每個模塊也都在分開的文件中,因此特定模塊的文件名稱可以被推導(dǎo)自對應(yīng)類別或函數(shù)的文件名稱,如h_mux.v推導(dǎo)自h_mux.cpp,因此如果有一具有特定軟件類別的特定文件,將軟件程序代碼斷言轉(zhuǎn)譯成硬件描述語言程序代碼的方法可以很容易的找到對應(yīng)該特定軟件類別的硬件程序模塊以及硬件文件,在本發(fā)明的另一實施例中,一個文件會包含多個類別或模塊,在這種情況下,將軟件程序代碼斷言轉(zhuǎn)譯成硬件描述語言程序代碼的方法會從軟件類別名稱推導(dǎo)出硬件程序模塊名稱,再搜尋包含硬件程序代碼130的文件中具有硬件程序模塊名稱的來源文件。
      圖3顯示軟件程序代碼110與硬件程序代碼130中另一種階層結(jié)構(gòu)的示意圖其中軟件實體與硬件實體都由區(qū)塊所組成,其中軟件實體與硬件實體在最頂層的地方都包含一個單一的頂層區(qū)塊,而軟件類別中的每個函數(shù)都包含一個單一頂層函數(shù)區(qū)塊310,同樣的每個硬件程序模塊中都有一個頂層模塊區(qū)塊320。
      每個函數(shù)區(qū)塊310與模塊區(qū)塊320都包含一個或多個序列區(qū)塊330,一個硬件程序模塊還會包含流程區(qū)塊340,流程區(qū)塊340有別于其他區(qū)塊并沒有類似的軟件類別。
      序列區(qū)塊330中的宣告被依序執(zhí)行,控制區(qū)塊350則被用來控制序列,雖然不同程序語言的文法不同,但是大多數(shù)軟件或硬件程序語言都包含條件控制區(qū)塊(如IF判斷)和重復(fù)執(zhí)行控制區(qū)塊(如FOR、WHILE陳述),在圖3中,區(qū)塊350S為C/C++軟件程序語言條件區(qū)塊(IF),而對應(yīng)的區(qū)塊350H為Verilog硬件程序語言條件區(qū)塊(IF-THEN-ELSE)。
      如上所述,將軟件程序代碼斷言轉(zhuǎn)譯成硬件描述語言程序代碼的方法會轉(zhuǎn)譯斷言并放入硬件程序代碼130中適當(dāng)?shù)奈恢?,本方法會使用在圖3的連接關(guān)系中的區(qū)塊來判斷插入硬件描述語言斷言的適當(dāng)位置,尤其是硬件程序代碼130中適當(dāng)?shù)牟迦胛恢帽惶囟榉吓c軟件程序代碼110中的區(qū)塊相關(guān)的規(guī)則。
      舉例來說,如果有一軟件程序代碼斷言被辨識出位于軟件程序代碼110內(nèi)的區(qū)塊X和區(qū)塊Y之間,則硬件描述語言斷言位置可能在硬件程序代碼130中對應(yīng)的區(qū)塊X’和區(qū)塊Y’之間,轉(zhuǎn)譯硬件描述語言技術(shù)領(lǐng)域的普通技術(shù)人員應(yīng)能看出轉(zhuǎn)譯得到的硬件描述語言程序代碼會和被轉(zhuǎn)譯軟件程序代碼中有很大差異,因此在本例中,硬件描述語言斷言的適當(dāng)位置也有可能在區(qū)塊X’和區(qū)塊Y’之后,或是在區(qū)塊X’和區(qū)塊Y’之中,插入斷言的適當(dāng)位置視軟件程序代碼110與硬件程序代碼130的結(jié)構(gòu)而定。
      圖4顯示一范例軟件程序代碼110中的軟件程序函數(shù)410S,以及對應(yīng)的硬件程序代碼130中的硬件程序模塊410H的示意圖。軟件程序函數(shù)410S包含兩個控制區(qū)塊”IF read”420S和”IF write”430S,而在對應(yīng)的硬件程序模塊410H中包含對應(yīng)的控制區(qū)塊420H與430H,這兩個控制區(qū)塊位于流程區(qū)塊440中,該流程區(qū)塊440在軟件程序函數(shù)410S沒有對應(yīng)的部份。
      軟件程序函數(shù)410S包含一斷言450”ASSERT(!(read &amp; m_empty))”,斷言450位于第一控制區(qū)塊420S之前,如圖4所示,硬件程序代碼130并不包含由軟件程序斷言450轉(zhuǎn)譯而成的硬件程序代碼斷言。
      圖5顯示如圖4所示的硬件程序代碼模塊410H中的具有軟件程序函數(shù)410S中的斷言450轉(zhuǎn)譯而來的硬件程序斷言510的示意圖,轉(zhuǎn)譯方法將硬件程序斷言510插入于模塊410H中第一控制區(qū)塊420H之前,以對應(yīng)軟件程序斷言450位于函數(shù)410S中第一控制區(qū)塊420S之前,如之前所述,在其他情況下硬件程序斷言510可能被插入在控制區(qū)塊420H中,或是在控制區(qū)塊420H之后,其適當(dāng)位置視軟件程序代碼110與硬件程序代碼130的結(jié)構(gòu)而定。
      圖5所示的范例較為單純,其中只有兩個序列區(qū)塊,而斷言位于第一序列區(qū)塊中,更復(fù)雜的范例會包含結(jié)合多層的序列與控制區(qū)塊,然而如前所述,軟件工具可將軟件程序代碼區(qū)塊對應(yīng)到硬件描述語言區(qū)塊,因此轉(zhuǎn)譯軟件程序代碼為硬件描述語言領(lǐng)域的普通技術(shù)人員應(yīng)能知道如何判斷硬件描述語言程序代碼中的插入硬件程序斷言的適當(dāng)位置。
      圖5顯示當(dāng)將軟件程序斷言轉(zhuǎn)譯為硬件描述語言時,硬件程序斷言被放置在硬件程序模塊中的位置,圖6顯示本發(fā)明所公開的方法如何對應(yīng)C/C++斷言形式到硬件描述語言形式,如前述所解釋,一個斷言用來表示一個預(yù)期會有效的情形,一個典型的軟件程序斷言610會以有三個參數(shù)的預(yù)處理器巨集指令的方式執(zhí)行,三個參數(shù)為預(yù)期保持真值的布爾代數(shù)620、輸出字串630,當(dāng)布爾代數(shù)非真值時則顯示輸出字串630、以及嚴(yán)重程度640,如果符號非真值時由嚴(yán)重程度來判斷是否要中斷執(zhí)行程序代碼。
      在圖6的范例中,軟件程序斷言610預(yù)期先進(jìn)先出讀取變數(shù)與空旗標(biāo)變數(shù)不會都是真值,如果兩個變數(shù)都是真值,則布爾代數(shù)620在執(zhí)行時不會計算為真值,這時描述字串630”S_FIFO::Access underflow”就會顯示,因為嚴(yán)重程度640為CRITICAL,所以程序代碼會中止執(zhí)行,中止可能為進(jìn)入除錯模式或離開程序,視ASSERT巨集指令的內(nèi)容而定。
      本發(fā)明所公開的斷言轉(zhuǎn)譯方法會將軟件程序斷言610轉(zhuǎn)譯為Verilog語言斷言650,圖6的范例中使用的Verilog語言版本為System Verilog withAssertions(SVA),SVA包含斷言的語言構(gòu)想,其中一種構(gòu)想為屬性(property),軟件程序代碼與硬件程序代碼有一點很重要的差異為硬件程序代碼會被定時,軟件可以在執(zhí)行時簡單的測試變數(shù)值來決定布爾代數(shù)是否為真值,但是在硬件的變數(shù)為信號,測試時需要參照時脈。
      因此,本發(fā)明所公開的轉(zhuǎn)譯方法將Verilog斷言以兩個部份實現(xiàn)屬性定義660,使斷言能參照時脈;以及ASSERT宣告670。屬性定義660定義了Verilog語言命名的屬性,在本范例中屬性具有一般名稱”fifol”,屬性定義660包含一ALWAYS區(qū)塊,該區(qū)塊包含一定時裝置,并且區(qū)塊中布爾代數(shù)680被預(yù)期為真值。
      ASSERT宣告670接著屬性定義660之后,其中預(yù)期為真值的條件變數(shù)為上述被定義的命名屬性,屬性定義這時包含布爾代數(shù)680,如果命名屬性不是真值,則ASSERT宣告670包含Verilog $FATAL宣告690和輸出字串695,$FATAL宣告690會顯示輸出字串695并以錯誤碼中斷模擬進(jìn)行。
      $FATAL宣告的使用可以視為對應(yīng)軟件程序斷言610中嚴(yán)重程度的CRITICAL,而軟件程序斷言中的嚴(yán)重程度NORMAL則會對應(yīng)到硬件程序斷言的Verilog $ERROR或$WARNING宣告,這些宣告一樣會顯示輸出字串但不會中斷模擬。
      另一種形式的軟件程序斷言則使用SWITCH或CASE控制宣告而不包含布爾代數(shù),取而代的的以斷言在控制宣告中的位置作為布爾代數(shù)使用,下列為這種軟件程序斷言的程序代碼范例switch(access_type)case Read;more codecase Write;more codedefaultASSERT(0,“invalid value for access_type”,NORMAL);在這段程序代碼中,在default之后的斷言只會在access_type并不等于Read或Write時才執(zhí)行,因此就等于布爾條件式((access_type?。絉ead)&amp;&amp;access_type?。絎rite))因為布爾條件式被隱含于斷言在SWITCH/CASE控制區(qū)塊內(nèi)的位置中,所以不需要包含布爾代數(shù)以作為ASSERT巨集指令的變數(shù),這種特定形式的軟件程序斷言能有效的對應(yīng)為SystemVerilog屬性宣告支援的$INSET運(yùn)算子,以下為對應(yīng)上列程序代碼的SystemVerilog斷言property invalid_access_type;@(posedge clk)not($inset(access_type,`Read,`Write))endpropertyassert property(invalid_access_type)else $error(″H_FIFOinvalid access type!”)圖7顯示本發(fā)明的一實施例中如圖1至圖6所述的轉(zhuǎn)換軟件程序斷言為硬件描述語言程序代碼的系統(tǒng)的區(qū)塊示意圖,讀取邏輯710自軟件來源文件110讀取軟件程序斷言450,同時判斷軟件程序斷言450位于軟件來源文件110的哪個軟件模塊410S中,第一定位邏輯720會判斷軟件程序斷言450與關(guān)聯(lián)的一或多個控制區(qū)塊的位置,如圖4的控制區(qū)塊420S和430S,在本發(fā)明的一實施例中,在軟件區(qū)塊的位置由第一定位邏輯720以區(qū)塊內(nèi)程序代碼的觀點來獲得,因為程序代碼指出了軟件區(qū)塊的位置,因此可視這個位置的區(qū)塊包含一軟件指示碼725,第一定位邏輯720會維持或設(shè)定包含軟件程序斷言450與軟件指示碼725的軟件區(qū)塊727。
      第二定位邏輯730搜尋硬件來源文件150以找出對應(yīng)于軟件區(qū)塊420S的硬件區(qū)塊420H,在本發(fā)明的一實施例中,硬件區(qū)塊的位置為以該區(qū)塊內(nèi)的硬件程序代碼的觀點來找出,也就是包含硬件指示碼735,因此硬件指示碼735對應(yīng)于軟件指示碼725,第二定位邏輯730會維持或設(shè)定包含硬件指示碼735的硬件區(qū)塊737。
      轉(zhuǎn)譯邏輯740將軟件程序斷言450轉(zhuǎn)譯為硬件程序斷言510,第三定位邏輯750則利用硬件指示碼735以找出硬件描述語言來源文件130中插入硬件程序斷言510的位置,插入邏輯760將硬件程序斷言510插入第三定位邏輯750決定的位置,最后系統(tǒng)輸出包含硬件程序斷言的硬件來源文件150。
      圖8顯示本發(fā)明的一實施例中轉(zhuǎn)換軟件程序斷言為硬件描述語言程序代碼方法800的流程圖,其中步驟810為從軟件來源文件中讀取包含軟件程序斷言的函數(shù)或類別,接下來步驟820,決定軟件程序斷言與組成函數(shù)或類別的各種區(qū)塊的相對位置,步驟830為讀取相對于函數(shù)或類別的硬件程序模塊,步驟840轉(zhuǎn)換軟件程序斷言到硬件程序斷言,之后步驟850與860為判斷硬件程序斷言的插入位置與在該位置插入硬件程序斷言。
      硬件程序斷言插入位置可能在硬件程序模塊內(nèi)或模塊外部,其中模塊內(nèi)部的斷言稱為行內(nèi)斷言(inline assertions),在這種情況下,插入的位置會與模塊內(nèi)的區(qū)塊有關(guān),并且基于軟件程序斷言在軟件模塊或函數(shù)內(nèi)的位置來判定,然而由于軟件程序函數(shù)形式與硬件程序模塊形式會在轉(zhuǎn)換時產(chǎn)生差異,程序轉(zhuǎn)譯領(lǐng)域普通技術(shù)人員應(yīng)能了解本發(fā)明的方法能容許這種情形而找出插入位置。
      上述中任何流程步驟或流程圖內(nèi)的區(qū)塊應(yīng)能理解為以包含一個或多個可執(zhí)行指令的模塊、段落、或部份程序代碼表示,藉以執(zhí)行流程中的邏輯函數(shù)或步驟,如軟件開發(fā)領(lǐng)域普通技術(shù)人員應(yīng)能了解,在本發(fā)明所公開的范圍中能有其他替代的實現(xiàn)方式,在這些實現(xiàn)方式中,函數(shù)可能不是按上述公開的順序執(zhí)行,其可能視函數(shù)功能而采用同步執(zhí)行或相反順序執(zhí)行。
      圖9顯示用以實施本發(fā)明的轉(zhuǎn)換軟件程序斷言為硬件描述語言程序代碼的方法700的通用計算機(jī)900的硬件區(qū)塊示意圖,計算機(jī)系統(tǒng)900包含許多廣為人知的元件,如處理器910、網(wǎng)絡(luò)接口920、存儲器930、以及非易失性存儲裝置940,其中非易失性存儲裝置940可以是硬盤、快閃隨機(jī)存儲器(flashRAM)、快閃只讀存儲器(flash ROM)、電子抹除式只讀存儲器(EEPROM)或其他類似功能的存儲裝置,這些元件通過總線950連接起來,在存儲器930中包含指令集,指令集由處理器910所執(zhí)行并實施本發(fā)明的轉(zhuǎn)換軟件程序斷言為硬件描述語言程序代碼的方法,在圖9中省略了許多傳統(tǒng)的因素,這些因素為普通技術(shù)人員所知因此不需要對計算機(jī)系統(tǒng)900的作業(yè)解釋太多。
      本發(fā)明的轉(zhuǎn)換軟件程序斷言為硬件描述語言程序代碼的方法和系統(tǒng)可以以軟件方式實施、硬件方式、或是兩者的結(jié)合,在本發(fā)明的部分實施例中,系統(tǒng)或方法由存放在存儲器中的軟件所實施,該軟件由適合的計算裝置中的微處理器所執(zhí)行,然而,本發(fā)明的方法與系統(tǒng)亦能植入任何給指令執(zhí)行系統(tǒng)或裝置使用或與的連接的計算機(jī)可讀取媒體,這樣的指令執(zhí)行系統(tǒng)包含任何計算裝置、包含處理器的系統(tǒng)、或是其他可存取或執(zhí)行指令執(zhí)行系統(tǒng)的指令集的系統(tǒng),在上述所公開的內(nèi)容中,計算機(jī)可讀取媒體可以是任何可包容、存放、通信、傳播或輸送程序以供執(zhí)行指令執(zhí)行系統(tǒng)所用或與的連接的裝置,舉例來說,計算機(jī)可讀取媒體可以是基于電子、磁性、光學(xué)、電磁、紅外線、或半導(dǎo)體技術(shù)的系統(tǒng)或傳播媒體,而不限于此。
      使用電子技術(shù)的計算機(jī)可讀取媒體包含具有一或多條線路的電連接或電子裝置、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、抹除式可編程只讀存儲器(EPROM或閃速存儲器),使用磁性技術(shù)的計算機(jī)可讀取媒體包含可攜帶式計算機(jī)磁片,使用光學(xué)技術(shù)的計算機(jī)可讀取媒體包含光纖或可攜帶式光學(xué)盤片(CD-ROM或其他格式的光盤),以上所述為示范所用而本發(fā)明不限于此。計算機(jī)可讀取媒體甚至可能包含紙張或其他可印出計算機(jī)程序的媒體,使用這種媒體時,程序可以使用電子技術(shù)自媒體上獲得、解讀、編譯或其他適當(dāng)?shù)奶幚矸绞?,如光學(xué)掃描,之后將成是存放于計算機(jī)存儲器中,另外在本發(fā)明實施例的范圍中,本發(fā)明還包含將實施例的功能植入硬件中的邏輯元件或是軟件設(shè)定媒體。
      綜上所述,雖然本發(fā)明已以較佳實施例公開如上,然其并非用以限定本發(fā)明。任何所屬技術(shù)領(lǐng)域中的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,可進(jìn)行各種更動與修改。因此,本發(fā)明的保護(hù)范圍以所提出的權(quán)利要求的范圍為準(zhǔn)。
      權(quán)利要求
      1.一種轉(zhuǎn)換一軟件程序語言來源文件中的斷言到硬件描述語言來源文件中的轉(zhuǎn)換方法,包含從一第一來源文件內(nèi)的軟件程序語言程序代碼中讀取一軟件程序斷言,其中該軟件程序斷言位于一第一區(qū)塊中;定位一第二區(qū)塊的位置,其中該第二區(qū)塊對應(yīng)該第一區(qū)塊,且位于一包含硬件描述語言來源程序代碼的第二來源文件內(nèi),該第二來源文件內(nèi)的程序代碼為轉(zhuǎn)譯該第一來源文件而來,其中不包含由該軟件程序斷言轉(zhuǎn)譯而來的一硬件程序斷言;轉(zhuǎn)換該軟件程序斷言為以硬件描述語言寫成的一硬件程序斷言;判斷該第二區(qū)塊內(nèi)的一插入位置以插入該硬件程序斷言;以及在該插入位置插入該硬件程序斷言。
      2.如權(quán)利要求1所述的轉(zhuǎn)換方法,其中上述的第一來源文件包含最少一頂端軟件實體,而該第二來源文件包含最少一頂端硬件實體,其中每一實體包含最少一區(qū)塊,該轉(zhuǎn)換方法還包含判斷該軟件程序斷言位于哪一個該頂端軟件實體中;判斷該軟件程序斷言與包含該軟件程序斷言的該頂端軟件實體內(nèi)其他區(qū)塊的一相對位置;判斷哪一該頂端硬件實體對應(yīng)于包含該軟件程序斷言的該頂端軟件實體;以及基于該相對位置判斷在對應(yīng)的該頂端硬件實體內(nèi)用以插入該硬件程序斷言的該插入位置。
      3.如權(quán)利要求1所述的轉(zhuǎn)換方法,還包含定位該第一區(qū)塊內(nèi)的該軟件程序斷言的位置,該第一區(qū)塊位于該第一來源文件內(nèi)的該頂端軟件實體中;以及判斷包含對應(yīng)該頂端軟件實體的該頂端硬件實體的該第二來源文件的文件名稱。
      4.如權(quán)利要求3所述的轉(zhuǎn)換方法,其中該頂端軟件實體為一軟件程序語言函數(shù),該頂端硬件實體為一硬件描述語言模塊。
      5.如權(quán)利要求4所述的轉(zhuǎn)換方法,其中該函數(shù)與該模塊都包含最少一區(qū)塊,該轉(zhuǎn)換方法還包含判斷該軟件程序斷言相對于在同一函數(shù)內(nèi)的其他區(qū)塊的一軟件程序斷言位置;判斷該頂端硬件實體內(nèi)的多個區(qū)塊的多個區(qū)塊位置;判斷一插入位置,該插入位置與在同一模塊內(nèi)的該多個區(qū)塊的相對位置關(guān)系對應(yīng)于該軟件程序斷言位置;以及插入該硬件程序斷言于該插入位置。
      6.如權(quán)利要求1所述的轉(zhuǎn)換方法,還包含讀取一第一組來源文件,該第一組來源文件包含多個以軟件程序語言寫成的來源文件,其中還包含該第一來源文件;建立一第一階層結(jié)構(gòu)用以表示該第一組來源文件內(nèi)的程序代碼文件階層結(jié)構(gòu);以及判斷一第二組來源文件內(nèi)的該第二來源文件,該第二組來源文件由該第一組來源文件轉(zhuǎn)譯而來,其中該第二來源文件在該第二組來源文件的階層結(jié)構(gòu)位置對應(yīng)于該第一來源文件在該第一階層結(jié)構(gòu)的位置。
      7.如權(quán)利要求1所述的轉(zhuǎn)換方法,其中上述的軟件程序斷言包含一布爾代數(shù)與一輸出字串,而上述的硬件程序斷言包含一屬性定義。
      8.一種轉(zhuǎn)換一第一來源文件中的最少一斷言到一第二來源文件中的轉(zhuǎn)換系統(tǒng),其中該第一來源文件包含用軟件程序語言寫成的來源碼,該第二來源文件包含硬件描述語言來源碼,該轉(zhuǎn)換系統(tǒng)包含一讀取邏輯,用以自該第一來源文件讀取一軟件程序斷言;一第一定位邏輯,設(shè)定一第一區(qū)塊,該第一區(qū)塊包含該第一來源文件內(nèi)的該軟件程序斷言與最少一軟件位置指示碼,該第一定位邏輯用以判斷該軟件程序斷言的一相對位置,該相對位置于該第一區(qū)塊內(nèi)并與該軟件位置指示碼相關(guān);一第二定位邏輯,設(shè)定一第二區(qū)塊,該第二區(qū)塊位于該第二來源文件內(nèi)并對應(yīng)于該第一區(qū)塊,該第二定位邏輯搜尋該第二來源文件內(nèi)的最少一硬件位置指示碼,該硬件位置指示碼對應(yīng)于該軟件位置指示碼;一轉(zhuǎn)譯邏輯,用以轉(zhuǎn)譯該軟件程序斷言為一硬件程序斷言;一第三定位邏輯,用以判斷該第二來源文件內(nèi)的一插入位置,該插入位置與該第二區(qū)塊內(nèi)的該最少一硬件位置指示碼相關(guān);以及一插入邏輯用以插入該硬件程序斷言至該插入位置。
      9.如權(quán)利要求8所述的轉(zhuǎn)換系統(tǒng),其中上述的第一來源文件包含最少一頂端軟件實體,而該第二來源文件包含最少一頂端硬件實體,其中每一實體包含最少一區(qū)塊,該轉(zhuǎn)換系統(tǒng)還包含一邏輯元件用以判斷該軟件程序斷言位于哪一個該頂端軟件實體中;一邏輯元件用以判斷該軟件程序斷言與包含該軟件程序斷言的該頂端軟件實體內(nèi)其他區(qū)塊的一相對位置;一邏輯元件用以判斷哪一該頂端硬件實體對應(yīng)于包含該軟件程序斷言的該頂端軟件實體;以及一邏輯元件基于該相對位置判斷在對應(yīng)的該頂端硬件實體內(nèi)用以插入該硬件程序斷言的該插入位置。
      10.如權(quán)利要求8所述的轉(zhuǎn)換系統(tǒng),還包含一邏輯元件用以定位該第一區(qū)塊內(nèi)的該軟件程序斷言的位置,該第一區(qū)塊位于該第一來源文件內(nèi)的該頂端軟件實體中;以及一邏輯元件用以判斷包含對應(yīng)該頂端軟件實體的該頂端硬件實體的該第二來源文件的文件名稱。
      11.如權(quán)利要求10所述的轉(zhuǎn)換系統(tǒng),其中該頂端軟件實體為一軟件程序語言函數(shù),該頂端硬件實體為一硬件描述語言模塊。
      12.如權(quán)利要求11所述的轉(zhuǎn)換系統(tǒng),其中該頂端軟件實體與該頂端硬件實體包含最少一區(qū)塊,該轉(zhuǎn)換系統(tǒng)還包含一邏輯元件用以判斷該軟件程序斷言相對于在同一函數(shù)內(nèi)的其他區(qū)塊的一軟件程序斷言位置;一邏輯元件用以判斷該頂端硬件實體內(nèi)的多個區(qū)塊的多個區(qū)塊位置;一邏輯元件用以判斷一插入位置,該插入位置與在同一模塊內(nèi)的該多個區(qū)塊的相對位置關(guān)系對應(yīng)于該軟件程序斷言位置;以及一邏輯元件用以插入該硬件程序斷言于該插入位置。
      13.如權(quán)利要求8所述的轉(zhuǎn)換系統(tǒng),還包含一邏輯元件用以讀取一第一組來源文件,該第一組來源文件包含多個以軟件程序語言寫成的來源文件,其中還包含該第一來源文件;一邏輯元件用以建立一第一階層結(jié)構(gòu)用以表示該第一組來源文件內(nèi)的程序代碼文件階層結(jié)構(gòu);以及一邏輯元件用以判斷一第二組來源文件內(nèi)的該第二來源文件,該第二組來源文件由該第一組來源文件轉(zhuǎn)譯而來,其中該第二來源文件在該第二組來源文件的階層結(jié)構(gòu)位置對應(yīng)于該第一來源文件在該第一階層結(jié)構(gòu)的位置。
      14.如權(quán)利要求8所述的轉(zhuǎn)換系統(tǒng),其中上述的軟件程序斷言包含一布爾代數(shù)與一輸出字串,而上述的硬件程序斷言包含一屬性定義。
      15.一種轉(zhuǎn)換一軟件程序語言來源文件中的斷言到硬件描述語言來源文件中的方法,包含從一第一來源文件內(nèi)的軟件程序語言程序代碼中讀取一軟件程序斷言;定位一軟件程序函數(shù)內(nèi)該軟件程序斷言的位置;自一第二來源文件讀取一硬件程序模塊,該硬件程序模塊對應(yīng)該軟件程序函數(shù),該第二來源文件包含由該第一來源文件的來源程序代碼轉(zhuǎn)譯而來的硬件描述語言來源程序代碼,其中該第二來源文件并不包含由該第一來源文件轉(zhuǎn)譯而來的硬件程序斷言;轉(zhuǎn)換該軟件程序斷言為以硬件描述語言寫成的一硬件程序斷言;基于該軟件程序函數(shù)的位置判斷在該硬件程序模塊的一插入位置,用以插入該硬件程序斷言;以及在該插入位置插入該硬件程序斷言。
      16.如權(quán)利要求15所述的轉(zhuǎn)換方法,其中上述該軟件程序函數(shù)與該硬件程序模塊都包含最少一區(qū)塊,該轉(zhuǎn)換方法還包含判斷該軟件程序斷言相對于該軟件程序函數(shù)內(nèi)其他區(qū)塊的一軟件程序斷言位置;判斷該硬件程序模塊內(nèi)多個區(qū)塊的多個區(qū)塊位置;判斷該多個區(qū)塊位置之中對應(yīng)到該軟件程序斷言位置的一對應(yīng)區(qū)塊位置;以及插入該硬件程序斷言于該對應(yīng)區(qū)塊位置。
      17.如權(quán)利要求15所述的轉(zhuǎn)換方法,其中上述的軟件程序斷言包含一布爾代數(shù)與一輸出字串,而上述的硬件程序斷言包含一屬性定義。
      全文摘要
      本發(fā)明提供一種將軟件程序語言來源文件中的斷言轉(zhuǎn)換到硬件描述語言來源文件中的系統(tǒng)及方法,在本發(fā)明方法一開始,第一來源文件具有以軟件程序語言寫成的軟件程序代碼,第二來源文件具有從第一來源文件中的軟件程序代碼轉(zhuǎn)譯而來的硬件描述語言程序代碼,但不包含由第一來源文件中的程序代碼轉(zhuǎn)譯過來的斷言,本發(fā)明的方法包含從第一來源文件中讀取軟件程序斷言;定位第二來源文件中第二區(qū)塊的位置,其中第二區(qū)塊對應(yīng)第一來源文件中包含軟件程序斷言的第一區(qū)塊;轉(zhuǎn)換軟件程序斷言為以硬件描述語言寫成的硬件程序斷言;判斷硬件程序代碼文件中插入程序斷言的第二區(qū)塊的位置;以及在該位置插入硬件程序斷言。
      文檔編號G06F9/44GK101055523SQ20071010104
      公開日2007年10月17日 申請日期2007年4月23日 優(yōu)先權(quán)日2006年6月1日
      發(fā)明者余大偉, 張征, 陳琦 申請人:威盛電子股份有限公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1