VerilogHDL數(shù)字系統(tǒng)設(shè)計(jì)及其應(yīng)用04用戶自定義元件(UDP)_第1頁
VerilogHDL數(shù)字系統(tǒng)設(shè)計(jì)及其應(yīng)用04用戶自定義元件(UDP)_第2頁
VerilogHDL數(shù)字系統(tǒng)設(shè)計(jì)及其應(yīng)用04用戶自定義元件(UDP)_第3頁
VerilogHDL數(shù)字系統(tǒng)設(shè)計(jì)及其應(yīng)用04用戶自定義元件(UDP)_第4頁
VerilogHDL數(shù)字系統(tǒng)設(shè)計(jì)及其應(yīng)用04用戶自定義元件(UDP)_第5頁
已閱讀5頁,還剩45頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第4章 用戶自定義元件(UDP) 第第4章用戶自定義元件章用戶自定義元件(UDP) 4.1 UDP的定義的定義 4.2 組合邏輯電路組合邏輯電路UDP 4.3 時(shí)序邏輯電路時(shí)序邏輯電路UDP 第4章 用戶自定義元件(UDP) 4.1 UDP的定義的定義UDP的定義是由一個(gè)獨(dú)立的定義模塊構(gòu)成的,該模塊由關(guān)鍵詞“primitive”和“endprimitive”界定。UDP定義模塊的語法格式如下:primitive (, , , );輸出端口類型說明(output);輸入端口類型說明(input);輸出端寄存器變量說明(reg);元件初始狀態(tài)說明( initial );table;endtable

2、endprimitive第4章 用戶自定義元件(UDP) 對(duì)上述的語法格式,需要說明如下幾點(diǎn):(1) UDP定義模塊不能出現(xiàn)在其它模塊定義之內(nèi),UDP定義模塊和其它模塊具有相同的語法結(jié)構(gòu)地位,它的定義必須獨(dú)立于其它模塊結(jié)構(gòu)成分。所以UDP定義模塊必須出現(xiàn)在其它模塊定義之外,同時(shí)它也可以出現(xiàn)在獨(dú)立的文件中。比如,例4-1所示的結(jié)構(gòu)是正確的,而例4-2所示的結(jié)構(gòu)是錯(cuò)誤的。第4章 用戶自定義元件(UDP) 【例例4-1】UDP定義模塊的正確位置。module MODULE1;/模塊MODULE1定義的開始/模塊MODULE1描述體endmodule/模塊MODULE1定義的結(jié)束primitive M

3、Y_GATE(out,a,b);/UDP元件MY_GATE定義模塊的開始/UDP元件MY_GATE定義的描述體endprimitive/UDP元件MY_GATE定義模塊的結(jié)束module MODULE2;/模塊MODULE2定義的開始/模塊MODULE2 描述體endmodule/模塊MODULE2定義的結(jié)束第4章 用戶自定義元件(UDP) 【例例4-2】UDP定義模塊的錯(cuò)誤位置。module MODULE1;/模塊MODULE1定義的開始/模塊MODULE1描述體primitive MY_GATE(out,a,b);/UDP元件MY_GATE定義模塊的開始 /UDP元件MY_GATE定義的描

4、述體endprimitive /UDP元件MY_GATE定義模塊的結(jié)束endmodule/模塊MODULE1定義的結(jié)束在例4-1中,UDP元件MY_GATE的定義模塊與其它兩個(gè)模塊MODULE1和MODULE2并列出現(xiàn),相互獨(dú)立;而在例4-2中,UDP定義模塊卻包含在另一個(gè)模塊MODULE1結(jié)構(gòu)之中,這種情況是不允許的。第4章 用戶自定義元件(UDP) (2) 在UDP定義模塊的第一行,關(guān)鍵詞“primitive”標(biāo)志著定義模塊的開始;其后出現(xiàn)的“元件名”是為被定義UDP元件所取的一個(gè)名字;后面出現(xiàn)的端口列表指明了UDP元件的輸入輸出端口,該端口列表由若干個(gè)端口組成,其中只能有一個(gè)輸出端口并且

