第6講 Verilog HDL綜合_第1頁
第6講 Verilog HDL綜合_第2頁
第6講 Verilog HDL綜合_第3頁
第6講 Verilog HDL綜合_第4頁
第6講 Verilog HDL綜合_第5頁
已閱讀5頁,還剩56頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、f=ab 安徽師范大學安徽師范大學20152015第第6講講 Verilog HDL綜合綜合與驗證與驗證邏輯綜合高級驗證6.1 邏輯綜合對邏輯綜合的概念進行定義,解釋邏輯綜合的優(yōu)點。對邏輯綜合的概念進行定義,解釋邏輯綜合的優(yōu)點。弄清楚哪些弄清楚哪些Verilog HDL結(jié)構(gòu)和操作符能用于邏輯綜結(jié)構(gòu)和操作符能用于邏輯綜合,理解邏輯綜合工具如何解釋這些結(jié)構(gòu)。合,理解邏輯綜合工具如何解釋這些結(jié)構(gòu)。解釋使用邏輯綜合進行設(shè)計的典型流程,描述基于邏解釋使用邏輯綜合進行設(shè)計的典型流程,描述基于邏輯綜合設(shè)計流程的主要組成部分。輯綜合設(shè)計流程的主要組成部分。描述如何驗證由邏輯綜合生成的門級網(wǎng)表。描述如何驗證由邏

2、輯綜合生成的門級網(wǎng)表。了解編寫高效率了解編寫高效率RTL描述的各種技巧。描述的各種技巧。描述能為邏輯綜合提供最佳門級網(wǎng)表的分割技術(shù)。描述能為邏輯綜合提供最佳門級網(wǎng)表的分割技術(shù)。使用邏輯綜合的方法進行組合電路和時序電路的設(shè)計。使用邏輯綜合的方法進行組合電路和時序電路的設(shè)計。 6.1.1 什么是邏輯綜合簡而言之,邏輯綜合是在標準單元庫和特定的設(shè)計約束的基礎(chǔ)上,把設(shè)計的高層次描述轉(zhuǎn)換成優(yōu)化的門級網(wǎng)表的過程。標準單元庫可以包含簡單的單元,例如與門、或門和或非門等基本邏輯門,也可以包含宏單元,例如加法器、多路選擇器和特殊的觸發(fā)器。最初的時候設(shè)計師采用人力作為開發(fā)核心。計算機輔助邏輯綜合工具的出現(xiàn)已經(jīng)把高

3、層次描述向邏輯門的轉(zhuǎn)化過程自動化了。設(shè)計者不需要在腦子里實現(xiàn)邏輯綜合,他們現(xiàn)在可以把精力集中在體系結(jié)構(gòu)的方案、設(shè)計的高層次描述、精確的設(shè)計約束和標準單元庫中的單元優(yōu)化上。這些都作為計算機輔助邏輯綜合工具的輸入。 6.1.2 邏輯綜合對數(shù)字設(shè)計行業(yè)的影響 手動設(shè)計的限制手動設(shè)計的限制:1.對于大規(guī)模設(shè)計來說,手動轉(zhuǎn)換更容易帶來人為的錯誤。一個很小的邏輯門的遺漏可能意味著整個模塊的重新設(shè)計。2.設(shè)計者一直都不能確信設(shè)計約束是否會得到滿足,直到完成門級實現(xiàn)并進行了測試。3.把高層次設(shè)計轉(zhuǎn)換成邏輯門占去了整個設(shè)計周期的大部分時間。4.如果門級設(shè)計不滿足要求,模塊的重新設(shè)計時間非常長。5.推測難以驗證。

4、例如,設(shè)計者設(shè)計了一個以20 ns時鐘周期工作的門級模塊。如果設(shè)計者想分析該電路是否能夠優(yōu)化到以15 ns的時鐘周期運行,整個模塊不得不重新設(shè)計。因此,為了驗證這種推測,需要重新進行設(shè)計。6.每個設(shè)計者以不同的方式實現(xiàn)模塊設(shè)計,設(shè)計風格缺乏一致性。對于大規(guī)模設(shè)計來說,這意味著其中的各個小模塊可能是最優(yōu)化的,但是整個設(shè)計卻不是最優(yōu)化的。7.如果在最終的門級設(shè)計中發(fā)現(xiàn)了一個錯誤,可能需要重新設(shè)計數(shù)以千計的邏輯門。8.庫單元的時序、面積和功耗是與特定制造工藝相關(guān)的。因此,如果在門級設(shè)計完成之后,公司改變IC制造商,這可能意味著重新設(shè)計整個電路,還可能要改變設(shè)計方法。9.設(shè)計技術(shù)是不可能重用的。設(shè)計是

5、特定于工藝的,難以改變,也難以重用。 1.采用高層次設(shè)計方法,人為的錯誤會更少,因為設(shè)計是在更高的抽象層次描述的。2.高層次設(shè)計無需過多關(guān)注設(shè)計約束。邏輯綜合工具將把高層次設(shè)計轉(zhuǎn)換到門級網(wǎng)表,并確保滿足所有的約束。如果不能滿足,設(shè)計者就回去修改高層次設(shè)計,重復(fù)這一過程,直到獲得滿足時序、面積和功耗約束的門級網(wǎng)表為止。3.從高層次設(shè)計到邏輯門的轉(zhuǎn)換非常迅速。有了這方面的提高,設(shè)計周期可以大大縮短。以前耗費數(shù)月的設(shè)計現(xiàn)在可能僅需數(shù)小時或數(shù)天就能完成。4.模塊重新設(shè)計所需的反復(fù)時間更短,因為改變僅需在寄存器傳輸級完成;然后,設(shè)計只需簡單地重新綜合獲得門級網(wǎng)表。5.推測容易驗證。高層次描述不需要改變。

