硬體描述語言VHDL & Verilog設計導論

作者:蔡宏儒

EDA工具的功能正以飛快的速度進步,初接觸高階設計的入門者,應該如何以及從何著手?本文以一個典型的設計流程為主幹,引導讀者一窺其中的源流。

楔子

數位電路應用的風行,起於1972年中期所發生的一次電子革命-一種稱為TTL(Transistor-Transistor Logic)的標準化邏輯元件面市。在數位電路的發展史上,工程師第一次能以極便宜的價格,買到一組標準邏輯閘(logic gates),用以進行電路的組裝及驗證。自此,數位電路設計進入了所謂的邏輯閘層次設計(gate-level design)時代。

在此之前,姑且稱之為電晶體層次設計(transistor-level design)時代,從事數位電路設計著實是一件麻煩事。您須先以電晶體、電阻及二極體等離散元件組合成各種“土製的”邏輯閘,之後再利用它們組裝成您需要的數位電路。由於,離散元件的電器特性並不十分穩定,這導致諸如扇出(fan-in)、扇入(fan-out)及雜訊(noise)等問題變得難以掌控;調教這些“土製的”邏輯閘實在是曠日費時,經常讓工程師們非常頭痛,也因此使得數位化的腳步變得相當緩慢。

TTL的推出,的確為數位化發展跨出了一大步;自此,邏輯元件設計便與數位電路設計分了家。邏輯元件設計者,專心致力於提供性能更加優異的邏輯閘,而數位電路工程師 ,則只須專注在數位電路的邏輯分析即可。這使得數位電路的設計變得非常方便、經濟;在某些方面,它甚至比傳統類比電路更便宜、更好用。

然而,由於積體電路的製程技術不斷地進步,這使得電路數位化的腳步越來越快。自從製程技術邁入次微米時代之後,System-on-a-Chip(SoC)的觀念日趨受到重視,今日設計複雜的ASIC,其邏輯閘的使用數目,及工作頻率不斷增加的結果,導致以傳統徒手將邏輯閘一個個組合的設計分析方式已不敷使用。相信讀者們都有使用過OrCAD等工具,發展數位電路的經驗;假若電路不大,這類直接繪製gate-level電路圖的設計方式或許非常方便,但是,假若是上萬個邏輯閘的設計呢?我想那將會是一場十分可怕的夢魘。

工程師希望的是:能否運用現今電腦強大的運算能力,來幫助人們組合並且分析電路;如此,便可將人類可貴的智慧,運用在更高階層的事務上。基於此一觀點,各種電子設計自動化(Electronic Design Automation, EDA)及電腦輔助設計(Computer-Aided Design, CAD)等工具應運而生,它們使得數位電路的設計進入了高階設計(high-level design)的新世代。

參考圖1,假若讀者們熟悉軟體工程發展的軌跡,應當可以輕易地看出,數位硬體電路設計方式的演進與其有著極相似的歷程:亦即,其設計切入點(design entry)均有愈往高階發展的趨勢。軟體程式設計由早期直接編輯機械碼(machine code)到使用組合語言(assembly language),以至於使用現今普遍風行的C或Pascal等高階程式語言(high-level programming language);相對地,數位電路設計的發展亦由使用電晶體等離散元件的電晶體層次(transistor-level, 註1)設計,到邏輯閘層次(gate-level, 註2)以至於使用目前最流行的硬體描述語言(Hardware Description Language, HDL),作為其設計流程切入點之高階合成電路設計(high-level synthesis circuit design)。

本篇文章,便是希望針對現今及未來幾年數位電路設計的發展趨勢-高階合成電路設計,以其設計流程為主軸,討論一些相關的設計概念。為能較完整地描述高階合成電路設計流程,有必要了解一下,做為其設計切入點的硬體描述語言,及其的演進歷程。

註1:對於ASIC而言,transistor-level底下另有一個與設計相關的層次,稱為layout-level。這是因為ASIC內的電晶體,其電器特性與layout有直接的關係。
註2:也有人稱之為logic-level。

 

 

硬體描述語言的誕生及電子設計自動化工具的發展

早在1970年代末期至1980年代初,美國國防部(The United States Department of Defense),為方便管理有關武器承包商的電子電路技術文件,使其遵循統一的設計描述介面,以便在將來若有新技術推出後,仍能重複再使用(reuse)原設計,因而發展了名為VHSIC(Very High Speed Integrated Circuit) 的計劃。最初,其目的是希望能制定一個標準的文件格式(format)及語法(syntax),而各武器承包商及其分包商,均須遵循此一標準語法格式,描述其設計之電路。然而,它的最終的目的-恰如其名:VHSIC,卻是希望能藉此刺激,創造出下一世代高速積體電路的設計介面,以期能突破各種大型積體電路在設計上的不便。