5、該輸出端口必須是端口說明表中的第一項(xiàng),而UDP的輸入端口數(shù)目可以是一個(gè)或多個(gè),一般對(duì)時(shí)序電路的UDP最多允許有9個(gè)輸入端,對(duì)組合電路的UDP最多允許有10個(gè)輸入端。必須注意在定義UDP元件時(shí)所有輸入端口和輸出端口都只能是1位的(標(biāo)量)。第4章 用戶自定義元件(UDP) (3) 輸出端口類型說明是對(duì)UDP元件的輸出端口進(jìn)行說明,這和普通模塊定義中的輸出端口說明一樣是通過關(guān)鍵詞“output”來進(jìn)行的,比如:output out; 就說明了端口out 是一個(gè)輸出端口。(4) 輸入端口類型說明是對(duì)UDP元件的輸入端口進(jìn)行說明,這和普通模塊定義中的輸入端口說明一樣是通過關(guān)鍵詞“input”來進(jìn)行的,比

6、如:input a,b; 就說明了端口a和端口b 是兩個(gè)輸入端口。第4章 用戶自定義元件(UDP) (5) 輸出端寄存器變量說明是在對(duì)時(shí)序邏輯UDP元件進(jìn)行定義時(shí),為了對(duì)輸出端口寄存器變量類型進(jìn)行說明而引入的。寄存器變量用于描述時(shí)序電路UDP中的內(nèi)部狀態(tài)。要注意只有在被定義的元件是時(shí)序邏輯元件時(shí)才能將輸出端口定義成寄存器類變量。寄存器變量說明用關(guān)鍵詞“reg”實(shí)現(xiàn),比如:reg out; 就將UDP輸出端口 out定義為一個(gè)寄存器變量。(6) 元件初始狀態(tài)說明也是為進(jìn)行時(shí)序電路UDP的定義而引入的,它的作用是對(duì)時(shí)序電路上電時(shí)刻(即0時(shí)刻)的初始狀態(tài)進(jìn)行定義,只允許有0、1、x三種狀態(tài)。缺省為x

7、態(tài)。元件初始狀態(tài)說明用“initial”過程塊來實(shí)現(xiàn),比如:initial out=x;就將時(shí)序邏輯UDP元件的初始狀態(tài)定義為“x”。第4章 用戶自定義元件(UDP) (7) 由關(guān)鍵詞“table”和“endtable”界定的多個(gè)table表項(xiàng)構(gòu)成了UDP元件定義模塊內(nèi)的一個(gè)輸入輸出真值表。在table表項(xiàng)中只允許出現(xiàn)0、1、x三種邏輯值,不允許出現(xiàn)高阻態(tài)“z”。組合電路UDP定義模塊和時(shí)序電路UDP定義模塊內(nèi)的table表項(xiàng)格式是不同的(詳見下面幾節(jié)的討論)。table表項(xiàng)構(gòu)成了UDP元件輸入、輸出以及內(nèi)部狀態(tài)(時(shí)序邏輯電路情況)間的一張“邏輯真值表”。對(duì)不同邏輯功能的UDP元件進(jìn)行定義時(shí)的

8、差別將體現(xiàn)在不同的table表項(xiàng)描述上。(8) 關(guān)鍵詞“endprimitive”出現(xiàn)在定義模塊的末尾,它標(biāo)志著UDP定義模塊的結(jié)束。下面給出對(duì)四選一MUX進(jìn)行UDP定義描述的一個(gè)例子。第4章 用戶自定義元件(UDP) 【例例4-3】將四選一MUX定義成UDP元件。primitive mux4_l(out,in1,in2,in3,in4,ctrl1,ctrl2);output out;input in1,in2,in3,in4,ctrl1,ctrl2;table/ in1 in2 in3 in4 ctrl1 ctrl2 out 注釋行,用于保證表項(xiàng)中各項(xiàng)的正確排列順序0 ? ? ? 0 0 :