6、設(shè)計者只需把時序約束從20 ns改變到15 ns,并重新綜合設(shè)計,以獲得時鐘周期優(yōu)化為15 ns的新門級網(wǎng)表。6.邏輯綜合工具在整體上優(yōu)化了設(shè)計,這樣就消除了由于不同模塊之間和局部優(yōu)化的各個設(shè)計之間的設(shè)計風格不同所帶來的問題。7.如果發(fā)現(xiàn)門級設(shè)計中有錯誤,設(shè)計者回頭修改高層次描述以消除錯誤。然后,高層次描述再次讀入邏輯綜合工具,自動生成新的門級描述。8.邏輯綜合工具允許進行與工藝無關(guān)的設(shè)計??梢栽诓豢紤]IC制造工藝的情況下編寫高層次描述。邏輯綜合工具使用某個IC制造商提供的標準單元庫中的單元,把設(shè)計轉(zhuǎn)換成邏輯門。如果改變工藝或者IC制造商,設(shè)計者只需在新工藝的標準單元庫的基礎(chǔ)上使用邏輯綜合,重

7、新把設(shè)計綜合到邏輯門。9.由于設(shè)計描述與工藝無關(guān),所以設(shè)計重用變成了可能。例如,如果微處理器中I/O模塊的功能不改變,該I/O模塊的RTL描述可以用于同系列微處理器的設(shè)計中。如果工藝改變了,綜合工具只需映射到需要的工藝。 自動邏輯綜合工具解決方式:6.1.3 Verilog HDL綜合為了邏輯綜合的目的,目前都在寄存器傳輸級(RTL)層次用硬件描述語言(HDL)編寫設(shè)計。術(shù)語RTL用于表示HDL的一種風格,該風格的HDL描述采用了數(shù)據(jù)流和行為結(jié)構(gòu)相結(jié)合的方式。邏輯綜合工具接受寄存器傳輸級HDL描述并把它轉(zhuǎn)化為優(yōu)化的門級網(wǎng)表。Verilog和VHDL是兩種最流行的在RTL級上描述功能的HDL語言

8、。 本章討論基于RTL的Verilog HDL邏輯綜合。用于把行為描述轉(zhuǎn)換成RTL描述的行為綜合工具發(fā)展緩慢,但是基于RTL的綜合已經(jīng)成為當前最流行的設(shè)計方法。因此,本章只討論基于RTL的綜合。 Verilog結(jié)構(gòu) 可綜合的verilog結(jié)構(gòu)如下所示,使用時有一定的限制。 Verilog操作符Verilog中幾乎所有的操作符都可用于邏輯綜合。表14.2是所有可用于邏輯綜合的操作符。只有 = 和 != 這種與x和z相關(guān)的操作符不能用于邏輯綜合,因為等于邏輯值x和z在邏輯綜合中沒有實際的意義。編寫表達式時,推薦使用圓括號來使邏輯更清晰,達到預(yù)期的目的。如果依賴操作符的

9、優(yōu)先級,邏輯綜合工具有如果依賴操作符的優(yōu)先級,邏輯綜合工具有可能產(chǎn)生不盡人意的邏輯結(jié)構(gòu)可能產(chǎn)生不盡人意的邏輯結(jié)構(gòu)。 部分Verilog結(jié)構(gòu)的解釋 綜合如何轉(zhuǎn)換 賦值語句賦值語句賦值結(jié)構(gòu)是在RTL級用于描述組合邏輯的最基本的結(jié)構(gòu)。下例是一個使用賦值語句的邏輯表達式:它通常被轉(zhuǎn)換成下面的門級電路實現(xiàn): 如果a,b,c和out是兩位的向量1:0,那么上面的賦值語句通常會被轉(zhuǎn)換成兩個完全相同的電路,它們分別對應(yīng)其中一位。 如果用到算術(shù)操作符,那么每個算術(shù)操作符由邏輯綜合工具中可用的算術(shù)運算硬件模塊實現(xiàn)。例如設(shè)計一個一位全加器,假設(shè)邏輯綜合工具內(nèi)部有一位全加器可用,邏輯綜合工具通常直接調(diào)

10、用內(nèi)部的全加器模塊,如果是綜合多位加法器,綜合工具會進行優(yōu)化,設(shè)計者可能得到一個不同的圖。如果使用了條件操作符?,就會推斷出多路選擇器電路。如下例:綜合后:if-else語句語句 單個if-else語句被轉(zhuǎn)換成多路選擇器,它的控制信號就是if子句中的信號或者變量。一般來說,多個if-else-if語句不會綜合成龐大的多路選擇器。case語句語句 case語句也可以用于生成多路選擇器。龐大的case語句可以用來生成龐大的多路選擇器。 for循環(huán)語句循環(huán)語句 for循環(huán)可用于產(chǎn)生級聯(lián)的鏈式組合邏輯。 always語句語句 always語句可用于生成時序和組合邏輯。對于時序邏輯來說,always語句

