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

下載本文檔

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

文檔簡介

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

2、endprimitive第4章 用戶自定義元件(UDP) 對上述的語法格式,需要說明如下幾點:(1) UDP定義模塊不能出現(xiàn)在其它模塊定義之內(nèi),UDP定義模塊和其它模塊具有相同的語法結(jié)構(gòu)地位,它的定義必須獨立于其它模塊結(jié)構(gòu)成分。所以UDP定義模塊必須出現(xiàn)在其它模塊定義之外,同時它也可以出現(xiàn)在獨立的文件中。比如,例4-1所示的結(jié)構(gòu)是正確的,而例4-2所示的結(jié)構(gòu)是錯誤的。第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定義模塊的錯誤位置。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的定義模塊與其它兩個模塊MODULE1和MODULE2并列出現(xiàn),相互獨立;而在例4-2中,UDP定義模塊卻包含在另一個模塊MODULE1結(jié)構(gòu)之中,這種情況是不允許的。第4章 用戶自定義元件(UDP) (2) 在UDP定義模塊的第一行,關(guān)鍵詞“primitive”標(biāo)志著定義模塊的開始;其后出現(xiàn)的“元件名”是為被定義UDP元件所取的一個名字;后面出現(xiàn)的端口列表指明了UDP元件的輸入輸出端口,該端口列表由若干個端口組成,其中只能有一個輸出端口并且

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

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

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

8、差別將體現(xiàn)在不同的table表項描述上。(8) 關(guān)鍵詞“endprimitive”出現(xiàn)在定義模塊的末尾,它標(biāo)志著UDP定義模塊的結(jié)束。下面給出對四選一MUX進(jìn)行UDP定義描述的一個例子。第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 注釋行,用于保證表項中各項的正確排列順序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為四個輸入信號,ctrl1、ctrl2為選通控制信號:當(dāng)這兩個值為00、01、10和11時將分別選通in1、in2、in3、in4信號到輸出端口out 。例中的table表由8個表項組成,它們構(gòu)成了該四選一MUX的邏輯真值表。表項中的?字符代表不必關(guān)心相應(yīng)變量的具體取值,即

10、它可以是0、1或x 。注意不能將控制端口定義成一個二位的輸入端口,即不能采用如下定義方式:第4章 用戶自定義元件(UDP) 【例例4-4】錯例。primitive mux4_l(out,in1,in2,in3,in4,ctrl);/錯例output out;input in1,in2,in3,in4 ;input 2 1 ctrl; /錯,在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對組合邏輯電路UDP元件的描述相當(dāng)于直接把電路的邏輯真值表搬到UDP描述的table表中。組合邏輯電路UDP定義時的table表項的格式為 : 對于上述table表項格式,必須注意:(1) 各個輸入輸出邏輯值只能是 0,1,x 和 ? 中的一個,不能取高阻態(tài)“z”。(2) 輸出端口在primitive定義語句的端口表項中列第一的位置,而輸出端邏輯值在table表項內(nèi)則是位于最后一項。(3) 在表項中要用空格分隔開

12、不同的輸入端邏輯值, 各個輸入端口在table表項中的排列順序必須與它們在“primitive”定義語句中端口表項內(nèi)的排列順序保持嚴(yán)格一致。(4) table表項中的輸入部分與輸出部分之間要用一個冒號隔開。第4章 用戶自定義元件(UDP) (5) 為了明確觀察輸入輸出相互關(guān)系和各項排列順序是否正確,通常在table表項的第一欄中插人一條注釋語句,比如例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、個真值表。在進(jìn)行模擬時,當(dāng)模擬器發(fā)現(xiàn)UDP的某個輸入發(fā)生改變時,將會自動進(jìn)入table表查找相匹配的table表項,再把查到的輸出邏輯值賦給輸出端口。如果在UDP定義模塊的table表中找不到與當(dāng)前輸入相匹配的table表項,則輸出端將取不定態(tài)“x”。所以,在進(jìn)行UDP元件描述時,應(yīng)當(dāng)將盡可能多的輸入狀態(tài)設(shè)置到table表項中。第4章 用戶自定義元件(UDP) 以設(shè)計一個一位的全加器為例,表4.1是它的本位和與進(jìn)位的邏輯真值表,由于一個UDP元件只允許有一個一位的輸出,所以要分別定義兩個UDP元件來實現(xiàn)全加器的本位和與進(jìn)位。把它們的真值表分別移植到兩個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 對應(yīng)的table表項 /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對應(yīng)的table表項 /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時的情況,因此在某個輸入為x時,模擬器找不到對應(yīng)的table表項,輸出將為cout = x,sum = x。而實際上對于進(jìn)位cout而言,只要三個輸入項(cin,a和b)中有二個值為1,則不管第三個的值是什么(0,1或x),cout一定為1;反之,如果輸入中有二個為0,則cout也一定為0。為了表示出進(jìn)位的這一特征,可以在cout對應(yīng)的UDP定義table表內(nèi)用?來替代第三個值對應(yī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 對應(yīng)的table表項,較例45的情況有所精簡 /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所示的組合邏輯電路描述為一個UDP元件時,首先得到該電路的真值表如表4.2所示。第4章 用戶自定義元件(UDP) 圖4.1 一個組合邏輯電路的例子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時輸出為0;當(dāng)a b c0 x1,11x,1x1,x01,x11,xx1時輸出為1;將這些狀態(tài)補充到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) /補充的包含有x輸入態(tài)的表項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時,無論a,b取值如何,輸出out取值都是1;當(dāng)輸入a b取值為11時,無論c取值如何輸出,out取值都是1;當(dāng)輸入b c取值為00時,無論a取值如何,輸出