9、 01 ? ? ? 0 0 : 1? 0 ? ? 0 1 : 0? 1 ? ? 0 1 : 1? ? 0 ? 1 0 : 0? ? 1 ? 1 0 : 1? ? ? 0 1 1 : 0? ? ? 1 1 1 : 1endtableendprimitive第4章 用戶自定義元件(UDP) 在例4-3中,輸入端口中的in1in4為四個(gè)輸入信號(hào),ctrl1、ctrl2為選通控制信號(hào):當(dāng)這兩個(gè)值為00、01、10和11時(shí)將分別選通in1、in2、in3、in4信號(hào)到輸出端口out 。例中的table表由8個(gè)表項(xiàng)組成,它們構(gòu)成了該四選一MUX的邏輯真值表。表項(xiàng)中的?字符代表不必關(guān)心相應(yīng)變量的具體取值,即

10、它可以是0、1或x 。注意不能將控制端口定義成一個(gè)二位的輸入端口,即不能采用如下定義方式:第4章 用戶自定義元件(UDP) 【例例4-4】錯(cuò)例。primitive mux4_l(out,in1,in2,in3,in4,ctrl);/錯(cuò)例output out;input in1,in2,in3,in4 ;input 2 1 ctrl; /錯(cuò),在UDP定義中的端口只能是一位寬度的標(biāo)量類型table/in1 in2 in3 in4 ctrl out 0 ? ? ? 00 : 01 ? ? ? 00 : 1? 0 ? ? 01 : 0? 1 ? ? 01 : 1? ? 0 ? 10 : 0? ? 1

11、? 10 : 1? ? ? 0 11 : 0? ? ? 1 11 : 1endtableendprimitive第4章 用戶自定義元件(UDP) 4.2 組合邏輯電路組合邏輯電路UDP對(duì)組合邏輯電路UDP元件的描述相當(dāng)于直接把電路的邏輯真值表搬到UDP描述的table表中。組合邏輯電路UDP定義時(shí)的table表項(xiàng)的格式為 : 對(duì)于上述table表項(xiàng)格式,必須注意:(1) 各個(gè)輸入輸出邏輯值只能是 0,1,x 和 ? 中的一個(gè),不能取高阻態(tài)“z”。(2) 輸出端口在primitive定義語句的端口表項(xiàng)中列第一的位置,而輸出端邏輯值在table表項(xiàng)內(nèi)則是位于最后一項(xiàng)。(3) 在表項(xiàng)中要用空格分隔開

12、不同的輸入端邏輯值, 各個(gè)輸入端口在table表項(xiàng)中的排列順序必須與它們?cè)凇皃rimitive”定義語句中端口表項(xiàng)內(nèi)的排列順序保持嚴(yán)格一致。(4) table表項(xiàng)中的輸入部分與輸出部分之間要用一個(gè)冒號(hào)隔開。第4章 用戶自定義元件(UDP) (5) 為了明確觀察輸入輸出相互關(guān)系和各項(xiàng)排列順序是否正確,通常在table表項(xiàng)的第一欄中插人一條注釋語句,比如例43中的注釋行:/ in1 in2 in3 in4 ctrl1 ctrl2 out UDP元件的邏輯功能是由UDP定義模塊內(nèi)關(guān)鍵詞“table”和“endtable”之間的table表的內(nèi)容所決定的,table表相當(dāng)于構(gòu)成了UDP元件輸入輸出的一

13、個(gè)真值表。在進(jìn)行模擬時(shí),當(dāng)模擬器發(fā)現(xiàn)UDP的某個(gè)輸入發(fā)生改變時(shí),將會(huì)自動(dòng)進(jìn)入table表查找相匹配的table表項(xiàng),再把查到的輸出邏輯值賦給輸出端口。如果在UDP定義模塊的table表中找不到與當(dāng)前輸入相匹配的table表項(xiàng),則輸出端將取不定態(tài)“x”。所以,在進(jìn)行UDP元件描述時(shí),應(yīng)當(dāng)將盡可能多的輸入狀態(tài)設(shè)置到table表項(xiàng)中。第4章 用戶自定義元件(UDP) 以設(shè)計(jì)一個(gè)一位的全加器為例,表4.1是它的本位和與進(jìn)位的邏輯真值表,由于一個(gè)UDP元件只允許有一個(gè)一位的輸出,所以要分別定義兩個(gè)UDP元件來實(shí)現(xiàn)全加器的本位和與進(jìn)位。把它們的真值表分別移植到兩個(gè)UDP描述的table表中,就得到了例4-