11、必須由時鐘信號clk的變化所控制。如下例: 語句: 這個語句被推斷為一個正跳變沿觸發(fā)的D觸發(fā)器 : 對于組合邏輯來說,always語句必須由clk,reset或者preset之外的其他信號觸發(fā)(所有的觸發(fā)信號都必須寫在敏感列表中)。 函數(shù)語句函數(shù)語句 函數(shù)綜合成具有一個輸出變量的組合模塊。輸出變量可以是標量或者向量。 6.1.4 邏輯綜合流程 從RTL到邏輯門設(shè)計者在高層次上使用RTL結(jié)構(gòu)描述設(shè)計。設(shè)計者在功能驗證上耗費一定的時間,以確保RTL描述的功能正確無誤。功能驗證之后,再把RTL描述輸入到邏輯綜合工具中。 RTL描述被邏輯綜合工具轉(zhuǎn)換為一個未經(jīng)優(yōu)化的內(nèi)部中間表示。這一過程稱為翻譯。翻譯

12、相對簡單,它使用的技術(shù)與14.3.3節(jié)中討論的技術(shù)類似。翻譯器讀入Verilog RTL描述中的基本原語和操作。翻譯過程中不考慮面積、時序和功耗等設(shè)計約束。在本過程中,邏輯綜合工具僅完成簡單的內(nèi)部資源分配。翻譯過程產(chǎn)生了設(shè)計的未經(jīng)優(yōu)化的中間表示。邏輯綜合工具根據(jù)內(nèi)部的數(shù)據(jù)結(jié)構(gòu)在內(nèi)部表示設(shè)計。未經(jīng)優(yōu)化的中間表示是用戶所無法理解的。 刪除冗余邏輯,優(yōu)化中使用了大量與工藝無關(guān)的布爾邏輯優(yōu)化技術(shù),它是邏輯綜合中非常重要的一步,產(chǎn)生該設(shè)計優(yōu)化后的內(nèi)部表示。 在這一步驟中,綜合工具接受內(nèi)部表示,并使用工藝庫中提供的單元,用邏輯門實現(xiàn)該內(nèi)部表示。換言之,設(shè)計被映射到需要的目標工藝。 工藝映射完成之后,生成由

13、目標工藝部件所描述的優(yōu)化后的門級網(wǎng)表。如果該網(wǎng)表滿足要求的約束,它就被送到ABC公司去制作最終的版圖。否則,設(shè)計者要修改RTL描述或者重新對設(shè)計給出約束,以獲得需要的結(jié)果。反復(fù)這個過程,直到網(wǎng)表滿足所要求的約束。 工藝庫 單元的集合稱為工藝庫。綜合工具使用這些單元來實現(xiàn)設(shè)計。綜合工具產(chǎn)生的結(jié)果的質(zhì)量通常由工藝庫中可以使用的單元所決定。如果工藝庫中可供選擇的單元有限,綜合工具就不能在時序、面積和功耗等方面做充分的優(yōu)化。 設(shè)計約束 設(shè)計約束通常包含下列內(nèi)容: 1. 時序時序。電路必須滿足一定的時序要求。一個內(nèi)部的靜態(tài)時序分析器會檢查時序。 2. 面積面積。最終的版圖面積不能超過一定的限制。 3.

14、功耗功耗。電路功耗不能超過一定的界限。 一般來說,面積和時序約束之間有一個相反的關(guān)系。 示例設(shè)計說明 數(shù)值比較器檢查一個數(shù)是否大于、等于或者小于另一個數(shù)。例如,設(shè)計一個具有如下說明的四位數(shù)值比較器IC芯片: 設(shè)計名稱是magnitude_comparator。 輸入A和B是4位輸入,輸入端A和B不會出現(xiàn)x或者z值。 如果A大于B,那么輸出A_gt_B為真。 如果A小于B,那么輸出A_lt_B為真。 如果A等于B,那么輸出A_eq_B為真。 數(shù)值比較器電路必須盡可能快,為了提高速度,可以犧牲面積。 RTL描述工藝庫設(shè)計約束 根據(jù)設(shè)計說明,對目標工藝abc_100來說,設(shè)計應(yīng)該盡可能快。這里沒有面

15、積約束,因此只有一個設(shè)計約束:邏輯綜合 邏輯綜合工具讀取數(shù)值比較器的RTL描述。把針對目標工藝abc_100的設(shè)計約束和工藝庫提供給邏輯綜合工具。邏輯綜合工具進行必要的優(yōu)化,并產(chǎn)生針對abc_100工藝優(yōu)化后的門級描述。最終優(yōu)化后的門級描述 邏輯綜合工具產(chǎn)生最終的門級描述。門級電路的邏輯圖見后。 邏輯綜合工具為該電路生成的門級Verilog描述如后所示。端口是以名稱關(guān)聯(lián)的方式互相連接的。IC制造 6.1.5 門級網(wǎng)表的驗證邏輯綜合工具生成的優(yōu)化后的門級網(wǎng)表必須驗證其功能的正確性。另外,如果時序和面積約束太嚴格,綜合工具有時不能完全滿足這些要求,這時需要在門級網(wǎng)表層次進行獨立的時序驗證 。功能驗

