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

下載本文檔

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

文檔簡介

第4章用戶自定義元件(UDP)4.1UDP的定義4.2組合邏輯電路UDP4.3時(shí)序邏輯電路UDP4.1UDP的定義

UDP的定義是由一個(gè)獨(dú)立的定義模塊構(gòu)成的,該模塊由關(guān)鍵詞“primitive”和“endprimitive”界定。

UDP定義模塊的語法格式如下:

primitive<元件名稱>(<輸出端口名>,<輸入端口名1>,<輸入端口名2>,……,<輸入端口名n>);輸出端口類型說明(output);輸入端口類型說明(input);輸出端寄存器變量說明(reg);元件初始狀態(tài)說明(initial);table<table表項(xiàng)1>;<table表項(xiàng)2>;……<table表項(xiàng)n>;endtableendprimitive對(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-1】UDP定義模塊的正確位置。moduleMODULE1; //模塊MODULE1定義的開始…… //模塊MODULE1描述體endmodule //模塊MODULE1定義的結(jié)束primitiveMY_GATE(out,a,b);

//UDP元件MY_GATE定義模塊的開始…… //UDP元件MY_GATE定義的描述體endprimitive //UDP元件MY_GATE定義模塊的結(jié)束moduleMODULE2; //模塊MODULE2定義的開始…… //模塊MODULE2描述體endmodule //模塊MODULE2定義的結(jié)束

【例4-2】UDP定義模塊的錯(cuò)誤位置。moduleMODULE1; //模塊MODULE1定義的開始…… //模塊MODULE1描述體primitiveMY_GATE(out,a,b);

//UDP元件MY_GATE定義模塊的開始…… //UDP元件MY_GATE定義的描述體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)之中,這種情況是不允許的。

(2)在UDP定義模塊的第一行,關(guān)鍵詞“primitive”標(biāo)志著定義模塊的開始;其后出現(xiàn)的“元件名”是為被定義UDP元件所取的一個(gè)名字;后面出現(xiàn)的端口列表指明了UDP元件的輸入輸出端口,該端口列表由若干個(gè)端口組成,其中只能有一個(gè)輸出端口并且該輸出端口必須是端口說明表中的第一項(xiàng),而UDP的輸入端口數(shù)目可以是一個(gè)或多個(gè),一般對(duì)時(shí)序電路的UDP最多允許有9個(gè)輸入端,對(duì)組合電路的UDP最多允許有10個(gè)輸入端。必須注意在定義UDP元件時(shí)所有輸入端口和輸出端口都只能是1位的(標(biāo)量)。

(3)輸出端口類型說明是對(duì)UDP元件的輸出端口進(jìn)行說明,這和普通模塊定義中的輸出端口說明一樣是通過關(guān)鍵詞“output”來進(jìn)行的,比如:

outputout;就說明了端口out是一個(gè)輸出端口。

(4)輸入端口類型說明是對(duì)UDP元件的輸入端口進(jìn)行說明,這和普通模塊定義中的輸入端口說明一樣是通過關(guān)鍵詞“input”來進(jìn)行的,比如:

inputa,b;就說明了端口a和端口b是兩個(gè)輸入端口。

(5)輸出端寄存器變量說明是在對(duì)時(shí)序邏輯UDP元件進(jìn)行定義時(shí),為了對(duì)輸出端口寄存器變量類型進(jìn)行說明而引入的。寄存器變量用于描述時(shí)序電路UDP中的內(nèi)部狀態(tài)。要注意只有在被定義的元件是時(shí)序邏輯元件時(shí)才能將輸出端口定義成寄存器類變量。寄存器變量說明用關(guān)鍵詞“reg”實(shí)現(xiàn),比如:

regout;就將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態(tài)。元件初始狀態(tài)說明用“initial”過程塊來實(shí)現(xiàn),比如:

initial

out=x;就將時(shí)序邏輯UDP元件的初始狀態(tài)定義為“x”。

(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í)的差別將體現(xiàn)在不同的table表項(xiàng)描述上。

(8)關(guān)鍵詞“endprimitive”出現(xiàn)在定義模塊的末尾,它標(biāo)志著UDP定義模塊的結(jié)束。下面給出對(duì)四選一MUX進(jìn)行UDP定義描述的一個(gè)例子。

【例4-3】將四選一MUX定義成UDP元件。primitivemux4_l(out,in1,in2,in3,in4,ctrl1,ctrl2);outputout;inputin1,in2,in3,in4,ctrl1,ctrl2;table//in1in2in3in4ctrl1ctrl2∶out注釋行,用于保證表項(xiàng)中各項(xiàng)的正確排列順序0???00:01???00:1?0??01:0?1??01:1??0?10:0??1?10:1???011:0???111:1endtableendprimitive在例4-3中,輸入端口中的in1~in4為四個(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)變量的具體取值,即它可以是0、1或x。注意不能將控制端口定義成一個(gè)二位的輸入端口,即不能采用如下定義方式:

【例4-4】錯(cuò)例。primitivemux4_l(out,in1,in2,in3,in4,ctrl);//錯(cuò)例outputout;inputin1,in2,in3,in4;input[2∶1]ctrl;//錯(cuò),在UDP定義中的端口只能是一位寬度的標(biāo)量類型table//in1in2in3in4ctrl∶out0???00:01???00:1?0??01:0?1??01:1??0?10:0??1?10:1???011:0???111:1endtableendprimitive4.2組合邏輯電路UDP對(duì)組合邏輯電路UDP元件的描述相當(dāng)于直接把電路的邏輯真值表搬到UDP描述的table表中。組合邏輯電路UDP定義時(shí)的table表項(xiàng)的格式為

<輸入1邏輯值><輸入2邏輯值>……<輸入n邏輯值>:<輸出邏輯值>對(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)中要用空格分隔開不同的輸入端邏輯值,各個(gè)輸入端口在table表項(xiàng)中的排列順序必須與它們在“primitive”定義語句中端口表項(xiàng)內(nèi)的排列順序保持嚴(yán)格一致。

(4)table表項(xiàng)中的輸入部分與輸出部分之間要用一個(gè)冒號(hào)隔開。

(5)為了明確觀察輸入輸出相互關(guān)系和各項(xiàng)排列順序是否正確,通常在table表項(xiàng)的第一欄中插人一條注釋語句,比如例4-3中的注釋行:

//in1in2in3in4ctrl1ctrl2∶out

UDP元件的邏輯功能是由UDP定義模塊內(nèi)關(guān)鍵詞“table”和“endtable”之間的table表的內(nèi)容所決定的,table表相當(dāng)于構(gòu)成了UDP元件輸入輸出的一個(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)中。以設(shè)計(jì)一個(gè)一位的全加器為例,表4.1是它的本位和與進(jìn)位的邏輯真值表,由于一個(gè)UDP元件只允許有一個(gè)一位的輸出,所以要分別定義兩個(gè)UDP元件來實(shí)現(xiàn)全加器的本位和與進(jìn)位。把它們的真值表分別移植到兩個(gè)UDP描述的table表中,就得到了例4-5所示的全加器的UDP描述。

【例4-5】全加器的UDP描述。//進(jìn)位的UDP定義primitivecarry(cout,cin,a,b);outputcout;inputa,b,cin;table//cout

對(duì)應(yīng)的table表項(xiàng)//cin a b : cout0 0 0 :0;0 0 1 :0;0 1 0 :0;0 1 1 :1:1 0 0 :0:1 0 1 :1;1 10 :1;1 1 1 :1;endtableendprimitive

//本位和的UDP定義primitivesumm(sum,cin,a,b);outputsum;inputa,b,cin;table//sum對(duì)應(yīng)的table表項(xiàng)//cinab?:sum000:0;001:1;010:1;011:0:100:1:101:0;110:0;111:1;endtableendprimitive在例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-6】考慮了輸入狀態(tài)“x”后的全加器進(jìn)位cout的UDP描述。//進(jìn)位的UDP定義primitivecarry(cout,cin,a,b);outputcout;inputa,b,cin;table//cout

對(duì)應(yīng)的table表項(xiàng),較例4-5的情況有所精簡//cinab?:cout00?:0;0?0:0;?00:0:11?:1;1?1:1;?11:1:endtableendprimitive比如當(dāng)我們要將如圖4.1所示的組合邏輯電路描述為一個(gè)UDP元件時(shí),首先得到該電路的真值表如表4.2所示。圖4.1一個(gè)組合邏輯電路的例子將上述真值表移植到UDP描述的table表中,就得到了例4-7所示的UDP描述。

【例4-7】圖4.1所示電路的UDP描述。primitiveand_or(out,a,b,c);outputout;inputa,b,c;table//abc:out000:0;001:1;010:0;011:1:100:0:101:1;110:1;111:1;endtableendprimitive若再考慮到輸入取x態(tài)的情況,由圖4.1可知,當(dāng)abc=0x0,x00時(shí)輸出為0;當(dāng)abc=0x1,11x,1x1,x01,x11,xx1時(shí)輸出為1;將這些狀態(tài)補(bǔ)充到table表中就得到例4-8的情況。

【例4-8】圖4.1所示電路的UDP描述。primitiveand_or(out,a,b,c);outputout;inputa,b,c;table//abc:out000:0;001:1;010:0;011:1:100:0:101:1;110:1;111:1;//補(bǔ)充的包含有x輸入態(tài)的表項(xiàng)0x0:0;x00:0;0x1:1;11x:1;1x1:1;x01:1;x11:1;xx0:1;endtableendprimitive由上面給出的邏輯圖4.1和例4-8中的table表可以看出,當(dāng)輸入c取值為1時(shí),無論a,b取值如何,輸出out取值都是1;當(dāng)輸入ab取值為11時(shí),無論c取值如何輸出,out取值都是1;當(dāng)輸入bc取值為00時(shí),無論a取值如何,輸出out取值都是0;當(dāng)輸入ac取值為00時(shí),無論b取值如何,輸出out取值都是0。這樣可以對(duì)table表進(jìn)行簡化得到例4-9所示的UDP描述。

【例4-9】圖4.1所示電路的UDP描述。primitiveand_or(out,a,b,c);outputout;inputa,b,c;table//abc:out??1:1;11?:1;?00:0;0?0:0:endtableendprimitive4.3時(shí)序邏輯電路UDP與組合邏輯電路相比,時(shí)序邏輯電路元件的輸出除了與當(dāng)前的輸入狀態(tài)有關(guān),還與時(shí)序元件本身的內(nèi)部狀態(tài)有關(guān)。對(duì)時(shí)序邏輯電路UDP進(jìn)行定義時(shí)的table表項(xiàng)格式為:

<輸入1邏輯值><輸入2邏輯值>……<輸入n邏輯值>:<內(nèi)部狀態(tài)>:<輸出邏輯值>與組合邏輯電路UDP的定義一樣,時(shí)序邏輯電路UDP定義模塊中各個(gè)輸入端口在table表項(xiàng)中的排列順序必須與它們在“primitive”語句中端口表項(xiàng)內(nèi)的排列順序保持嚴(yán)格一致;在表項(xiàng)中要用空格分隔開不同的輸入邏輯值。時(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)在構(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.3.1初始化狀態(tài)寄存器因?yàn)闀r(shí)序邏輯電路元件有自己的內(nèi)部狀態(tài),所以必須有一個(gè)寄存器變量來保持其內(nèi)部狀態(tài)。在時(shí)序邏輯電路UDP的定義模塊中必須將輸出端口定義為寄存器類型,所以如4.1節(jié)所講述的,時(shí)序邏輯電路UDP的定義模塊中必須增加“輸出端寄存器變量說明”這一項(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.3.2電平觸發(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í)刻保持與輸入信號(hào)d_in相同;當(dāng)時(shí)鐘輸入信號(hào)為邏輯1時(shí),鎖存器進(jìn)入鎖存狀態(tài),其內(nèi)部狀態(tài)及輸出保持不變。例4-10給出了電平觸發(fā)鎖存器的UDP描述。

【例4-10】電平觸發(fā)鎖存器的UDP描述。primitivelatch(q,clk,d_in);outputq;regq;inputclk,d_in

;initialq=1'b0;//內(nèi)部狀態(tài)和輸出被初始化為0狀態(tài)table//clk

d_in

:current_state

:next_state01:?:1;00:?:0;1?:?:-;//“-”表示輸出狀態(tài)不變endtableendprimitive例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ì)應(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.3.3邊沿觸發(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)的變化和變化方式加以考慮。模擬器只有在檢測到輸入信號(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),例如:

// clk data ∶ state ∶ next_state (01) (10) ∶ 0 ∶ 0;表示的這一條table表項(xiàng)就是不允許的,因?yàn)槠渲杏袃蓚€(gè)輸入信號(hào)clk和data同時(shí)發(fā)生了跳變。以設(shè)計(jì)一個(gè)上升沿T觸發(fā)器為例,其真值表示于表4.4中。真值表的第1~4行說明了在時(shí)鐘信號(hào)clk發(fā)生上跳變時(shí),若輸入t_in為0則觸發(fā)器狀態(tài)保持不變,而若clk上跳變時(shí)t_in為1則觸發(fā)器狀態(tài)翻轉(zhuǎn);真值表的第5~8行說明了在時(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)保持不變;將真值表中的各種情況加以簡化并移植到UDP描述的table表中可以得到例4-11所示的上升沿T觸發(fā)器的UDP描述。

【例4-11】上升沿T觸發(fā)器的UDP描述。primitivet_trigger(q,clk,t_in);outputq;regq:inputt_in,clk;table//clk

t_in

:state:q(01)0:?:-;(01)1:0:1;(01)1:1:0;(10)?:?:-;(0x)0:?:-;(1x)0:?:-;

?(??):?:-;endtableendprimitive上例中table表中的第1項(xiàng)與真值表的第1、2兩行對(duì)應(yīng);table表中的第2、3項(xiàng)分別與真值表的第3、4兩行對(duì)應(yīng);table表中的第4項(xiàng)與真值表的第5~8行對(duì)應(yīng);table表中的第5、6項(xiàng)內(nèi)容的目的是為了把盡可能的定態(tài)輸出情況考慮進(jìn)去。它們在本例中的意思是,當(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。所以在進(jìn)行邊沿觸發(fā)時(shí)序電路UDP描述時(shí)應(yīng)該對(duì)每一個(gè)輸入端發(fā)生的任何跳變情況加以考慮,并將這些跳變狀態(tài)以及對(duì)應(yīng)的輸出端邏輯狀態(tài)作為一個(gè)table表項(xiàng)添加到table表中去。為了簡化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-12】使用縮記符號(hào)后的上升沿T觸發(fā)器的UDP元件定義模塊。primitivet_trigger(q,clk,t_in);outputq;regq:inputt_in,clk;table//clk

t_in

:state :qr 0 :? :-;r 1 :0 :1;r 1 :1 :0;f ? :?

:-;(??) ?0? :? :-;? (??) :? :-;endtableendprimitive4.3.4電平觸發(fā)和邊沿觸發(fā)混合的時(shí)序電路UDP有些時(shí)序邏輯電路中的狀態(tài)改變要既受電平觸發(fā)、又受邊沿觸發(fā)。這種電路稱為電平觸發(fā)和邊沿觸發(fā)混合的時(shí)序電路。例如一個(gè)帶有異步清零輸入和異步置位輸入的觸發(fā)器,清零和置位操作時(shí)要求電平觸發(fā),而觸發(fā)器本身卻是邊沿觸發(fā)的。在這種混合觸發(fā)形式時(shí)序電路類型的UDP定義模塊中,穩(wěn)定的輸入狀態(tài)和輸入信號(hào)的跳變狀況都將對(duì)元件的輸出和元件內(nèi)部狀態(tài)的改變產(chǎn)生影響。所以在進(jìn)行UDP定義描述時(shí)需要同時(shí)對(duì)輸入的穩(wěn)定取值和變化狀態(tài)加以考慮。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論