14、5所示的全加器的UDP描述。第4章 用戶自定義元件(UDP) 表 4.1 全加器本位和與進(jìn)位的邏輯真值表 Cin a b sum cout 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1 第4章 用戶自定義元件(UDP) 【例例4-5】全加器的UDP描述。/進(jìn)位的UDP定義primitive carry(cout,cin,a,b ); output cout;input a ,b ,cin;table /cout 對(duì)應(yīng)的table表項(xiàng) /cinab:cout000: 0;001: 0

15、;010: 0;011: 1:100: 0:101: 1;11 0: 1;111: 1;endtableendprimitive第4章 用戶自定義元件(UDP) /本位和的UDP定義primitive summ(sum,cin,a,b ); output sum;input a ,b ,cin;table /sum對(duì)應(yīng)的table表項(xiàng) /cin a b : sum0 0 0 : 0;0 0 1 : 1;0 1 0 : 1;0 1 1 : 0:1 0 0 : 1:1 0 1 : 0;1 1 0 : 0;1 1 1 : 1;endtableendprimitive第4章 用戶自定義元件(UDP)

16、在例4-5的table表沒有考慮到輸入為x時(shí)的情況,因此在某個(gè)輸入為x時(shí),模擬器找不到對(duì)應(yīng)的table表項(xiàng),輸出將為cout = x,sum = x。而實(shí)際上對(duì)于進(jìn)位cout而言,只要三個(gè)輸入項(xiàng)(cin,a和b)中有二個(gè)值為1,則不管第三個(gè)的值是什么(0,1或x),cout一定為1;反之,如果輸入中有二個(gè)為0,則cout也一定為0。為了表示出進(jìn)位的這一特征,可以在cout對(duì)應(yīng)的UDP定義table表內(nèi)用?來替代第三個(gè)值對(duì)應(yīng)表項(xiàng),得到例4-6的定義描述。第4章 用戶自定義元件(UDP) 【例例4-6】考慮了輸入狀態(tài)“x”后的全加器進(jìn)位cout的UDP描述。/進(jìn)位的UDP定義primitive c

17、arry(cout,cin,a,b ); output cout;input a ,b ,cin;table /cout 對(duì)應(yīng)的table表項(xiàng),較例45的情況有所精簡(jiǎn) /cin a b : cout0 0 ? : 0;0 ? 0 : 0;? 0 0 : 0:1 1 ? : 1;1 ? 1 : 1;? 1 1 : 1:endtableendprimitive第4章 用戶自定義元件(UDP) 比如當(dāng)我們要將如圖4.1所示的組合邏輯電路描述為一個(gè)UDP元件時(shí),首先得到該電路的真值表如表4.2所示。第4章 用戶自定義元件(UDP) 圖4.1 一個(gè)組合邏輯電路的例子abandand_orcorout第4

18、章 用戶自定義元件(UDP) abcout00000011010001111000101111011111表4.2 圖4.1所示電路的邏輯真值表第4章 用戶自定義元件(UDP) 將上述真值表移植到UDP描述的table表中,就得到了例4-7所示的UDP描述?!纠?-7】圖4.1所示電路的UDP描述。primitive and_or(out,a,b,c );output out;input a ,b ,c;table /a b c : out0 0 0 : 0;0 0 1 : 1;0 1 0 : 0;0 1 1 : 1:1 0 0 : 0:1 0 1 : 1;1 1 0 : 1;1 1 1 :

19、 1;endtableendprimitive第4章 用戶自定義元件(UDP) 若再考慮到輸入取x態(tài)的情況,由圖4.1可知,當(dāng)a b c0 x0,x00時(shí)輸出為0;當(dāng)a b c0 x1,11x,1x1,x01,x11,xx1時(shí)輸出為1;將這些狀態(tài)補(bǔ)充到table表中就得到例4-8的情況。第4章 用戶自定義元件(UDP) 【例例4-8】圖4.1所示電路的UDP描述。primitive and_or(out,a,b,c );output out;input a ,b ,c;table /a b c : out0 0 0 : 0;0 0 1 : 1;0 1 0 : 0;0 1 1 : 1:1 0 0