16、證:功能驗證:最初為設(shè)計編寫的RTL模塊和其綜合后的門級模塊可以用同一個測試激勵模塊進行測試。比較它們的輸出結(jié)果,找出其中的不一致。 即對其功能進行驗證。對于門級描述,必須有一個由工藝廠商提供的仿真庫支持。時需驗證:時需驗證:通常使用時序仿真或者靜態(tài)時序驗證工具來檢查門級網(wǎng)表的時序。如果違反任何時序約束,設(shè)計者必須重新設(shè)計RTL模塊或者改變邏輯綜合的設(shè)計約束。整個流程循環(huán)反復(fù),直到滿足時序要求為止。 6.1.6 邏輯綜合建模技巧:Verilog編碼風格 使用有意義的信號和變量名稱使用有意義的信號和變量名稱 信號和變量的命名應(yīng)該具有意義,以便代碼自身具有清晰的注釋信息,增強可讀性。避免混合使用上

17、升沿和下降沿觸發(fā)的觸發(fā)器避免混合使用上升沿和下降沿觸發(fā)的觸發(fā)器 混合使用上升沿和下降沿觸發(fā)的觸發(fā)器可能在時鐘樹中引入反向器和緩沖器。一般不希望出現(xiàn)這種情況,因為這將在電路中引入時鐘偏斜。使用基本構(gòu)造模塊與使用連續(xù)賦值語句的對比 RTL描述中使用基本的構(gòu)造模塊和使用連續(xù)assign語句各有優(yōu)缺點。連續(xù)assign語句是一種非常簡潔的表示功能的方式,通常能生成性能很好的隨機邏輯電路。然而,最終的邏輯結(jié)構(gòu)并不一定是對稱的。調(diào)用基本構(gòu)造模塊可以產(chǎn)生對稱的設(shè)計,并且邏輯綜合工具能夠更高效地優(yōu)化小模塊。然而,調(diào)用構(gòu)造模塊是一種不太簡潔的設(shè)計描述方式;它制約了針對變化工藝的重定向,并且通常會降低仿真器性能。

18、 調(diào)用多路選擇器與使用調(diào)用多路選擇器與使用if-else或者或者case語句的對比語句的對比 if-else和case語句常常被綜合成硬件中的多路選擇器。如果需要結(jié)構(gòu)化的實現(xiàn),最好直接使用多路選擇器來實現(xiàn)模塊,因為if-else或者case語句可能使綜合工具產(chǎn)生不可預(yù)期的隨機邏輯。調(diào)用多路選擇器的方式更容易控制,綜合速度也更快,但它存在依賴于工藝的不利因素,并且表達多路選擇器的代碼比較長。另一方面,if-else和case語句可以簡潔地表示多路選擇器,常用于建立不依賴工藝的RTL描述。使用圓括號優(yōu)化邏輯結(jié)構(gòu)使用圓括號優(yōu)化邏輯結(jié)構(gòu) 設(shè)計者可以使用圓括號將邏輯組合起來,以便于控制最終的結(jié)構(gòu)。使用圓

19、括號也提高了Verilog描述的可讀性。 使用算術(shù)操作符,使用算術(shù)操作符, 和與使用現(xiàn)有構(gòu)造模塊的對比和與使用現(xiàn)有構(gòu)造模塊的對比 乘、除和取模操作在邏輯和面積上的實現(xiàn)代價很高。然而,這些算術(shù)操作符能夠以不依賴于工藝的簡明方式實現(xiàn)所需的功能。另一方面,設(shè)計自定義模塊來完成乘、除和取模操作,可能要花費大量的時間,并且RTL描述會變得與工藝相關(guān)。注意多條賦值語句對同一個變量賦值的情況注意多條賦值語句對同一個變量賦值的情況 多條賦值語句對同一個變量賦值可能導(dǎo)致生成意料之外的電路。前面的賦值可能被忽略,只有最后一次賦值起作用。 顯式地定義顯式地定義if-else或者或者case語句語句 在if-else

20、或者case語句中必須說明各種可能的條件分支,否則可能產(chǎn)生電平敏感的鎖存器鎖存器,而不是多路選擇器。6.1.7 設(shè)計劃分水平劃分 使用位劃分方式為邏輯綜合工具提供更小的模塊進行優(yōu)化,這種方式稱為水平劃分。它降低了問題的復(fù)雜度,并為每個模塊產(chǎn)生了更為優(yōu)化的結(jié)果。 垂直劃分 意味著把模塊按功能劃分成更小的子模塊。這種方式不同于水平劃分。在水平劃分中,所有模塊完成同一個功能。在垂直劃分中,每一個模塊完成不同的功能。假設(shè)前面描述的4位ALU是一個具有加、減、右移和左移功能的四功能ALU。每一個模塊在功能上都不相同,這就是垂直劃分。 并行化設(shè)計結(jié)構(gòu) 采用并行化結(jié)構(gòu)的設(shè)計技術(shù)需要用更多的資源來生成運行速度

21、更快的設(shè)計。使用更多的邏輯單元可以將順序操作轉(zhuǎn)換成并行操作,以提高運行速度。超前進位全加器就是一個典型的例子。 將超前進位加法器與脈動進位加法器做一個比較。脈動進位加法器實際上是串行的。四位脈動進位加法器產(chǎn)生所有的和以及進位位,共需要9個門的延遲時間。另一方面,假設(shè)有5輸入的與門和或門可以使用,超前進位加法器在4個門延遲的時間內(nèi)就能產(chǎn)生所有的和以及進位位。因此,使用更多的邏輯門來建立超前進位單元,其運行速度比n位脈動進位加法器更快 設(shè)計約束指定若想得到最理想的設(shè)計,設(shè)計約束與高效率的HDL描述一樣重要。時序、面積、功耗和環(huán)境參數(shù),例如輸入驅(qū)動強度、輸出負載、輸入到達時間等的精確描述對產(chǎn)生最優(yōu)的

