向兵
摘 要:電子技術設計的核心是EDA,目前,EDA技術的設計語言主要有Verilog HDL和VHDL兩種,相對來說Verilog HDL語言相對簡單,上手快,其語法風格與C語言類似,據(jù)統(tǒng)計,Verilog HDL和VHDL的使用比率大概是80%和20%,在中國,大多數(shù)電子行業(yè)企業(yè)都采用Verilog。而模塊化的設計讓Verilog HDL語言具有思路清晰、邏輯關系明確、可讀性強等特點,模塊化的設計在Verilog HDL語法設計中也成為主流。
關鍵詞:Verilog EDA 模塊化
中圖分類號:TP334.7 文獻標識碼:A 文章編號:1672-3791(2017)09(c)-0012-02
1 EDA的發(fā)展現(xiàn)狀
在全球范圍內,自動化軟件市場已比較成熟,年增長速度大概在9%左右,目前,全球知名的自動化軟件廠商不足20家,亞洲由于中國和印度是發(fā)展中的大國,自動化軟件的應用潛力比較大,所以整個亞洲年增長速度大概在15%左右,當然其基數(shù)也比較低。
現(xiàn)在EDA技術的發(fā)展可以用日新月異來形容,目前EDA技術已在各個方面得到了廣泛使用,例如在醫(yī)療器械制造過程中,從設計、性能測試及特性分析,都可能涉及到EDA技術。
在EDA軟件開發(fā)方面,目前主要集中在美國,其中三大商業(yè)巨頭為Synopsys、Mentor、Cadence,雖然,目前中國的EDA技術已經逐漸在走向成熟,但是想要與美國的設計工程師形成更有力的競爭,中國的設計隊伍應該在EDA技術中更深入的了解,研發(fā),必要的時候還可以購入一些最新的EDA技術。可見EDA在以后的發(fā)展中有著不可估量的地位。
2 為什么要進行模塊化設計
在實際運用中,如果所有的功能都由一個模塊來實現(xiàn),那么會造成模塊的設計復雜,思路不清晰,Verilog HDL的模塊化設計是一種非常重要的設計方法,不僅能夠簡化設計流程,而且主流設計思想是“自頂向下”。模塊化設計就是將一個大的模塊分為一個頂層模塊和N個子模塊,而頂層模塊只需要通過簡單的程序代碼對子模塊進行調用就能實現(xiàn)整體功能。
模塊化設計,就和小時候玩積木游戲是一樣的,根據(jù)不同的應用需求,設計不同的子模塊,每個子模塊實現(xiàn)不同的功能,各個模塊之間都是并行運行的,頂層模塊可以通過調用子模塊來實現(xiàn)復雜的設計,如果想將所有的子模塊連接成一個完整的系統(tǒng),那么可以通過頂層模塊將所有的子模塊連接起來。一個子模塊也可以在另一個子模塊中被調用。
3 頂層模塊與子模塊的關系圖
頂層模塊與子模塊的關系圖如圖1所示。
4 模塊的概念及其特點
Verilog HDL中的模塊可分為頂層模塊與子模塊,頂層模塊可調用任意子模塊,子模塊內部也可調用其他子模塊。而子模塊一般是具有具體功能的一段verilog代碼,例如一個簡單的與門、非門、或門。在頂層模塊中,可以同時調用多個模塊進行功能的組合。無論是頂層模塊還是子模塊,都具有以下特點。
(1)每一個模塊都是以關鍵詞module開始,以關鍵詞endmodule結束的一段程序。
(2)每一個模塊都能完成一種特定的功能。
(3)模塊之間都是并行運行的。
(4)模塊內部都有端口的聲明。
各個子模塊之間的端口可用線型變量進行連接。
5 模塊的結構
Verilog HDL模塊化設計的主要思想就在于“模塊設計”。一個模塊內部主要由三部分構成:端口聲明,變量描述,功能描述(見圖2)。
一個簡單的模塊結構如下:
module <模塊名>(<端口描述>);
< 變量描述>
<功能描述>
endmodule
模塊名和端口的聲明中可以包含英文字母、數(shù)字和下劃線,并且只能以英文字母開頭,它是模塊的唯一標識符。
端口描述:定義了該模塊與其他模塊通訊的外部接口,可作為PLD器件的引腳,也可作為模塊之間的連線,根據(jù)數(shù)據(jù)流的方向可以分為輸入,輸出及雙向端口。
變量描述:根據(jù)進程模塊中數(shù)據(jù)的需要,可以定義所需要的寄存器變量、線型變量、常量、整型數(shù)據(jù)等。
功能描述:對具體的端口或變量進行算術運算、邏輯運算、關系運算、位運算等操作。
例如一個簡單的單輸入D觸發(fā)器模塊設計如下:
module Dtrigger(clk,d,q);//端口描述
input clk,d; //clk,d定義為輸入端口
output q;//q定義為輸出端口
reg q;//q定義為寄存器類型
always@(posedge clk)// clk信號的上升沿觸發(fā)
begin
q<=d;//功能描述
end
endmodule
6 模塊與模塊的連接
若兩模塊之間的端口需要進行連接,那么首先必須定義好連接端口所用的導線,那么,在Verilog HDL中,可作為導線的變量只有wire類型,所以,在模塊調用的時候,常用到wire類型變量來進行端口的連接。
7 模塊的調用
模塊調用一般是指在頂層模塊中對子模塊的調用,調用方法有兩種一種是位置映射法,嚴格按照模塊定義的端口順序來連接,不用注明原模塊定義時規(guī)定的端口名,其語法結構為:
模塊名 實例名(連接端口1的信號名,連接端口2的信號名, 連接端口3的信號名,…);
另一種為信號映射法,即利用“.”符號,表明原模塊定義時的端口名,再使用括號指明真是端口或導線,其語法結構為:
模塊名 實例名(.端口1信號名(連接端口1的信號名),
.端口2信號名(連接端口2的信號名),
.端口3信號名(連接端口3的信號名),
…);
顯然,信號映射法同時將信號名和被引用端口名列出來,不必嚴格遵守端口順序,不僅降低了代碼易錯性,還提高了程序的可讀性和可移植性。因此,在良好的代碼中,一般不使用位置調用法,而采用信號映射法。
參考文獻
[1] 康磊,宋彩利,李潤洲.數(shù)字電路設計及Verilog HDL實現(xiàn)[M].西安電子科技大學出版社,2010.
[2] 周潤景,姜攀.基于Quartus II的數(shù)字系統(tǒng)Verilog HDL設計實例詳解[M].2版.電子工業(yè)出版社,2010.
[3] 王靜霞.FPGA/CPLD應用技術(Verilog語言版)[M].2版.電子工業(yè)出版社,2010.endprint