計劃初期的成果令人雀躍;可惜的是,由於當時的文件格式,僅能以gate level的方式描述電路,一旦面對數萬邏輯閘以上的設計時 ,那實在是極其複雜且非常具挑戰性的苦差事;事實上,這可能比用徒手直接繪製電路圖,還要令人頭疼。於是,一種改良的電路描述方式-“VHSIC硬體描述語言”(VHSIC Hardware Description Language)便在1982年正式誕生;這也就是習稱的VHDL。其後,並於1986被「國際電機電子工程協會」(International Electrical & Electronic Engineering , IEEE)收納為其標準之一;文件編號為IEEE standard 1076。

在此同時,一家名為Gateway Design Automation的公司,亦於1984發表了一種相似於VHDL的硬體描述語言-Verilog HDL。不同於VHDL的是,Verilog HDL在發展之初,便是企圖能以程式語言介面(Programming Language Interface, PLI)為基礎,創造一個以電腦輔助設計為導向的自動化電路設計環境 ;基於此一原則,Verilog便被設計成一種語法極具親和力的硬體描述語言。
先前提及,由於美國國防部在發展VHDL語言之初,主要的目的只是希望制定一個設計標準,以便將來若有新技術推出後,仍能重複再使用(reuse)原設計。由於其牽涉到國防大計,想當然爾,其語法的制定便須盡可能地嚴謹;不幸的是,這個優點卻成為往後推展VHDL語言時的致命傷。以軟體的程式語言來比較,VHDL的語法即有如PASCAL般的嚴謹;反之,Verilog的語法卻與當時流行的C語言極為類似(事實上,Verilog大部分語法的制定,其靈感便是來自於C語言)。所以,雖然Verilog在發表的時程上,比VHDL晚了近兩年,但是當時Verilog受歡迎的程度卻遠超過VHDL。

Verilog成功的原因,並不單純只因它那具親和力的語法;基本上,商業上的應用才是它致勝的關鍵。原本Gateway本身便是以提供EDA工具為主業,它們非常了解當時ASIC晶圓廠(Application Specific Integrated Circuit Foundry)的需求-一套功能強大的電路模擬器(Simulator),足以用來驗證龐大且複雜的數位電路;而Gateway的Verilog模擬器-Verilog-XL,做到了這一點。

Verilog模擬器提供了使用者一個非常具有彈性的模擬環境;使用它,工程師便可如同撰寫軟體般,以程式語言的方式,描述數位電路內部的電氣行為、架構、功能及各種輸出入的狀態。晶圓廠利用它程式語言介面的特點,建立了本身專屬的元件模型(primitive model);這套模型不但可作為廠內ASIC模擬驗收(sign-off)之用,並可提供這些模型給客戶,作為設計時的模擬參考。直到目前為止,雖然VHDL模擬器已逐漸成為另一個主流 ,但仍有許多專門從事ASIC代工的老字號晶圓廠,只提供Verilog的元件模型。

使用Verilog模擬器的客戶利用電腦模擬,便可由終端機得知其設計的ASIC是否符合規格 ,免除許多實際電路板上的驗證工作,因而大幅地減少產品的面市時間(time-to-market) 。這使得擁有Verilog元件模型的晶圓廠,在市場上佔有更大的優勢利基(niche);於是整個ASIC設計產業逐漸向Verilog模擬器靠攏,而Verilog HDL亦因此成為了工業界的標準。

有人說:科學是懶人發明的工具,一點也沒有錯;1987年,當Synopsys發表了第一個以Verilog HDL為介面的數位電路合成器(digital circuit synthesizer)之後,數位電路設計正式進入了一個新的里程碑;利用Verilog電路合成器,數位電路設計變得更有效率。以往在模擬過後,工程師需要以徒手的方式,將Verilog HDL描述的設計,轉換為get-level的電路網絡圖(net-list);但是Verilog電路合成器卻可以自動地完成這件繁瑣並且惱人的工作。