20、 : 0:1 0 1 : 1;1 1 0 : 1;1 1 1 : 1;第4章 用戶自定義元件(UDP) /補(bǔ)充的包含有x輸入態(tài)的表項(xiàng)0 x 0 : 0; x 0 0 : 0;0 x 1 : 1;1 1 x : 1;1 x 1 : 1;x 0 1 : 1;x 1 1 : 1;x x 0 : 1;endtableendprimitive第4章 用戶自定義元件(UDP) 由上面給出的邏輯圖4.1和例4-8中的table表可以看出,當(dāng)輸入c取值為1時(shí),無論a,b取值如何,輸出out取值都是1;當(dāng)輸入a b取值為11時(shí),無論c取值如何輸出,out取值都是1;當(dāng)輸入b c取值為00時(shí),無論a取值如何,輸出

21、out取值都是0;當(dāng)輸入a c取值為00時(shí),無論b取值如何,輸出out取值都是0。這樣可以對(duì)table表進(jìn)行簡(jiǎn)化得到例4-9所示的UDP描述。第4章 用戶自定義元件(UDP) 【例例4-9】圖4.1所示電路的UDP描述。primitive and_or(out,a,b,c );output out;input a ,b ,c;table /a b c : out? ? 1 : 1;1 1 ? : 1;? 0 0 : 0;0 ? 0 : 0:endtableendprimitive第4章 用戶自定義元件(UDP) 4.3 時(shí)序邏輯電路時(shí)序邏輯電路UDP與組合邏輯電路相比,時(shí)序邏輯電路元件的輸出除

22、了與當(dāng)前的輸入狀態(tài)有關(guān),還與時(shí)序元件本身的內(nèi)部狀態(tài)有關(guān)。對(duì)時(shí)序邏輯電路UDP進(jìn)行定義時(shí)的table表項(xiàng)格式為: : : 與組合邏輯電路UDP的定義一樣,時(shí)序邏輯電路UDP定義模塊中各個(gè)輸入端口在table表項(xiàng)中的排列順序必須與它們?cè)凇皃rimitive”語句中端口表項(xiàng)內(nèi)的排列順序保持嚴(yán)格一致;在表項(xiàng)中要用空格分隔開不同的輸入邏輯值。第4章 用戶自定義元件(UDP) 時(shí)序邏輯電路UDP定義時(shí)的 table表項(xiàng)格式與組合邏輯電路UDP的表項(xiàng)格式的不同之處在于:(1) 表項(xiàng)中多了關(guān)于元件內(nèi)部狀態(tài)的描述。(2) 要用兩個(gè)冒號(hào)分別將輸入邏輯值部分與元件內(nèi)部狀態(tài),元件內(nèi)部狀態(tài)與輸出邏輯值部分分隔開。(3)

23、 在構(gòu)建table表項(xiàng)時(shí)要把元件內(nèi)部狀態(tài)對(duì)輸出的影響考慮進(jìn)去。時(shí)序邏輯電路元件可根據(jù)觸發(fā)方式分為電平觸發(fā)與邊沿觸發(fā)兩類。它們對(duì)應(yīng)的table表項(xiàng)格式雖然都是上面給出的格式,但是table表項(xiàng)中輸入輸出信號(hào)可取的狀態(tài)在兩種電路類別下是不同的。這一點(diǎn)將分別在4.3.2小節(jié)和4.3.3小節(jié)中加以說明。第4章 用戶自定義元件(UDP) 4.3.1 初始化狀態(tài)寄存器初始化狀態(tài)寄存器因?yàn)闀r(shí)序邏輯電路元件有自己的內(nèi)部狀態(tài),所以必須有一個(gè)寄存器變量來保持其內(nèi)部狀態(tài)。在時(shí)序邏輯電路UDP的定義模塊中必須將輸出端口定義為寄存器類型,所以如4.1節(jié)所講述的,時(shí)序邏輯電路UDP的定義模塊中必須增加“輸出端寄存器變量說