22、門級網(wǎng)表至關(guān)重要。違反正確的約束或者忽略約束都可能導(dǎo)致非最優(yōu)化的設(shè)計。必須小心地指定設(shè)計約束。 6.1.7 時序電路綜合舉例設(shè)計說明電路要求有限狀態(tài)機Verilog描述工藝庫設(shè)計約束邏輯綜合優(yōu)化的門級網(wǎng)表驗證設(shè)計說明設(shè)計一個簡單的數(shù)字電路用于電子的報紙售賣機的投幣器。 假設(shè)報紙價格為15分。 投幣器只能接受5分和1角的硬幣。 必須提供適當數(shù)目的零錢,投幣器不找錢。 合法的硬幣組合包括1個5分的硬幣和1個1角的硬幣,3個5分的硬幣,1個1角的硬幣和1個5分的硬幣。2個1角的硬幣是合法的,但是投幣器不找錢。電路要求 必須為該數(shù)字電路設(shè)置一些要求,如下所示: 當投入硬幣時,一個兩位的信號coin1:

23、0被傳送到數(shù)字電路。該信號在全局clock信號的下一個下降沿取值,并且準確地保持一個時鐘周期。 數(shù)字電路的輸出是一位的。每次當投入的硬幣總數(shù)為15分或者超過15分時,輸出信號newspaper變?yōu)楦唠娖?,并且保持一個時鐘周期。售賣機的門也被打開。 可以用一個reset信號復(fù)位有限狀態(tài)機。假設(shè)為同步復(fù)位。 有限狀態(tài)機(FSM) 采用有限狀態(tài)機來實現(xiàn)電路: 輸入:2位,coin1:0。沒有硬幣時,x0 = 2b00;有一個5分的硬幣時,x5 = 2b01;有一個1角的硬幣時,x10 = 2b10。 輸出:1位,newspaper。當newspaper = 1b1時,打開門。 狀態(tài):4個狀態(tài)。s0

24、= 0分;s5 = 5分;s10 = 10分;s15 = 15分。Verilog描述對有限狀態(tài)機進行描述。詳細的源碼參見書中。工藝庫至網(wǎng)表工藝庫 在14.4.1節(jié)中定義了abc_100工藝。這里將使用abc_100作為目標工藝庫。abc_100包含一系列的庫單元:設(shè)計約束 本設(shè)計中用到的惟一約束為時序臨界(timing critical)約束。通常情況下需要更詳細的設(shè)計約束。邏輯綜合 使用指定的設(shè)計約束和工藝庫來綜合RTL描述并得到優(yōu)化的門級網(wǎng)表。優(yōu)化的門級網(wǎng)表 使用邏輯綜合把RTL描述映射到abc_100工藝。產(chǎn)生的優(yōu)化的門級網(wǎng)表。驗證 把測試激勵施加到原先的RTL模塊上,以測試所有可能的硬

25、幣組合。該激勵模塊也可用于測試優(yōu)化的門級網(wǎng)表。測試模塊仿真輸出6.1.8 小結(jié) 邏輯綜合是把設(shè)計的高層次描述轉(zhuǎn)換成優(yōu)化的、使用工藝庫中單元描述的門級描述。計算機輔助邏輯綜合工具大大縮短設(shè)計周期,提高了生產(chǎn)力。它們使設(shè)計者能編寫與工藝無關(guān)的高層次描述,并且生成與工藝相關(guān)的、優(yōu)化的門級網(wǎng)表。組合和時序的RTL描述都可以綜合。邏輯綜合工具接受寄存器傳輸級(RTL)的高層次描述。并非所有的Verilog結(jié)構(gòu)都能被邏輯綜合工具接受。 本章討論了可接受的Verilog結(jié)構(gòu)、操作符以及實現(xiàn)它們的數(shù)字電路元件。邏輯綜合工具接受RTL描述、設(shè)計約束和工藝庫,產(chǎn)生優(yōu)化的門級網(wǎng)表。翻譯、邏輯優(yōu)化和工藝映射是邏輯綜合

