用戶定義的原語(yǔ)
在前一章中,我們介紹了Verilog HDL提供的內(nèi)置基本門。本章講述Verilog HDL指定用戶定義原語(yǔ)U D P的能力。
U D P的實(shí)例語(yǔ)句與基本門的實(shí)例語(yǔ)句完全相同,即 U D P實(shí)例語(yǔ)句的語(yǔ)法與基本門的實(shí)例語(yǔ)句語(yǔ)法一致。
6.1 UDP的定義
使用具有如下語(yǔ)法的U D P說(shuō)明定義U D P。
p r i m i t i v e U D P _ n a m e (OutputName, List_of_inputs )
O u t p u t _ d e c l a r a t i o n
L i s t _ o f _ i n p u t _ d e c l a r a t i o n s
[R e g _ d e c l a r a t i o n]
[I n i t i a l _ s t a t e m e n t]
t a b l e
L i s t _ o f _ t a b e l _ e n t r i e s
e n d t a b l e
e n d p r i m i t i v e
U D P的定義不依賴于模塊定義,因此出現(xiàn)在模塊定義以外。也可以在單獨(dú)的文本文件中
定義U D P。U D P只能有一個(gè)輸出和一個(gè)或多個(gè)輸入。第一個(gè)端口必須是輸出端口。此外,輸出可以取值0、1或x(不允許取z值)。輸入中出現(xiàn)值z(mì)以x處理。U D P的行為以表的形式描述。在U D P中可以描述下面兩類行為:
1) 組合電路
2) 時(shí)序電路(邊沿觸發(fā)和電平觸發(fā))
6.2 組合電路UDP
在組合電路U D P中,表規(guī)定了不同的輸入組合和相對(duì)應(yīng)的輸出值。沒有指定的任意組合輸出為x。下面以2 - 1多路選擇器為例加以說(shuō)明。
p r i m i t i v e MUX2x1 (Z, Hab, Bay, Sel ) ;
o u t p u t Z;
i n p u t Hab,Bay, Sel;
t a b l e
// Hab Bay Sel : Z 注:本行僅作為注釋。
0 ? 1 : 0 ;
1 ? 1 : 1 ;
? 0 0 : 0 ;
? 1 0 : 1 ;
0 0 x : 0 ;
1 1 x : 1 ;
e n d t a b l e
e n d p r i m i t i v e
字符?代表不必關(guān)心相應(yīng)變量的具體值,即它可以是0、1或x。輸入端口的次序必須與表中各項(xiàng)的次序匹配,即表中的第一列對(duì)應(yīng)于原語(yǔ)端口隊(duì)列的第一個(gè)輸入 (例子中為 H a b),第二列是 B a y,第三列是 S e l。在多路選擇器的表中沒有輸入組合 0 1x項(xiàng)(還有其它一些項(xiàng) );在這種情況下,輸出的缺省值為 x(對(duì)其它未定義的項(xiàng)也是如此 )。
圖6 - 1為使用2 - 1多路選擇器原語(yǔ)組成的4 - 1多路選擇器的示例。
如上例所示,在U D P實(shí)例中,總共可以指定 2個(gè)時(shí)延,這是由于U D P的輸出可以取值0、1或x(無(wú)截止時(shí)延)。
6.3 時(shí)序電路UDP
在時(shí)序電路U D P中,使用1位寄存器描述內(nèi)部狀態(tài)。該寄存器的值是時(shí)序電路U D P的輸出值。共有兩種不同類型的時(shí)序電路U D P:一種模擬電平觸發(fā)行為;另一種模擬邊沿觸發(fā)行為。時(shí)序電路U D P使用寄存器當(dāng)前值和輸入值決定寄存器的下一狀態(tài) (和后繼的輸出)。
6.3.1 初始化狀態(tài)寄存器
時(shí)序電路U D P的狀態(tài)初始化可以使用帶有一條過(guò)程賦值語(yǔ)句的初始化語(yǔ)句實(shí)現(xiàn)。形式如下:
i n i t i a l r e g _ n a m e = 0,1,or x;
初始化語(yǔ)句在U D P定義中出現(xiàn)。
6.3.2 電平觸發(fā)的時(shí)序電路UDP
下面是D鎖存器建模的電平觸發(fā)的時(shí)序電路 U D P示例。只要時(shí)鐘為低電平 0,數(shù)據(jù)就從輸入傳遞到輸出;否則輸出值被鎖存。
p r i m i t i v e Latch (Q, Clk, D) ;
o u t p u t Q;
r e g Q;
i n p u t Clk, D;
t a b l e
// Clk D Q(State) Q( n e x t )
0 1 : ? : 1 ;
0 0 : ? : 0 ;
1 ? : ? : - ;
e n d t a b l e
e n d p r i m i t i v e
“-”字符表示值“無(wú)變化”。注意U D P的狀態(tài)存儲(chǔ)在寄存器D中。
6.3.3 邊沿觸發(fā)的時(shí)序電路UDP
下例用邊沿觸發(fā)時(shí)序電路U D P為D邊沿觸發(fā)觸發(fā)器建模。初始化語(yǔ)句用于初始化觸發(fā)器的狀態(tài)。
表項(xiàng)( 0 1 )表示從0轉(zhuǎn)換到1,表項(xiàng)( 0 x )表示從0轉(zhuǎn)換到x,表項(xiàng)( ? 0 )表示從任意值( 0 , 1或x)轉(zhuǎn)換到0,表項(xiàng)( ? ? )表示任意轉(zhuǎn)換。對(duì)任意未定義的轉(zhuǎn)換,輸出缺省為 x。
假定D _ E d g e _ F F為U D P定義,它現(xiàn)在就能夠象基本門一樣在模塊中使用,如下面的 4位寄存器所示。
6.3.4 邊沿觸發(fā)和電平觸發(fā)的混合行為
在同一個(gè)表中能夠混合電平觸發(fā)和邊沿觸發(fā)項(xiàng)。在這種情況下,邊沿變化在電平觸發(fā)之前處理,即電平觸發(fā)項(xiàng)覆蓋邊沿觸發(fā)項(xiàng)。下例是帶異步清空的D觸發(fā)器的U D P描述。
6.4 另一實(shí)例
下面是3位表決電路的U D P描述。如果輸入向量中存在2個(gè)或更多的1,則輸出為1。
6.5 表項(xiàng)匯總
責(zé)任編輯:lq
-
Verilog
+關(guān)注
關(guān)注
28文章
1365瀏覽量
111799 -
變量
+關(guān)注
關(guān)注
0文章
614瀏覽量
28821 -
選擇器
+關(guān)注
關(guān)注
0文章
109瀏覽量
14761
原文標(biāo)題:Verilog入門-用戶定義的原語(yǔ)
文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
FPGA Verilog HDL語(yǔ)法之編譯預(yù)處理

一文詳解Verilog HDL

ISERDESE2原語(yǔ)端口及參數(shù)介紹

淺談Verilog和VHDL的區(qū)別

Verilog 與 ASIC 設(shè)計(jì)的關(guān)系 Verilog 代碼優(yōu)化技巧
Verilog與VHDL的比較 Verilog HDL編程技巧
Verilog vhdl fpga
數(shù)字系統(tǒng)設(shè)計(jì)與Verilog HDL
Verilog硬件描述語(yǔ)言參考手冊(cè)
Verilog HDL的基礎(chǔ)知識(shí)

FPGA Verilog HDL代碼如何debug?
FPGA芯片架構(gòu)和資源有深入的理解,精通Verilog HDL、VHDL
FPGA Verilog HDL有什么奇技巧?
Semidrive X9P/X9U 電源設(shè)計(jì)

評(píng)論