1 引言 近30年來,由于微電子學和計算機科學的迅速發展,給EDA(電子設計自動化)行業帶來了巨大的變化。特別是進入20世紀90年代后,電子系統已經從電路板級系統集成發展成為包括ASIC、FPGA和嵌入系統的多種模式。可以說EDA產業已經成為電子信息類產品的支柱產業。EDA之所以能蓬勃發展的關鍵因素之一就是采用了硬件描述語言(HDL)描述電路系統。就FPGA和CPLD開發而言,比較流行的HDL主要有Verilog HDL、VHDL、ABEL-HDL和 AHDL 等,其中VHDL和Verilog HDL因適合標準化的發展方向而最終成為IEEE標準。但與VHDL相比,Verilog HDL有個最大的優點:它是一種非常容易掌握的硬件描述語言,只要有C語言的編程基礎,一般經過2~3個月的認真學習和實際操作就能掌握這種設計技術。并且完成同一功能Verilog HDL的程序條數一般僅為VHDL的1/3。而VHDL設計技術則不很直觀,需要有EDA編程基礎,通常需要有多余半年的專業培訓才能掌握這們技術。可見,用Verilog HDL語言有更高的優越性。 2 設計實例 通常設計數字電路大都采用自頂向下將系統按功能逐層分割的層次化設計方法,這比傳統自下向上的EDA設計方法有更明顯的優勢(當時的主要設計文件是電路圖)。因為由自頂向下的設計過程可以看出,從總體行為設計開始到最終邏輯綜合,形成網絡表為止。每一步都要進行仿真檢查,這樣有利于盡早發現系統設計中存在的問題,從而可以大大縮短系統硬件的設計周期。這也是HDL語言設計系統硬件的最突出的優點之一。并且在頂層設計中,要對內部各功能塊的連接關系和對外的接口關系進行描述。而功能塊實際的邏輯功能和具體的實現形式則由下一層模塊來描述。在系統的底層設計中,由于其對系統很強的行為描述能力,可以不必使系統層層細化,從而避開具體的器件結構,從邏輯行為上直接對模塊進行描述和設計,隨后EDA設計軟件或相應的第三方工具軟件中的綜合器將程序自動綜合成為具體FPGA/CPLD等目標芯片的網表文件,這種避開具體器件結構的方式也是它的重要優勢之一。 下面以序列檢測器的設計為例具體說明。 序列檢測器是時序數字電路中非常常見的設計之一。它的主要功能是:將一個指定的序列從數字碼流中識別出來。接下來就以設計“01101”這個序列的檢測器為例,說明Verilog HDL語言的具體應用。設X為數字碼流輸入,Z為檢出標記輸出,高電平表示“發現指定序列”,低電平表示“沒有發現指定的序列”。設輸入的碼流為“001101101111011111...”,則其序列檢測器的邏輯功能如表1所示。 在時鐘2~6中,碼流X里出現指定序列“01101”,對應輸出Z在第6個時鐘變為高電平“1”,表示發現指定序列“01101”,Z輸出“1”。同理在第9個時鐘對應輸出Z也為“1”。根據這個邏輯功能描述,我們可以分析得出狀態轉換圖(見圖1)。 其中狀態A~E表示5位序列“01101”按順序正確地出現在碼流中。因為輸入碼流X是隨機的,因此可能會有很多重疊的情況發生。這樣在轉換圖中相應的還要有狀態F和G。設初始狀態為IDLE,則有相應的Verilog HDL語言程序如下。 module seqdet(x,z,clk,rst); input x,clk,rst; output z; reg[2:0] state; wire z; parameter IDLE=3'd0, A=3'd1, B=3'd2, C=3'd3, D=3'd4, E=3'd5, F=3'd6, G=3'd7; assign z=(state==D && x==1)?1:0; always@(posedge clk or negedge rst) if(!rst) begin state<=IDLE; end else casex(state) IDLE:if(x==0) state<=A; else state<=IDLE; A:if(x==1) state<=B; else state<=A; B:if(x==1) state<=C; else state<=F; C:if(x==0) state<=D; else state<=G; D:if(x==1) state<=E; else state<=A; E:if(x==1) state<=C; else state<=A; F:if(x==0) state<=A; else state<=B; G:if(x==0) state<=F; else state<=G; default: state<=IDLE; endcase endmodule 由上述這個程序可以看出:Verilog HDL程序是由模塊構成的。每個模塊的內容都是嵌在module和endmodule兩個語句之間實現特定的功能的。每個模塊都由兩部分組成,一部分描述接口;另一部分描述邏輯功能,即定義輸入是如何影響輸出的。如程序中的sequdet(x,z,clk,rst)就是模塊的端口,聲明了模塊的輸入、輸出口。接下來就是模塊中最重要的部分邏輯功能的定義。在模塊中產生邏輯,Verilog HDL語言有3種方法: (1)用“assign”聲明語句。這種方法很簡單,只需寫一個“assign”,后面再加一個方程式即可。這也是最常用的方法之一。如程序中的assign z==(state==D && x==1)?1:0;就表示狀態為D時又收到了1,表明收到“01101”應使Z輸出為高電平。 (2)用“always”塊。它常被用來描述時序邏輯,上面的程序中即用這個模塊完成了狀態機的狀態轉化功能。 (3)采用實例元件的方法。這時只要鍵入元件的名字和相連的引腳即可。這樣就可以用上面這不長的程序,完成這個對序列的檢測功能,并且邏輯描述也十分容易理解。 上述程序輸入完成后,接下來首先要經EDA設計軟件進行編譯。本設計采用的是美國ALTERA公司的MAX+PLUSII軟件,經Compiler編譯器編譯,沒有任何問題后。建網表、邏輯綜合、適配、劃分、時域分析、裝配等均已自動完成,并生成多個后續工作要用的文件。編譯成功表明已為所設計的項目建立了一個編程文件,但還不能說明該文件在各種情況下都有正確的響應,因此編譯通過后還要進行功能和時序仿真,仿真結果如圖2所示。 經仿真發現輸出Z和輸入X有一段延時。通過波形很難給出定量的信號延時關系,為此我們在進行定時分析。定時分析結果如圖3所示,從表中顯示出了“CLK”到“Z”的延遲路徑為7.6ns、“X”到“Z”的延遲路徑為6ns。這樣,經Verilog HDL語言的文本編輯、編譯、仿真波形編輯、仿真和定時分析一系列設計步驟,設計出符合要求的數字系統后就可以通過編程器下載到指定的芯片中去。 綜上所述,則更能體會到Verilog HDL語言的優勢:由于它在其門級描述的底層,也就是晶體管開關的描述方面比VHDL等各種其它的HDL語言有更強的功能。所以在復雜數字邏輯電路和系統的設計仿真時更有優勢;描述的設計思想、電路結構和邏輯關系清晰明了,并且設計語言簡練、易學易用;其模塊化分層結構在大規模設計時更能體現出優勢。因此可以看出,Verilog HDL語言在EDA設計中相對與其他的各種硬件描述語言更有優勢。 3 結束語 隨著集成電路規模的越來越大,數字系統設計的越來越復雜,Verilog HDL語言在硬件電路設計的優越性也會越來越顯突出。目前,數百萬門規模的FPGA/CPLD已進入實用,Verilog HDL強大的系統描述能力、規范的設計結構和簡潔、靈活的編程風格會使其必將能會用來完成大數字系統、超大規模數字系統的幾乎全部設計任務。 |