21、out取值都是0;當(dāng)輸入a c取值為00時,無論b取值如何,輸出out取值都是0。這樣可以對table表進(jì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 時序邏輯電路時序邏輯電路UDP與組合邏輯電路相比,時序邏輯電路元件的輸出除

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

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

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

25、入信號d_in相同;當(dāng)時鐘輸入信號為邏輯1時,鎖存器進(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中最后一個table項內(nèi)引入了一個新的標(biāo)記“”,它的含義就是UDP的內(nèi)部狀態(tài)(也就是輸出端狀態(tài))將保持原有狀態(tài)不變(No-change)。表項中的“?”仍代表“任意態(tài)”。例4-10中第一個table表項對應(yīng)于真值表中第二行的情況,第二個table表項對

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

28、變化和變化方式加以考慮。模擬器只有在檢測到輸入信號發(fā)生跳變時才會搜索table表得到新的內(nèi)部狀態(tài)值和輸出邏輯值。這樣table表項中的輸入邏輯值部分需要列出輸入邏輯值的變化情況即跳變情況。在Verilog中用一對括號括起來的二個數(shù)字“(vw)”的形式來表示從一個狀態(tài)到另一個狀態(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表項中最多只允許一個輸入信號處于跳變狀態(tài),例如:第4章 用戶自定義元件(UDP)

29、/clkdatastatenext_state(01)(10) 00 ;表示的這一條table表項就是不允許的,因為其中有兩個輸入信號clk和data同時發(fā)生了跳變。以設(shè)計一個上升沿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行說明了在時鐘信號clk發(fā)生上跳變時,若輸入t_in為0則觸發(fā)器狀態(tài)保持不變,而若clk上跳變時t_in為1則觸發(fā)器狀態(tài)翻轉(zhuǎn);真值表的第58行說明了在時鐘信號clk發(fā)生下跳變時,不管輸入t_in為何值,觸發(fā)器狀態(tài)保持不變;真值表的第9、10行說明在時鐘信號clk處于穩(wěn)定值但t_in發(fā)生跳變時,觸發(fā)器狀態(tài)保持不變;將真值表中的各種情況加以簡化并移植到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項與真值表的第1、2兩行對應(yīng);table表中的第2、3項分別與真值表的第3、4兩行對應(yīng);table表中的第4項與真值表的第

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

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

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

35、的正跳變 不能用來對輸出進(jìn)行描述 n 或 N (10)、(1x)或(x0)中的任一個,表示輸入端的包含 x 態(tài)的負(fù)跳變 不能用來對輸出進(jìn)行描述 * 等價于(?) , 表示輸入端的任意變化 不能用來對輸出進(jìn)行描述 第4章 用戶自定義元件(UDP) 【例例4-12】使用縮記符號后的上升沿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ā)混合的時序電路電平觸發(fā)和邊沿觸發(fā)混合的時序電路UDP有些時序邏輯電路中的狀態(tài)改變要既受電平觸發(fā)、又受邊沿觸發(fā)。這種電路稱為電平觸發(fā)和邊沿觸發(fā)混合的時序電路。例如一個帶有異步清零輸入和異步置位輸入的觸發(fā)器,清零和置位操作時要求電平觸發(fā),而觸發(fā)

溫馨提示

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

評論

0/150

提交評論