26、工具內(nèi)部的過程,它們對用戶通常是不可見的。通過把相同的激勵應(yīng)用到RTL描述和門級網(wǎng)表并比較輸出結(jié)果,驗證優(yōu)化后的門級網(wǎng)表的功能。通過時序仿真或者靜態(tài)時序驗證來驗證時序。必須使用適當?shù)腣erilog編碼技術(shù)編寫高效的RTL模塊。必須評估設(shè)計的各種選擇方案。本章已經(jīng)討論了編寫高效率的RTL描述的指導(dǎo)原則。設(shè)計劃分是用于將設(shè)計分割成更小模塊的重要技術(shù)。更小的模塊減少了綜合工具優(yōu)化的復(fù)雜度。精確的設(shè)計約束指定是邏輯綜合的重要組成部分。 6.2 高級驗證定義傳統(tǒng)驗證流程的各個組成部分。定義傳統(tǒng)驗證流程的各個組成部分。理解體系結(jié)構(gòu)建模的概念。理解體系結(jié)構(gòu)建模的概念。解釋高層次驗證語言(解釋高層次驗證語言(

27、HVL)的使用方法。)的使用方法。介紹各種不同的高效仿真技術(shù)。介紹各種不同的高效仿真技術(shù)。解釋分析仿真結(jié)果的各種方法。解釋分析仿真結(jié)果的各種方法。描述覆蓋技術(shù)。描述覆蓋技術(shù)。理解斷言檢查技術(shù)。理解斷言檢查技術(shù)。理解形式化驗證技術(shù)。理解形式化驗證技術(shù)。描述半形式化驗證技術(shù)。描述半形式化驗證技術(shù)。定義等價性檢查。定義等價性檢查。6.2.1 傳統(tǒng)的驗證流程先要對芯片體系結(jié)構(gòu)進行設(shè)計說明。為了制定一個合理的體系結(jié)構(gòu)設(shè)計方案,需要對整體結(jié)構(gòu)的各種方案進行分析,以便選出最優(yōu)的體系結(jié)構(gòu)。這一般是通過對設(shè)計的體系結(jié)構(gòu)模型進行仿真來完成的。設(shè)計說明在這一步驟結(jié)束時完成。設(shè)計說明準備好以后,根據(jù)該說明創(chuàng)建一個功能

28、測試計劃。這個測試計劃構(gòu)成了功能驗證環(huán)境的基本框架。根據(jù)這個測試計劃,對使用Verilog HDL描述的待測設(shè)計(Design- Under-Test,即DUT)施加測試向量。需要在功能測試環(huán)境中施加這些測試向量。目前有許多種工具可以生成和使用這些測試向量。這些工具也可以高效率地生成測試環(huán)境。DUT在傳統(tǒng)的軟件仿真器中仿真(DUT通常由邏輯設(shè)計工程師完成,由驗證工程師對其進行仿真)。然后分析輸出結(jié)果,并與預(yù)期結(jié)果進行對比。這個步驟可以通過使用波形觀察器和調(diào)試工具手工完成。也可以通過測試環(huán)境,自動檢查DUT的輸出方式或者使用諸如Perl等語言分析日志文件的方式自動完成這種分析。另外,對代碼覆蓋率

29、進行分析可以保證對設(shè)計進行全面驗證,以滿足驗證目標。如果輸出與預(yù)期結(jié)果完全匹配,并且滿足了覆蓋目標,則驗證工作是完整的。此外還可以采取一些其他步驟來減少將來重復(fù)設(shè)計的風險。這些步驟包括硬件加速、硬件仿真以及基于斷言的驗證。 體系結(jié)構(gòu)建模本階段實際上是結(jié)構(gòu)工程師對設(shè)計體系結(jié)構(gòu)所做的一種探索,通常是使用C或C+來描述的,現(xiàn)在又出現(xiàn)了systemC和systemverilog。 功能驗證環(huán)境 對芯片功能的驗證可以分為以下三個階段:模塊級驗證。模塊級驗證。模塊級驗證通常是由模塊的設(shè)計者進行的,設(shè)計和驗證都使用Verilog完成。在這個階段將會運行大量簡單的測試案例,目的是保

30、證該模塊可以很好地與其他功能塊集成在一個芯片上。全芯片驗證。全芯片驗證。全芯片驗證的目的在于保證功能測試計劃中描述的整個芯片的所有測試目標全部都能被覆蓋。擴展驗證。擴展驗證。擴展驗證的目標是發(fā)現(xiàn)設(shè)計中所有“角落”里的錯誤。由于測試向量集不能預(yù)先確定,并且可能延續(xù)到版圖設(shè)計階段,因此這個階段相對較長。 典型功能驗證環(huán)境測試平臺(testbench)由HDL過程組成,它們把數(shù)據(jù)寫入DUT或者從DUT讀取數(shù)據(jù)。只對(設(shè)計的)功能測試計劃中描述的特定功能進行測試,測試時順序調(diào)用測試平臺中的過程,手工把選定的輸入激勵施加到DUT并檢查結(jié)果。 測試模塊因設(shè)計可控制性的減少而變得更困難、更耗時。內(nèi)部設(shè)計狀態(tài)

31、的可觀察性的減少而驗證變得困難。測試模塊變得難以理解和維護。對有限的人手來說,有太多的“角落”情況要測試。沒有代碼共享,創(chuàng)建和維護多個環(huán)境變得很困難在基于HVL的方法中,驗證的各部件在HVL仿真器中仿真,DUT由Verilog仿真器仿真。HVL仿真器和Verilog仿真器交互提供數(shù)據(jù),產(chǎn)生仿真結(jié)果。下圖展示了這種交互的一個示例。HVL仿真器和Verilog仿真器作為兩個獨立的進程運行,并且通過Verilog PLI接口進行通信。HVL仿真器主要負責所有的驗證部件,包括測試生成、輸入驅(qū)動器、輸出接收器、數(shù)據(jù)檢查器、協(xié)議檢查器和覆蓋分析器。Verilog仿真器負責仿真DUT。 仿真有

32、三種方式可以對設(shè)計進行仿真:軟件仿真軟件仿真、硬件加硬件加速和硬件仿真速和硬件仿真。 軟件仿真軟件仿真軟件仿真一般用于運行基于Verilog HDL的設(shè)計。軟件仿真器運行在普通計算機或者服務(wù)器上,讀入Verilog HDL代碼并在軟件中仿真其行為。當設(shè)計超過一百萬門時,軟件仿真耗費的時間開始大幅度地增加,變成了驗證過程中的瓶頸。因此,出現(xiàn)了各種各樣的仿真加速技術(shù)。其中的兩項技術(shù),硬件加速(Hardware Acceleration)和硬件仿真(Hardware Emulation)也應(yīng)運而生。 硬件加速硬件加速在功能驗證和擴展驗證階段,硬件加速用于加速現(xiàn)有的仿真,運行冗長的隨機事務(wù)序列。在該技