一路走來,Verilog似乎佔盡了天時地利人和 ,並取得了絕對領先的地位,其實不然。首先,Verilog具有先天上語法不夠嚴謹的缺陷,因此,並不受以行事嚴謹著稱的歐洲市場青睞;其次,這廣大的ASIC EDA市場,又豈只這少數幾家公司可壟斷。於是,VHDL便背負了這些期望,夾著IEEE standard的聲望,對Verilog展開了絕地大反攻;經過多番努力與推廣,各種支援VHDL語法的EDA工具越來越多,VHDL因而逐漸取得競爭優勢。為鞏固市場佔有率上領先的地位,各家Verilog EDA工具的供應商,無不盡全力促使Verilog成為IEEE標準。終於在1995年,Verilog正式成為IEEE標準的一員;文件編號為IEEE standard 1364。時至今日,這兩種硬體描述語言及其衍生的各種工具,在全球EDA市場上的佔有率,仍難分軒輊。

基本上,這兩種硬體描述語言各有其優缺點;除了語法上的差異及限制之外,支援兩者的EDA工具,它們所提供的功能幾乎是相同的。要選擇何種語言切入,端視您的工作環境而定;大體上,Verilog HDL在美洲地區較受歡迎,而歐洲的廠家則較偏愛VHDL,至於台灣則是兩者互有消長(最近VHDL有越來越受重視的趨勢)。以筆者的觀點來看,較保守的建議是,精其一而了然其二,如此,不論面對的是習慣何種語言的工作夥伴,您都可以合作愉快、事半功倍。

各種EDA工具介紹與自動化設計流程之關係

在了解了硬體描述語言的演進過程中,相信各位對VHDL及Verilog HDL與ASIC EDA工具之間的關係,應已有基本的認識。在此,讓我再強調一次:在高階設計的領域中,硬體描述語言扮演的角色,只是一種程式語言介面(PLI);它提供了一個極具彈性的設計入口(design entry),以作為電路設計者與各種電腦輔助設計工具之間溝通的橋樑 。因此,若缺少了這些EDA工具,硬體描述語言的剩餘價值,也只不過是一種系統規劃工具,或是技術文件格式而已。


具體地說,整個數位電路的高階設計概念 ,可以說就是設計自動化(design automatize)的實現。理想的情況是:由模擬驗證設計是否符合原始設定的規格(specification),以至於諸如邏輯電路的合成與實際電晶體配置與繞線(place and route)這一類徒手不易掌控的工作,工程師均能尋求適當的DEA工具來完成整個電路的設計。圖2描述了完整的自動化數位電路設計流程;其中包含了三種主要的EDA工具:模擬器(simulator)、合成器(synthesizer)以及配置與繞線(place and routing, P&R)工具;除了P&R工具之外,其餘兩者絕大部分,均是以VHDL或Verilog HDL作為其程式語言介面。以下,筆者將配合介紹這個典型的自動化設計流程,簡述各項EDA工具的基本功用。

1.系統規格制定(Define Specification)

在ASIC設計之初,工程師們須根據產品的應用場合,為ASIC設定一些諸如功能、操作速度、介面規格、環境溫度及消耗功率等規格,以做為將來電路設計時的依據。在這方面,目前已有廠商提供系統級模擬器(system-level simulator),為系統設計提供不錯的解決方案;透過此類模擬器,工程師們可以預估系統的執行效能,並可以最佳化的考量,決定韌體模組及硬體模組該如何劃分。除此之外,更可進一步規劃哪些功能該整合於ASIC內,哪些功能可以設計在電路板上,以符合最大的經濟效能比。

2.設計描述(Design Description)

一旦規格制定完成,便依據功能(function)或其他相關考量,將ASIC劃分為數個模組(module);此階段是整個設計過程中最要的關鍵之一,它直接影響了ASIC內部的架構及各模組間互動的訊號,更間接影響到後續電路合成的效能及未來產品的可靠性。

決定模組之後,便分交由團隊的各個工程師,以VHDL或Verilog等硬體描述語言進行設計-亦即功能的行為描述(behavioral description);為能明確及有效率地描述模組的內部功能,各模組之下可能再細分成數個子模組(sub-module),直到能以可合成(synthesizible)的語法描述為止。這種一層層分割模組的設計技巧,便是一般所謂的階層式設計(hierarchical design);這與早期直接以繪製閘級電路進行設計的時代,所使用的技巧是相類似的。此一步驟所完成的設計描述,是進入高階合成電路設計流程的叩門磚 ;習慣上,稱之為硬體描述語言的設計切入點(HDL design entry)。

