<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > Verilog HDL基礎教程之:程序基本結構

Verilog HDL基礎教程之:程序基本結構

作者: 時(shí)間:2013-08-21 來(lái)源:網(wǎng)絡(luò ) 收藏

例4:自行設計的三態(tài)驅動(dòng)器。

module trist1(out,in,enable); //三態(tài)啟動(dòng)器模塊端口聲明

output out; //端口說(shuō)明

input in, enable;

mytri tri_inst(out,in,enable);//實(shí)例化由mytri模塊定義的實(shí)例元件tri_inst

endmodule

module mytri(out,in,enable); //三態(tài)啟動(dòng)器模塊端口聲明

output out; //端口說(shuō)明

input in, enable;

assign out = enable? in : 'bz; //三態(tài)啟動(dòng)器算法描述

endmodule

這個(gè)例子通過(guò)另一種方法描述了一個(gè)三態(tài)門(mén)。在這個(gè)例子中存在著(zhù)兩個(gè)模塊。模塊trist1調用由模塊mytri定義的實(shí)例元件tri_inst。模塊trist1是頂層模塊。模塊mytri則被稱(chēng)為子模塊。

通過(guò)上面的例子可以看到。

  • 是由模塊構成的。每個(gè)模塊的內容都是嵌在module和endmodule兩個(gè)語(yǔ)句之間。每個(gè)模塊實(shí)現特定的功能。模塊是可以進(jìn)行層次嵌套的。正因為如此,才可以將大型的數字電路設計分割成不同的小模塊來(lái)實(shí)現特定的功能,最后通過(guò)頂層模塊調用子模塊來(lái)實(shí)現整體功能。
  • 每個(gè)模塊要進(jìn)行端口定義,并說(shuō)明輸入輸出口,然后對模塊的功能進(jìn)行行為邏輯描述。
  • 的書(shū)寫(xiě)格式自由,一行可以寫(xiě)幾個(gè)語(yǔ)句,一個(gè)語(yǔ)句也可以分寫(xiě)多行。
  • 除了endmodule語(yǔ)句外,每個(gè)語(yǔ)句和數據定義的最后必須有分號。
  • 可以用“/*.....*/”和“//.......”對 的任何部分作注釋。一個(gè)好的、有使用價(jià)值的源程序都應當加上必要的注釋,以增強程序的可讀性和可維護性。

模塊的框架

模塊的內容包括I/O聲明、I/O說(shuō)明、內部信號聲明和功能定義。

1.I/O聲明

模塊的端口聲明了模塊的輸入輸出端口,其格式如下:

Module 模塊名(端口1,端口2,端口3,端口4, …);

2.I/O說(shuō)明

I/O說(shuō)明的格式如下:

輸入口:input 端口名1,端口名2,…,端口名i; //(共有i個(gè)輸入口)

輸出口:output 端口名1,端口名2,…,端口名j; //(共有j個(gè)輸出口)

I/O說(shuō)明也可以寫(xiě)在端口聲明語(yǔ)句里,其格式如下:

module module_name(input port1,input port2,…,output port1,output port2… )

3.內部信號聲明

在模塊內用到的和與端口有關(guān)的wire和reg變量的聲明,如下所示:

reg [width-1 : 0] R變量1,R變量2 …;

wire [width-1 : 0] W變量1,W變量2 …;

4.功能定義

模塊中最重要的部分是邏輯功能定義部分,有3種方法可在模塊中產(chǎn)生邏輯。

(1)用“assign”聲明語(yǔ)句。

assign a = b c;

這種方法的句法很簡(jiǎn)單,只需寫(xiě)一個(gè)“assign”,后面再加一個(gè)方程式即可。例子中的方程式描述了一個(gè)有兩個(gè)輸入的與門(mén)。

(2)用實(shí)例元件。

and and_inst( q, a, b );

采用實(shí)例元件的方法在電路圖輸入方式下,調入庫元件。鍵入元件的名字和相連的引腳即可,表示在設計中用到一個(gè)跟與門(mén)(and)一樣的名為and_inst的與門(mén),其輸入端為a、b,輸出為q。要求每個(gè)實(shí)例元件的名字必須是惟一的,以避免與其他調用與門(mén)(and)的實(shí)例混淆。

(3)用“always”塊。

always @(posedge clk or posedge clr) begin //時(shí)鐘上升沿觸發(fā),異步清零

if(clr) q = 0; //清零

else if(en) q = d; //使能賦值

end

采用“assign”語(yǔ)句是描述組合邏輯最常用的方法之一,而“always”塊既可用于描述組合邏輯,也可描述時(shí)序邏輯。上面的例子用“always”塊生成了一個(gè)帶有異步清除端的D觸發(fā)器。

“always”塊可用很多種描述手段來(lái)表達邏輯,例如上例中就用了“if...else”語(yǔ)句來(lái)表達邏輯關(guān)系。如按一定的風(fēng)格來(lái)編寫(xiě)“always”塊,可以通過(guò)綜合工具把源代碼自動(dòng)綜合成用門(mén)級結構表示的組合或時(shí)序邏輯電路。需要注意的是,如果用Verilog模塊實(shí)現一定的功能,首先應該清楚哪些是同時(shí)發(fā)生的,哪些是順序發(fā)生的。

上面3個(gè)例子分別采用了“assign”語(yǔ)句、實(shí)例元件和“always”塊。這3個(gè)例子描述的邏輯功能是同時(shí)執行的。也就是說(shuō),如果把這3項寫(xiě)到一個(gè)Verilog模塊文件中去,它們的次序不會(huì )影響邏輯實(shí)現的功能。這3項是同時(shí)執行的,也就是并發(fā)的。

然而,在“always”模塊內,邏輯是按照指定的順序執行的。“always”塊中的語(yǔ)句稱(chēng)為“順序語(yǔ)句”,因為它們是順序執行的。請注意,兩個(gè)或更多的“always”模塊也是同時(shí)執行的,但是模塊內部的語(yǔ)句是順序執行的。

看一下“always”內的語(yǔ)句,就會(huì )明白它是如何實(shí)現功能的。“if…else… if”必須順序執行,否則其功能就沒(méi)有任何意義。如果else語(yǔ)句在if語(yǔ)句之前執行,功能就會(huì )不符合要求。為了能實(shí)現上述描述的功能,“always”模塊內部的語(yǔ)句將按照書(shū)寫(xiě)的順序執行。


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Verilog HDL 基礎教程 程序

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>