33、術(shù)中,基于Verilog HDL的設(shè)計被映射到可重配置的硬件系統(tǒng)。設(shè)計在硬件系統(tǒng)上仿真,產(chǎn)生仿真結(jié)果,通??梢园逊抡嫠俣忍岣邇傻饺齻€數(shù)量級。硬件加速可以基于FPGA或者基于處理器。仿真被分為兩部分,其一為軟件仿真器,仿真不可綜合的Verilog HDL代碼;其二為硬件加速器,仿真所有可綜合的代碼??梢杂肰erilog仿真器或HVL仿真器驗證部件。仿真器和硬件加速器交互提供數(shù)據(jù),產(chǎn)生結(jié)果。 硬件加速器可以把仿真時間從大約數(shù)天減少為數(shù)小時,因此可以大大縮短驗證時間。然而,它們價格昂貴,并且需要大量的建立時間。另一個缺點是它們通常需要很長的編譯時間,這意味著只對很長的回歸(regression)仿真

34、非常有用。因此,小規(guī)模設(shè)計還是把軟件仿真作為仿真技術(shù)的首選。 硬件仿真硬件仿真硬件仿真(Hardware Emulation)又稱在電路仿真(In-Circuit Emulation)或在線仿真,是在實際系統(tǒng)軟件的真實環(huán)境中對設(shè)計進行驗證的過程。硬件仿真一般用在擴展驗證階段,因為該階段的驗證需要系統(tǒng)已經(jīng)非常穩(wěn)定。硬件仿真的一個主要優(yōu)點是軟硬件的集成可以在實際的硬件出現(xiàn)之前就進行,從而縮短了開發(fā)周期。通過運行實際的軟件,在軟件仿真環(huán)境中難以建立的條件也能被測試到。在設(shè)計上運行真實的系統(tǒng)是一個重要的驗證步驟,通過該步驟可以減少出錯概率和減少設(shè)計反復(fù)次數(shù)。但是,軟件仿真器和硬件加速器不能用于該目的,

35、因為它們速度太慢,并且與真實的系統(tǒng)沒有必需的連接機制(hook)。例如,在軟件仿真器上啟動設(shè)計項目的UNIX操作系統(tǒng)進行仿真,可能需要花費許多年的運行時間,而采用硬件仿真則可以在數(shù)小時之內(nèi)啟動UNIX。硬件仿真是一種與真實情況非常接近的仿真,應(yīng)用軟件可以在與真實電路幾乎完全一樣的條件下運行,與在實際芯片中運行應(yīng)用軟件沒有差別。應(yīng)用軟件并不能察覺到它實際上是在仿真器上運行的,而不是在真實的芯片上運行的。 硬件仿真器一般運行在MHz速度量級上,它們的價格非常昂貴并且需要很長的配置時間。因此,小規(guī)模設(shè)計還是把軟件仿真作為仿真技術(shù)的首選。 分析傳統(tǒng)驗證流程中的一個重要步驟是設(shè)計分析,為

36、了分析數(shù)據(jù)值和數(shù)據(jù)協(xié)議的正確性,可以采用許多種方法,如: 1波形觀察器用于觀察轉(zhuǎn)儲文件。設(shè)計者以圖形方式查看由各種不同的測試過程產(chǎn)生的轉(zhuǎn)儲文件,確保數(shù)據(jù)值和數(shù)據(jù)協(xié)議都正確。 2日志文件包含仿真運行的記錄。設(shè)計者查看各種不同的測試日志文件,基于仿真信息判斷數(shù)據(jù)值和數(shù)據(jù)協(xié)議的正確性。這些方法每次測試完成運行,設(shè)計者都不得不人為地檢查轉(zhuǎn)儲文件和日志文件。建議把測試環(huán)境創(chuàng)建成可以自我檢查的。需要為自我檢查測試環(huán)境創(chuàng)建兩個部件: 1數(shù)據(jù)檢查器數(shù)據(jù)檢查器.數(shù)據(jù)檢查器比較仿真的每一個輸出值,與預(yù)期的輸出值相對照,并快速檢查該值。如果存在不同之處,仿真可以立刻停止,輸出錯誤信息。如果沒有錯誤信息,就認為成功地

37、完成了仿真。通常用記分板來實現(xiàn)數(shù)據(jù)檢查器。記分板通常用來提示某事務(wù)已經(jīng)完成并核查和記錄數(shù)據(jù)是否已在適當?shù)慕涌诮邮铡S浄职逡_保即使在符合協(xié)議的情況下,DUT中的數(shù)據(jù)也不會丟失,還要確保接收數(shù)據(jù)正確. 2協(xié)議檢查器協(xié)議檢查器.協(xié)議檢查器快速地檢查每個輸入和輸出接口是否滿足數(shù)據(jù)協(xié)議。如果違反了協(xié)議,仿真可以立即停止,并顯示錯誤信息。如果沒有錯誤信息,就認為成功地完成了仿真。 覆蓋 結(jié)構(gòu)覆蓋結(jié)構(gòu)覆蓋處理Verilog HDL代碼的結(jié)構(gòu),匯報什么時候已經(jīng)覆蓋到結(jié)構(gòu)的關(guān)鍵部分。目前有3種主要類型的結(jié)構(gòu)覆蓋: 1代碼覆蓋代碼覆蓋。代碼覆蓋的基本假設(shè)是未經(jīng)測試的代碼可能存在潛在的錯誤。然而,代