關於此一步驟,亦有相關的輔助工具相繼推出。Design Book便是其中的代表;它利用一般工程師熟悉的圖形介面-如狀態圖及流程圖,協助初接觸以硬體描述語言進行設計的工程師,自動編寫出相對應的硬體語言描述碼。效能如何筆者不敢斷言,但它能依使用者決定,整合慣用之其他EDA工具的特點,倒是滿吸引人的地方。

3.功能驗證(Function Verification)

完成步驟2的設計描述,接下來便是利用VHDL或Verilog的電路模擬器,針對先前的設計描述,驗證其功能或時序(timing)是否符合由步驟1所制定的規格。通常,稱這類驗證為功能模擬(function simulation),或行為模擬(behavioral simulation),而這類的HDL電路模擬器,則通稱為行為模擬器(behavioral simulator)。

對於這一類功能驗證的模擬而言,模擬器並不會考慮實際邏輯閘或連線(connenct wires)所造成的時間延遲(time delay)、閘延遲(gate delay)及傳遞延遲(transport delay)。取而代之的是,使用單一延遲(unit delay)的數學模型,來粗略估測電路的邏輯行為;雖然如此無法獲得精確的結果,但其所提供的資訊,已足夠作為工程師,針對電路功能的設計除錯之用。
為了能順利完成模擬,在此,您還需要準備一分稱為測試平台(test bench)的HDL描述檔。在這份測試平台的描述檔中,必須盡可能地細描述所有可能影響您設計功能的輸入訊號組合,以便激發出錯誤的設計描述位於何處。幸運的話,或許在幾次修改之後,就可得到您想要的結果,順利進入下一個步驟。

4.邏輯電路合成(Logic synthesis)

確定設計描述之功能無誤之後,便可藉由合成器(synthesizer)進行電路合成。合成過程中,您必須選擇適當的邏輯閘元件庫(logic cell library),作為合成邏輯電路時的參考依據。元件庫的取得,可能直接來自於您的ASIC供應商(ASIC vendor, 負責協助客戶設計ASIC的廠商)、購自其他元件庫供應商(third-party ASIC library vendor),或是為了某種特殊原因,您亦可能考慮自行建立。

事實上,元件庫內含的邏輯閘資訊非常廣泛,大致上包括了以下各項。

使用合成器有幾個需要注意的事項,其一就是最佳化(optimize)的設定。根據步驟1所制定的規格,工程師可對合成器下達一連串限制條件(constrain),根據這些條件,合成器便會自動合成滿足您規格要求的邏輯電路。最常見的三個限制條件(註3)有:操作速度、邏輯閘數及功率消耗。事實上,這三項限制條件之間是呈現互相矛盾的關係;也就是說:一旦您所下的限制條件太過嚴苛,將使電路合成的速度變得非常的慢,更甚者,有可能在花費大把時間後,仍得不到您想要的結果。

design entry硬體語言設計描述檔,其語法的編寫風格(HDL coding style) ,亦是決定合成器執行效能的另一個因素。事實上,無論是對VHDL或是Verilog而言,合成器所支援的HDL語法均是有限的;過於抽象的語法只適用於編寫cell library,或是做為系統規劃評估時的模擬模型所用,而不為合成器所接受。

此外,由於一般合成器的最佳化演算法則,都只能達到區域性最佳化(local optima);因此,對於過分刁鑽的語法描述,將影響合成器在最佳化過程的執行時間。

利用圖3,可以簡單地說明coding style與最佳化之間的關係:一個良好的coding style,便如同位於A點上的球,合成器僅需花費些許的氣力,便可將其推至最低點(最佳點)。而相反地,較差的coding style,就猶如位在C點上的球,合成器需花費較大的功夫,才能將其推到B點;假若又加上較嚴苛的限制條件,則可能連B點都到不了。工程師應清楚的明白,對您所使用的合成器而言,哪些才是“良好的”coding style,而這些在使用手冊中都可以查得到。

5.邏輯閘層次的電路功能驗證(Gate-Level Netlist Verification)

由合成器產生的netlist,會在這個階段進行第二次的電路模擬;一般稱之為邏輯閘層次的電路功能驗證,或稱為P&R前的模擬,簡稱前段模擬(pre-simulation)。在此階段,主要的工作是要確認,經由合成器所合成的電路,是否如同原始的設計描述般,符合您的功能需求;利用邏輯閘層次模擬器(gate-level simulator),配合在功能驗證時已經建立的test bench,便可達到這個目的。