24、明”這一項(xiàng)來將輸出端口說明成寄存器變量類型。在有些情況下必須對(duì)上電時(shí)刻(即0時(shí)刻)元件的初始狀態(tài)值加以指定。所以在時(shí)序邏輯電路UDP的定義模塊中還可以增加“元件初始狀態(tài)說明”這一項(xiàng)通過initial過程塊來指定元件上電時(shí)刻的初始狀態(tài)(0、1或x)。如果該說明項(xiàng)(initial語句)缺省,則元件的初始狀態(tài)被默認(rèn)為不定態(tài)“x”。第4章 用戶自定義元件(UDP) 4.3.2 電平觸發(fā)時(shí)序電路電平觸發(fā)時(shí)序電路UDP電平觸發(fā)時(shí)序電路UDP的特點(diǎn)是其內(nèi)部狀態(tài)改變是由某一輸入信號(hào)電平觸發(fā)的。 比如一個(gè)電平觸發(fā)的鎖存器,其真值表示于表4.3中。當(dāng)它的時(shí)鐘輸入信號(hào)clk為邏輯0時(shí),鎖存器的狀態(tài)及輸出時(shí)刻保持與輸

25、入信號(hào)d_in相同;當(dāng)時(shí)鐘輸入信號(hào)為邏輯1時(shí),鎖存器進(jìn)入鎖存狀態(tài),其內(nèi)部狀態(tài)及輸出保持不變。例4-10給出了電平觸發(fā)鎖存器的UDP描述。第4章 用戶自定義元件(UDP) 表 4.3 電平觸發(fā)鎖存器的邏輯真值表 d_in clk current_state next state (q) 0 0 0 或 1 或 x 0 1 0 0 或 1 或 x 1 0 或 1 或 x 1 1 1 0 或 1 或 x 1 0 0 第4章 用戶自定義元件(UDP) 【例例4-10】電平觸發(fā)鎖存器的UDP描述。primitive latch (q,clk,d_in); output q;reg q;input clk

26、, d_in ;initial q = 1b0; / 內(nèi)部狀態(tài)和輸出被初始化為0狀態(tài)table/clk d_in : current_state : next_state0 1 : ? : 1;0 0 : ? : 0;1 ? : ? : ; /“”表示輸出狀態(tài)不變endtableendprimitive第4章 用戶自定義元件(UDP) 例4-10中最后一個(gè)table項(xiàng)內(nèi)引入了一個(gè)新的標(biāo)記“”,它的含義就是UDP的內(nèi)部狀態(tài)(也就是輸出端狀態(tài))將保持原有狀態(tài)不變(No-change)。表項(xiàng)中的“?”仍代表“任意態(tài)”。例4-10中第一個(gè)table表項(xiàng)對(duì)應(yīng)于真值表中第二行的情況,第二個(gè)table表項(xiàng)對(duì)

27、應(yīng)于真值表中第一行的情況,第三個(gè)table表項(xiàng)對(duì)應(yīng)于真值表中第三、四行的情況,此時(shí)clk=l,不管輸入數(shù)據(jù)d_in的值是多少,鎖存器都將保持原來的狀態(tài)不變,處于鎖存狀態(tài)。同時(shí)需要注意到,如同4.3.1小節(jié)中所述,例4-10中的定義中增加了對(duì)說明輸出q為寄存器類變量的reg語句;又增加了指定UDP初始狀態(tài)為邏輯0值的initial語句。第4章 用戶自定義元件(UDP) 4.3.3 邊沿觸發(fā)時(shí)序電路邊沿觸發(fā)時(shí)序電路UDP邊沿觸發(fā)時(shí)序電路UDP的特點(diǎn)是其內(nèi)部狀態(tài)的改變是由輸入時(shí)鐘的有效邊沿(上升沿或下降沿)觸發(fā)的,而與時(shí)鐘信號(hào)穩(wěn)定時(shí)的輸入狀況無關(guān)。所以對(duì)邊沿觸發(fā)時(shí)序邏輯元件的描述中就需要對(duì)輸入信號(hào)的