38、碼覆蓋只是檢查RTL代碼做得如何好,到什么程度,而不是測試設(shè)計的功能。代碼覆蓋不匯報驗證是否完成,只是報告驗證還不完全,直到代碼覆蓋達到100%為止。因此,代碼覆蓋雖然有用,但它不是一個完整的衡量標準。 2翻轉(zhuǎn)覆蓋翻轉(zhuǎn)覆蓋。這是一種最古老的覆蓋測量,在歷史上用于制造業(yè)的測試。翻轉(zhuǎn)覆蓋監(jiān)視仿真期間翻轉(zhuǎn)的邏輯位。如果某一位沒有從0到1或者從1到0翻轉(zhuǎn),它就沒有得到充分的驗證。翻轉(zhuǎn)覆蓋不能確保驗證的完整性。它不能保證特定的、代表高層次功能的位翻轉(zhuǎn)序列已經(jīng)出現(xiàn)。翻轉(zhuǎn)覆蓋不能縮短驗證過程。當工程師試圖翻轉(zhuǎn)某個根據(jù)設(shè)計規(guī)范不應(yīng)該翻轉(zhuǎn)的位時,它甚至可能延長驗證過程。翻轉(zhuǎn)覆蓋是非常低層次的覆蓋,把特定位與高層

39、次測試計劃項目關(guān)聯(lián)起來是非常繁瑣的。 3分支覆蓋分支覆蓋。分支覆蓋檢查控制流程中所有可能的分支是否都測試過了。這種覆蓋程度的度量是必要的,但不是充分的。功能覆蓋功能覆蓋從系統(tǒng)的角度檢查設(shè)計。功能覆蓋確保所有合法的輸入激勵值在任何時刻的任意組合都已經(jīng)被測試過。此外,功能覆蓋也能提供有限狀態(tài)機的覆蓋測試,包括狀態(tài)和狀態(tài)轉(zhuǎn)移??梢酝ㄟ^在RTL代碼中插入覆蓋點,或者用斷言語句實現(xiàn)覆蓋的方式來增強功能覆蓋的測試程度。例如,當收到一個中斷或者內(nèi)部的FIFO滿時,判斷是否所有事務(wù)都已測試完畢。通過這種方式,增強了功能覆蓋程度的度量。6.2.2 斷言檢查黑盒驗證與白盒驗證 黑盒驗證,即驗證只需要依賴于系統(tǒng)的輸

40、入和輸出關(guān)系。 白盒驗證,即需要使用設(shè)計的內(nèi)部結(jié)構(gòu)信息才能進行驗證。 斷言檢查是一種白盒驗證形式,它需要使用設(shè)計的內(nèi)部結(jié)構(gòu)信息。斷言檢查器的主要目的是提高可觀察性。斷言是表示設(shè)計者預(yù)期行為的語句。有兩種類型的斷言: 1. 時間斷言描述信號之間的時序關(guān)系。 2. 靜態(tài)斷言描述信號的屬性,不是真,就是假。 RTL代碼綜合時,插入的斷言并不會影響電路元件的生成結(jié)果;插入的斷言通常被看成是邏輯綜合的注釋。下圖說明了基于FIFO的接口設(shè)計何處可插入斷言?;跀嘌缘尿炞C(Assertion-Based Verification,即ABV)具有如下優(yōu)點: 1ABV提高了可觀察性,ABV能夠把發(fā)現(xiàn)有問題的源代

41、碼段落隔離開來。 2ABV提高了驗證效率,減少了參與調(diào)試過程的工程師的數(shù)量。檢查工具發(fā)現(xiàn)問題以后,工程師能夠及時得到通知,這樣使得工程師不必花費數(shù)小時去查看波形和日志文件,便能很快找到錯誤的源頭,從而節(jié)約測試時間,大大加快調(diào)試過程。6.2.3 形式化驗證著名的白盒驗證方法是一種形式化驗證,這種方法用數(shù)學方法來證明設(shè)計的斷言或者屬性(property)是否正確。通常必須了解設(shè)計結(jié)構(gòu)行為的詳細信息才能編寫出有用的、值得證明的屬性。因此,人們可以不需要進行仿真就能證明設(shè)計是否正確。形式化驗證還可以用來在RTL實現(xiàn)開始之前,證明設(shè)計結(jié)構(gòu)的說明是完全合理的。形式化驗證工具通過試探操縱(manipulate)一個設(shè)計的所有可能工作路徑來證明設(shè)計屬性是否正確。所有輸入的改變必須遵循合法的行為約束。位于接口的斷言所起的作用是給形式化驗證工具制定一個約束,規(guī)定合法輸入行為的范圍。然后做出努力以期證明RTL代碼中的斷言是真的,還是假的。若對輸入的約束規(guī)定得太寬松,則形式化驗證工具可能生成依賴于非法輸入序列的反例,這些輸入不可能在設(shè)計中發(fā)生。若約束規(guī)定得太嚴格,則在形

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論