這裡出現兩個新的名詞:VITAL(VHDL Initiative Toward ASIC Library)、library及Verilog library;兩者均可視為先前所提及的cell library當中的timing model。在pre-simulation中,一般只考慮閘延遲,而連線延遲在此處是不予考慮的(通常在電路合成階段,是無法預測實際連線的長度,因此也就無法推測連線所造成的延遲)。
時序變異(timing variation)是此處經常出現的發生錯誤,這當中包括了,設定時間(set-up time)或保持時間(holding time)的不符合,以及脈衝干擾(glitch)現象的發生。而這些時序變異,基本上都是只是單純考慮閘延遲時所造成的結果。

6. 配置與繞線(Place and Routing)

這裡包含了三項主要的工作:平面規劃(floor planning)、配置(placement)及繞線(routing)。還記得在設計描述的步驟,您已將ASIC劃分成數個模組了嗎?floor planning的工作便是,適當地規劃這些劃分好模組在晶片上的位置。

比起模組內邏輯閘間的接線,各模組之間互連訊號的接線,通常會比較長,因此,他們所產生的延遲會主控ASIC的性能;在次微米製程上,此種現象更為顯著,這也就是為何先前特別強調,模組劃分的重要性。完成平面規劃之後,P&R工具便接著完成各模組方塊內邏輯閘的放置與繞線。

7.繞線後的電路功能驗證(Post Layout Verification)

在這個階段,經過P&R之後的電路,除了須重複驗證,是否仍符合原始之功能設計之外,工程師最關心的是,在考慮實體的閘延遲及連線延遲的條件之下,電路能否正常運作。與邏輯閘層次的電路功能驗證時發生的情況相同,您將面對諸如set-up time、hold time及glitch的問題;不同的是,此時若真有錯誤發生,您將面對更冗長的重複修正週期(iteration cycle)。也就是說,您可能需要回到最原始的步驟:修改HDL設計描述,重新再跑一次相同的流程。

麻煩還沒有完,由於需要參考的參數非常的多,模擬時間將花費您數倍於先前的模擬。經由P&R工具所產生的標準延遲格式(Standard Delay Format, SDF)檔,提供了詳實的物理層次的延遲參數;透過VITAL的參數回傳機制(back-annotation),模擬器能夠精確的預估數位電路的電氣行為,並且指示出發生時序錯誤的時間點,而您所須付出的代價就是“時間”。最後,非常幸運的您完成了這項驗證工作,便可以sign-off,等著您的ASIC vendor交貨了。

整個設計流程在此只能算是大概介紹完畢 ;這當中牽涉到許多未提及的層面,其中包括了時脈(clock tree)、測試設計(Design for Test)、功能一致性驗證(function equivalence check)、以及靜態模擬(static simulation)等等。為免文章過於冗長,這些進階的問題,將來有機會再與讀者分享。

結論

假使設計硬體電路能像寫軟體這樣方便,那該是多麼美好的景象;硬體描述語言的高階合成電路設計,為我們打開了這扇窗。事實上,VHDL及Verilog HDL並非唯一的硬體描述語言,基於相似的目的,早期也發展出其他如ABEL及AHDL等硬體語言,但是由於支持的廠商不多,因此目前不如前者來得普遍。最近,VHDL及Verilog HDL的發展協會 ,為提供更一般化的電路描述,已制定了能夠同時描述數位及類比混合電路的描述語法(註4),相信支援其語法的相關EDA工具,應該能在近期面市。

為能迎接系統晶片(System on One Chip, SoC)以及智產權(Intellectual Property, IP)的時代來臨,各EDA工具的供應商無不卯足全力,企圖在下一世代的設計流程上,站在業界領先的地位。Synopsys及Cadence更是相繼推出應用功能一致性驗證及靜態模擬等技術的產品,例如:Formality、PrimeTime(Synopsys)以及Affirma(Cadence);其他諸如預先平面規劃(pre-floor-planning)等新的設計觀念亦不斷地被提出。雖然電路的設計工具及觀念不斷推陳出新,但是對傳統的晶片設計廠商而言,如何將這些新的概念,整合進原先的設計流程,才是最重要的問題。希望本文介紹的基本設計流程,能提供初入門者一個完整的概念。筆者相信,只要以這個典型的設計流程為基礎,應該不難接受新的設計觀念才對。

註3:這些亦是評量ASIC性能的重要指標。
註4:http://www.vhdl.org