28、變化和變化方式加以考慮。模擬器只有在檢測(cè)到輸入信號(hào)發(fā)生跳變時(shí)才會(huì)搜索table表得到新的內(nèi)部狀態(tài)值和輸出邏輯值。這樣table表項(xiàng)中的輸入邏輯值部分需要列出輸入邏輯值的變化情況即跳變情況。在Verilog中用一對(duì)括號(hào)括起來的二個(gè)數(shù)字“(vw)”的形式來表示從一個(gè)狀態(tài)到另一個(gè)狀態(tài)的轉(zhuǎn)化,其中v、w可以是0、1、x、?之一,因而(01)代表的就是由0往1的上升沿正跳變,(10)則代表了下降沿負(fù)跳變,(1x)代表了由1往不定態(tài)的跳變,(?)代表在0,1,x三狀態(tài)間的任意跳變。必須注意Verilog規(guī)定在每一條table表項(xiàng)中最多只允許一個(gè)輸入信號(hào)處于跳變狀態(tài),例如:第4章 用戶自定義元件(UDP)

29、/clkdatastatenext_state(01)(10) 00 ;表示的這一條table表項(xiàng)就是不允許的,因?yàn)槠渲杏袃蓚€(gè)輸入信號(hào)clk和data同時(shí)發(fā)生了跳變。以設(shè)計(jì)一個(gè)上升沿T觸發(fā)器為例,其真值表示于表4.4中。第4章 用戶自定義元件(UDP) 表 4.4 上升沿 T 觸發(fā)器的邏輯真值表 clk t_in current_state next state (q) (01) 0 0 0 (01) 0 1 1 (01) 1 0 1 (01) 1 1 0 (10) 0 0 0 (10) 0 1 1 (10) 1 0 0 (10) 1 1 1 0 或 1 或 x (?) 0 0 0 或 1 或

30、 x (?) 1 1 第4章 用戶自定義元件(UDP) 真值表的第14行說明了在時(shí)鐘信號(hào)clk發(fā)生上跳變時(shí),若輸入t_in為0則觸發(fā)器狀態(tài)保持不變,而若clk上跳變時(shí)t_in為1則觸發(fā)器狀態(tài)翻轉(zhuǎn);真值表的第58行說明了在時(shí)鐘信號(hào)clk發(fā)生下跳變時(shí),不管輸入t_in為何值,觸發(fā)器狀態(tài)保持不變;真值表的第9、10行說明在時(shí)鐘信號(hào)clk處于穩(wěn)定值但t_in發(fā)生跳變時(shí),觸發(fā)器狀態(tài)保持不變;將真值表中的各種情況加以簡(jiǎn)化并移植到UDP描述的table表中可以得到例4-11所示的上升沿T觸發(fā)器的UDP描述。第4章 用戶自定義元件(UDP) 【例例4-11】上升沿T觸發(fā)器的UDP描述。primitive t_

31、trigger(q,clk,t_in);output q;reg q:input t_in,clk;table/ clk t_in : state : q(01) 0 : ? : - ;(01) 1 : 0 : 1 ;(01) 1 : 1 : 0 ;(10) ? : ? : - ;(0 x) 0 : ? : - ;(1x) 0 : ? : - ;? (?) : ? : - ;endtableendprimitive第4章 用戶自定義元件(UDP) 上例中table表中的第1項(xiàng)與真值表的第1、2兩行對(duì)應(yīng);table表中的第2、3項(xiàng)分別與真值表的第3、4兩行對(duì)應(yīng);table表中的第4項(xiàng)與真值表的第

32、58行對(duì)應(yīng);table表中的第5、6項(xiàng)內(nèi)容的目的是為了把盡可能的定態(tài)輸出情況考慮進(jìn)去。它們?cè)诒纠械囊馑际牵?dāng)時(shí)鐘從0狀態(tài)變化到不定態(tài)x時(shí)或從1狀態(tài)變化到不定態(tài)x時(shí),如果輸入t_in為0,則UDP元件狀態(tài)及輸出邏輯值保持原來的取值不變;table表中的最后一項(xiàng)與真值表的第9、10兩行對(duì)應(yīng),注意這項(xiàng)是描述一個(gè)T觸發(fā)器所必需的,因?yàn)橹灰趖able表中出現(xiàn)了一個(gè)含有輸入邏輯值跳變的表項(xiàng),模擬器就會(huì)對(duì)任何一個(gè)輸入信號(hào)的跳變作出反應(yīng),進(jìn)入table表查找相應(yīng)的表項(xiàng),如果上例中沒有這條表項(xiàng)來對(duì)數(shù)據(jù)輸入端t_in發(fā)生跳變時(shí)元件輸出端對(duì)應(yīng)的邏輯取值進(jìn)行說明,模擬器將會(huì)因?yàn)檎也坏綄?duì)應(yīng)的說明項(xiàng)而輸出一個(gè)不定態(tài)x

