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