33、。所以在進(jìn)行邊沿觸發(fā)時(shí)序電路UDP描述時(shí)應(yīng)該對(duì)每一個(gè)輸入端發(fā)生的任何跳變情況加以考慮,并將這些跳變狀態(tài)以及對(duì)應(yīng)的輸出端邏輯狀態(tài)作為一個(gè)table表項(xiàng)添加到table表中去。第4章 用戶自定義元件(UDP) 為了簡(jiǎn)化UDP元件定義模塊中table表項(xiàng)的描述,以及為了加強(qiáng)table表的可讀性,Verilog在對(duì)UDP進(jìn)行定義時(shí)引入了一些縮記符號(hào)來描述table表項(xiàng),這些符號(hào)列于表4.5之中,利用這些縮記符號(hào),例4-11可以被改寫成例4-12的形式。第4章 用戶自定義元件(UDP) 表 4.5 UDP 定義時(shí)的縮記符號(hào) table 表項(xiàng)縮記符號(hào) 定 義 說 明 0 邏輯 0 能用來描述輸入、輸出信號(hào)

34、 1 邏輯 1 能用來描述輸入、輸出信號(hào) x 或 X 為不定態(tài) 能用來描述輸入、輸出信號(hào) - 輸出狀態(tài)保持不變 只能用來描述時(shí)序邏輯電路 UDP的輸出狀態(tài) ? 0 或 1 或 x(任意態(tài)) 不能用來對(duì)輸出進(jìn)行描述 b 或 B 0 或 1 不能用來對(duì)輸出進(jìn)行描述 (vw) 輸入從邏輯值 v 變化到邏輯值 w 不能用來對(duì)輸出進(jìn)行描述,其中的v,w 是 0,1,x,?中的任意一個(gè) r 或 R 等價(jià)于(01),表示輸入的上跳變沿 不能用來對(duì)輸出進(jìn)行描述 f 或 F 等價(jià)于(10),表示輸入的下跳變沿 不能用來對(duì)輸出進(jìn)行描述 p 或 P (01)、(0 x)、(x1)中的任一個(gè),表示輸入端的包含 x 態(tài)

35、的正跳變 不能用來對(duì)輸出進(jìn)行描述 n 或 N (10)、(1x)或(x0)中的任一個(gè),表示輸入端的包含 x 態(tài)的負(fù)跳變 不能用來對(duì)輸出進(jìn)行描述 * 等價(jià)于(?) , 表示輸入端的任意變化 不能用來對(duì)輸出進(jìn)行描述 第4章 用戶自定義元件(UDP) 【例例4-12】使用縮記符號(hào)后的上升沿T觸發(fā)器的UDP元件定義模塊。primitive t_trigger(q,clk,t_in);output q;reg q:input t_in,clk;table/ clk t_in : state: qr 0 : ?: - ;r 1 : 0: 1 ;r 1 : 1: 0 ;f ? : ?: - ;(?) 0 : ?: - ;? (?) : ?: - ;endtableendprimitive第4章 用戶自定義元件(UDP) 4.3.4 電平觸發(fā)和邊沿觸發(fā)混合的時(shí)序電路電平觸發(fā)和邊沿觸發(fā)混合的時(shí)序電路UDP有些時(shí)序邏輯電路中的狀態(tài)改變要既受電平觸發(fā)、又受邊沿觸發(fā)。這種電路稱為電平觸發(fā)和邊沿觸發(fā)混合的時(shí)序電路。例如一個(gè)帶有異步清零輸入和異步置位輸入的觸發(fā)器,清零和置位操作時(shí)要求電平觸發(fā),而觸發(fā)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論