Verilog中的一些語法和技巧.doc_第1頁
Verilog中的一些語法和技巧.doc_第2頁
Verilog中的一些語法和技巧.doc_第3頁
Verilog中的一些語法和技巧.doc_第4頁
Verilog中的一些語法和技巧.doc_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余27頁可下載查看

下載本文檔

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

文檔簡介

1、 .2、 .3、 Reg型的數(shù)據(jù)類型默認(rèn)初始值為X。reg型數(shù)據(jù)可以賦正值也可以賦負(fù)值,但是當(dāng)一個(gè)reg型數(shù)據(jù)是一個(gè)表達(dá)式的操作數(shù)的時(shí)候,他的值被當(dāng)做無符號(hào)數(shù)及正值。4、 在數(shù)據(jù)類型中?和Z均表示高阻態(tài)。5、 Reg型只表示被定義的信號(hào)將用在“always”模塊內(nèi),并不是說reg型一定是寄存器或觸發(fā)器的輸出。雖然reg型信號(hào)常常是寄存器或觸發(fā)器的輸出但是并不一定總是這樣。6、 Verilog語言中沒有多維數(shù)組的存在。Memory型數(shù)據(jù)類型是通過擴(kuò)展reg型數(shù)據(jù)的弟子和范圍來生成的。其格式如下regn-1:0存儲(chǔ)器名m-1:0;7、 在除法和取余的運(yùn)算中結(jié)果的符號(hào)和第一個(gè)操作數(shù)的符號(hào)位是相同的。8、 不同長度的數(shù)據(jù)進(jìn)行運(yùn)算:兩個(gè)長度不同的數(shù)據(jù)進(jìn)行位運(yùn)算時(shí),系統(tǒng)會(huì)自動(dòng)地將兩者按有端對齊,位數(shù)少的操作數(shù)會(huì)在相應(yīng)的高位用0填滿以便連個(gè)操作數(shù)安慰進(jìn)行操作。9、 = = =與!= = =和= =與!= =的區(qū)別:后者稱為邏輯等是運(yùn)算符,其結(jié)果是2個(gè)操作數(shù)的值決定的。由于操作書中某些位可能不定值x和高阻態(tài)z結(jié)果可能是不定值x。而 = = =和!= = =運(yùn)算符對操作數(shù)的比較時(shí)對某些位的高阻態(tài)z和不定值x也進(jìn)行比較,兩個(gè)操作數(shù)必須完全一致,其結(jié)果才是1,否則是0.10、 非阻塞和阻塞賦值方式:非阻塞賦值方式(如a=b)上面語句所賦得變量值不能立即被下面語句所用,(2)快結(jié)束后才能完成這次賦值操作 3在編寫克綜合的時(shí)序邏輯模塊時(shí)這是最常用的賦值方法。 阻塞賦值(如a=b) 賦值語句執(zhí)行完后,塊才結(jié)束 2 b的值在賦值語句完成后立即執(zhí)行 3在時(shí)序邏輯使用中,可能產(chǎn)生意想不到的結(jié)果。11、 模塊的描述方式:(RTL為寄存器傳輸級(jí)描述) “(1)數(shù)據(jù)流描述方式:數(shù)據(jù)流行描述主要用來描述組合功能,具體用“assign”連續(xù)賦值語句來實(shí)現(xiàn)。分為兩種a、顯式連續(xù)賦值語句;連線型變量類型連線型變量為快連線型變量名Assign #(延時(shí)量) 連線型變量名=賦值表達(dá)式;顯式連續(xù)賦值語句包含了兩條語句;第一條是對連線型變量的進(jìn)行類型說明的說明語句;第二句是對這個(gè)已得到聲明的連線型變量進(jìn)行連續(xù)賦值語句。影視賦值語句:連線型變量類型(復(fù)制驅(qū)動(dòng)強(qiáng)度)連線型變量位寬#(延時(shí)量)連線性變量名=賦值表達(dá)式。隱式連續(xù)賦值語句是把連線性變量說明語句和連線性變量連續(xù)賦值語句結(jié)合在一條語句中。他可以對連線型變量進(jìn)行說明的同時(shí)進(jìn)行連續(xù)賦值 。Assign 連續(xù)賦值語句的功能是:當(dāng)賦值表達(dá)式中的變量的只發(fā)生變化時(shí),重新計(jì)算賦值表達(dá)式的值,并在指定的時(shí)延后將得到的結(jié)果賦給左端的連線性變量。Assign只能實(shí)現(xiàn)組合功能。而reg型數(shù)據(jù)可以可以存儲(chǔ)過程賦值的最終結(jié)果。端口默認(rèn)為連線性的不用定義一般,只要輸入發(fā)生變化輸出馬上發(fā)生變化。(2)行為描述方式:A、initial語句:此語句只執(zhí)行一次。B、always語句:次語句循環(huán)執(zhí)行。只有寄存器類型數(shù)據(jù)能夠在這兩種語句中被賦值。寄存器類型數(shù)據(jù)在被賦新值前保持所有值不變。以上兩種語句在0時(shí)刻并發(fā)執(zhí)行。(3)、結(jié)構(gòu)描述方式結(jié)構(gòu)描述是通過實(shí)例進(jìn)行描述的方法,他將verilog中預(yù)定義的基本元件實(shí)例嵌入到語言中,監(jiān)控實(shí)力的舒服,一旦其中任何一個(gè)發(fā)生變化,便重新運(yùn)算并輸出。在verilog HDL中可以使用如下結(jié)構(gòu)描述部件:A、 用戶自己定義的模塊b、用用戶自定義元件UDP c、內(nèi)置門級(jí)元件 d、內(nèi)置開關(guān)級(jí)元件(4)混合型描述11、連續(xù)賦值語句與過程賦值語句的區(qū)別:我覺得這個(gè)在剛開始學(xué)習(xí)verilog時(shí),是會(huì)有一些疑問的!a、從語法上來看,連續(xù)賦值語句由“assign”關(guān)鍵詞來表示,而過程賦值語句中則不包含b、連續(xù)賦值語句中左側(cè)的被賦值數(shù)據(jù)類型必須是線網(wǎng)型數(shù)據(jù),而過程賦值語句中的被賦值數(shù)據(jù)類型則必須是寄存器類型的變量c、連續(xù)賦值語句不能出現(xiàn)在過程快(initial 過程快或者always過程塊)中,而過程賦值語句則只能出現(xiàn)在過程快中d、連續(xù)復(fù)制語句主要用來對組合邏輯電路進(jìn)行建模以及對線網(wǎng)型數(shù)據(jù)間的連接進(jìn)行描述,而過程賦值語句主要用來對時(shí)序邏輯電路進(jìn)行行為描述e、連續(xù)賦值語句對被賦值線網(wǎng)型數(shù)據(jù)的賦值是“連續(xù)的”(即連續(xù)復(fù)制語句產(chǎn)生作用后,賦值表達(dá)式中的信號(hào)的任何變換都將立即反映到被賦值線網(wǎng)型數(shù)據(jù)的取值上,這也是我們有時(shí)會(huì)使用“連續(xù)驅(qū)動(dòng)”這個(gè)術(shù)語的原因),而在過程賦值語句情況下,只有在過程賦值語句被執(zhí)行時(shí)才執(zhí)行賦值操作,語句執(zhí)行完后被賦值變量的取值不再受到賦值表達(dá)式的影響.12、間隔符和注釋符:verilog HDL中的間隔符包括空格(b)、tab(t)、換行符(n)以及換頁符。注釋符有2種:/和/*.*/ 后為多行注釋符用于對多行語句注釋;前者為單行注釋符,只對注釋符所在的行有效。13、數(shù)值:下劃線除了不可以放于數(shù)值的首位意外,可以隨意用在整型數(shù)和實(shí)型數(shù)之間,他們對數(shù)值的大小沒有任何的影響,只是為了提高可讀性。在verilog中有二進(jìn)制(b或者B)、十進(jìn)制(d或者D)、八進(jìn)制(o或者O)、十六進(jìn)制(h或者H)格式: 用于指定所表示數(shù)的位寬,在數(shù)值的表示中式可以缺省的.位寬小于數(shù)值的實(shí)際位數(shù)時(shí),相應(yīng)的高位部分被忽略;當(dāng)位寬大于實(shí)際的位數(shù),且數(shù)值的最高位是0或者1時(shí),相應(yīng)的高位補(bǔ)零;當(dāng)位寬高于數(shù)值的實(shí)際位數(shù),但數(shù)值的最高位是x或者z時(shí)相應(yīng)的高位部分補(bǔ)x或者z。二進(jìn)制中的x或者z表示一位處于x或者z,八進(jìn)制的表示三位,十六進(jìn)制的表示4位。14、實(shí)型數(shù)及其表示方法Verilog HDL中的實(shí)數(shù)可以用十進(jìn)制與科學(xué)計(jì)數(shù)法兩種格式來表示,如果采用十進(jìn)制數(shù)格式,小數(shù)點(diǎn)兩邊必須有數(shù)字,否則為非法字符。如 3.8E10 2.1e-9;15、字符串字符串是用雙引號(hào)括起來的字符序列,他必須包含在同一行中,不能分成多行書寫。如字符串用作verilog HDL表達(dá)式或賦值語句中的操作數(shù),則字符串被看做8位的ASCII值序列 ,即一個(gè)對應(yīng)8位的ASCII碼。在verilog中采用寄存器變量來存儲(chǔ)字符串,寄存器變量的位數(shù)要大于字符串的最大長度。需要注意的是,verilog HDL中并不需要特殊位來存儲(chǔ)終止符。可以采用標(biāo)準(zhǔn)操作符對字符串進(jìn)行諸如連接類的操作。在操作過程中字符串變量位數(shù)大于字符串的實(shí)際長度,則字符串變量的高位補(bǔ)零。Reg8*12:1stringvarInitialBegin string=“hello woeld!”;End特殊字符:n 換行符t tab鍵 符號(hào)*符號(hào)* ddd三位八進(jìn)制數(shù)表示的ASCII值 %符號(hào)%16、數(shù)據(jù)類型(1)、物理數(shù)據(jù)類型:分為連線性和寄存器型 變量可以取0、1、x、z,中的認(rèn)可一個(gè)。X表示一個(gè)位置初始狀態(tài)的變量,或者由于多個(gè)驅(qū)動(dòng)源試圖將其設(shè)定為不同的值而引起的沖突性連線性變量,z表示高祖狀態(tài)或浮空量。物理類型數(shù)據(jù)分為連線型和寄存器型亮中連線型數(shù)據(jù)對應(yīng)的是硬件電路的物理信號(hào)連線,沒有電荷的保持作用(trireg除外)。連線型數(shù)據(jù)必須有去動(dòng)員驅(qū)動(dòng),有兩種方式對他進(jìn)行驅(qū)動(dòng):一種是結(jié)構(gòu)描述中把它連接到一個(gè)們或者模塊的輸出端;二是用連續(xù)賦值語句assign對其進(jìn)行復(fù)制。當(dāng)沒有驅(qū)動(dòng)源對其驅(qū)動(dòng)時(shí),他將保持高阻態(tài)連線型數(shù)據(jù)功能描述Wire,tri兩種常見類型Wor,trior多重驅(qū)動(dòng)時(shí),具有線或特性的連線型Wand,triand多重驅(qū)動(dòng)時(shí),具有線與特性的連線型Tri1上拉電阻Tri0下拉電阻Supp.ly1電源線,邏輯1Supply0電源線,邏輯0Verilog HDL中的連線型數(shù)據(jù)及其功能描述寄存器數(shù)據(jù)對應(yīng)的是具有保持作用的硬件電路與元件,如觸發(fā)器、鎖存器等。如reg沒初始化則將為x缺省為一位。兩種數(shù)據(jù)的區(qū)別:寄存器型數(shù)據(jù)保持最后一次的賦值,而連線型數(shù)據(jù)需要有持續(xù)的驅(qū)動(dòng)。寄存器數(shù)據(jù)的驅(qū)動(dòng)刻意通過過程賦值語句實(shí)現(xiàn),過程賦值語句只能出現(xiàn)在過程語句后面的過程塊語句中。存儲(chǔ)區(qū):verilog中采用寄存器數(shù)組來表示存儲(chǔ)器,用來對ROM,RAM或寄存器文件進(jìn)行建模。數(shù)組中的每一個(gè)寄存器均稱為一個(gè)元素,用不同的索引來尋址。Reg16:1 mem5:1 申明16位5字的存儲(chǔ)器與寄存器。(2)、抽象數(shù)據(jù)類項(xiàng)有整型integer 時(shí)間型time 實(shí)型real 參數(shù)性parameter17、運(yùn)算符算術(shù)運(yùn)算符:包括+ - * / %是二元運(yùn)算符。如果操作數(shù)為寄存器或者連線型則為無符號(hào)數(shù);如果為整型或者實(shí)型,則刻意是有符號(hào)數(shù)。當(dāng)用基數(shù)格式表示整數(shù)時(shí),一定是無符號(hào)數(shù);兩個(gè)操作數(shù)中的一個(gè)為x則記過為x。18、按位運(yùn)算符和邏輯運(yùn)算符:!是邏輯非而是按位操作的非即按位取反。例如:對于!(3=2)的結(jié)果是1;而后者對為進(jìn)行操作(0、0、1、0)=1101;19、歸約運(yùn)算符:歸約運(yùn)算是對單個(gè)的操作數(shù)進(jìn)行歸約的遞推運(yùn)算,最后的結(jié)果是一位的二進(jìn)制數(shù)。具體過程:先講操作數(shù)的第一位和第二位進(jìn)行歸約運(yùn)算,然后將運(yùn)算結(jié)果與第三位進(jìn)行歸約運(yùn)算,以此類推,直到最后一位。格式(&b)19、移位運(yùn)算?!不會(huì)20、條件運(yùn)算符:verilog HDL中只有唯一的一種三目運(yùn)算符,及條件運(yùn)算符有三個(gè)操作數(shù)。如第一個(gè)操作數(shù)為邏輯1,則算子返回第二個(gè)操作數(shù);如第一個(gè)操作數(shù)為邏輯0,則返回第三個(gè)操作數(shù);如第一個(gè)操作數(shù)為高阻態(tài)或未知態(tài)則按下表給出的邏輯,將第二個(gè)和第三個(gè)操作數(shù)按位比較得到結(jié)果。?:01XZ00XXX1X1XXXXXXXZXXXX21、連接和復(fù)制:連接運(yùn)算是將多個(gè)小的表達(dá)式合并成一個(gè)大的表達(dá)式。Verilog HDL中用符號(hào), ,實(shí)現(xiàn)多個(gè)表達(dá)式的鏈接運(yùn)算,各個(gè)表達(dá)式之間用“,”隔開。復(fù)制運(yùn)算符將一個(gè)表達(dá)式放入雙重花括號(hào)內(nèi),而復(fù)制因子放在第一個(gè)括號(hào)內(nèi),用來指定復(fù)制的次數(shù)。運(yùn)算符描述為選擇或部分選擇()圓括號(hào)!邏輯非或按位非&| & | 歸約運(yùn)算符+ -單目算術(shù)運(yùn)算符鏈接運(yùn)算符*/%算術(shù)運(yùn)算符+ -雙目運(yùn)算符以為運(yùn)算符關(guān)系運(yùn)算符= !=相等運(yùn)算符&按位與 按位異或或異或非|按位或&邏輯與|邏輯或?:條件表達(dá)式二、模塊的基本結(jié)構(gòu)1、行為描述的結(jié)構(gòu):Module()模塊端口說明參數(shù)定義(可選)數(shù)據(jù)類型說明過程快(initial過程塊或always快,可有一個(gè)或多個(gè))連續(xù)賦值語句任務(wù)定義(tast)(可選)函數(shù)定義(function)(可選)其中:數(shù)據(jù)類型說明用來對模塊中用到的各類變量類型進(jìn)行說明,如果某個(gè)變量沒有進(jìn)行數(shù)據(jù)類型說明,則他的類型缺省為連線類型(wire)。上面列出的各個(gè)模塊組成項(xiàng)可以是任意次序出現(xiàn),但是端口說明和數(shù)據(jù)類型說明必須出現(xiàn)在端口和數(shù)據(jù)被引用之前。2、(1)在行為描述模塊中出現(xiàn)的每個(gè)過程塊(always過程塊或者initial過程塊)都代表一個(gè)獨(dú)立的進(jìn)程。(2)在進(jìn)行仿真時(shí),所有的過程塊的執(zhí)行都是從0時(shí)刻開始并行的執(zhí)行。(3)每一個(gè)過程塊內(nèi)部的多條語句的執(zhí)行方式可以是順序執(zhí)行的(當(dāng)快定義語句為beginend時(shí)的情況),也可以是并行執(zhí)行的(塊定義語句是fork-join時(shí)的情況)。(4)always和initial過程塊都是不能嵌套使用的。3、initial過程塊:Initial語句塊而語句塊的格式為:塊內(nèi)局部變量;時(shí)間控制1 行為語句;。時(shí)間控制n 行為語句;其中:塊定義語句刻意是“begin end”語句組,或者時(shí)“fork,join”語句組。為可選項(xiàng),塊名可以乘早一個(gè)局部作用域。定義塊名的過程快成為“有名塊”,在有名塊下可以定義局部變量,有名塊內(nèi)部語句的執(zhí)行刻意被disable語句中斷。塊內(nèi)局部變量說明也是可選項(xiàng),只有在有名塊中才能定義局部變量,并且塊內(nèi)局部變量只能是寄存器類數(shù)據(jù)類型。行為語句可以是如下語句中的一種:過程賦值語句(阻塞型或非阻塞型過程賦值語句) 過程連續(xù)賦值語句(assign/deassign或force/release語句組) if條件分支語句 case條件分支語句 循環(huán)控制語句(forever、repeat、while、for循環(huán)語句) wait等待語句 disable終端語句 事件觸發(fā)語句(eventtrigger) 任務(wù)調(diào)用語句(用戶自定義的任務(wù)或系統(tǒng)任務(wù))。Initial過程塊的使用只要是面向功能模擬的,他通常不具有可綜合性。Initial過程塊通常來描述測試模塊的初始化、監(jiān)視、波形生成等功能行為;而對硬件功能模塊的行為描述中,initial過程塊常常用來對只需執(zhí)行一次的過程進(jìn)行描述,例如刻意用來寄存器的初始化!4、always過程塊:Always過程塊是由“always”過程語句和語句塊組成的,他的格式為:Always(敏感事件列表)語句塊其中語句塊的格式為::塊內(nèi)局部變量說明;時(shí)間控制1 行為語句1;。時(shí)間控制n 行為語句n;說明:(敏感事件列表)是可選項(xiàng),帶有敏感事件列表的語句塊被稱為“由事件控制的語句塊”他的執(zhí)行守敏感事件的控制。敏感事件是有OR連接起來的一個(gè)或者多個(gè)表達(dá)式,只要發(fā)生了敏感事件列表所列出的多個(gè)事件中的任何一個(gè),就啟動(dòng)后面語句塊的執(zhí)行。敏感事件列表實(shí)際上代表了一個(gè)事件控制類型的時(shí)間控制。他的塊內(nèi)定義語句也分為串行塊和并行塊。5、always和initial語句的區(qū)別:always語句過程語句后面可以有一個(gè)敏感事件列表,該敏感事件列表的作用是來激活always過程塊語句的執(zhí)行,而initial語句后面則不允許有敏感事件列表。如果always的敏感事件列表是缺省的則認(rèn)為觸發(fā)條件始終被滿足。6、always過程塊的使用只要是對硬件功能模塊的行為進(jìn)行描述,他可以是在測試模塊中用來對視中進(jìn)行描述。利用always過程塊可以實(shí)現(xiàn)鎖存器和觸發(fā)器他也可以用來實(shí)現(xiàn)組合邏輯。在用always過程塊視線組合邏輯時(shí)要注意將所有的輸入信號(hào)都列入敏感事件列表中,而在使用always過程塊實(shí)現(xiàn)時(shí)序邏輯時(shí)卻不一定要將所有的輸入信號(hào)都列入敏感事件列表。7、串行塊:begin:快內(nèi)局部變量時(shí)間控制1 行為語句1;。時(shí)間控制n 行為語句nEnd其中:塊內(nèi)局部變量刻意是reg型聲明語句、integer型變量聲明語句及real型變量聲明語句。他的語句是順序執(zhí)行的。8、并行塊和串行塊的格式是相同的,只是它的關(guān)鍵字是fork-join,而且他的語句是并行執(zhí)行的。而且并行塊和串行塊是可以嵌套使用的。三、行為描述:時(shí)間控制和賦值控制1、時(shí)間控制可以用來對過程塊中各條語句的執(zhí)行時(shí)間進(jìn)行控制,時(shí)間控制分為兩類:(1)、延時(shí)控制:為行為語句的執(zhí)行指定一個(gè)延時(shí)時(shí)間的控制方式(2)、事件控制:為行為語句的執(zhí)行指定觸發(fā)事件的時(shí)間控制方式其中時(shí)事件控制方式又可以分為兩類:邊沿觸發(fā)事件控制和電平敏感事件控制2、延時(shí)控制格式為:# 行為語句;或者#;其中:#是延時(shí)控制的標(biāo)識(shí)符,“”是一個(gè)直接指定的延遲時(shí)間量,他是以多少個(gè)仿真時(shí)間單位的形式給出的,可以是一個(gè)立即數(shù)、變量和表達(dá)式。如延遲時(shí)間為x或者z那么延遲控制等小于零延遲控制。如果為負(fù)值,是以該負(fù)值的二進(jìn)制補(bǔ)碼值作為實(shí)際的延時(shí)量。3、邊沿觸發(fā)控制分為四種格式:第一種: 行為語句;第二種:;第三種:(or。or)行為語句;第四種:(or。or);其中事件表達(dá)式有三種形式:PosedgeNegedge信號(hào)名可以是任意數(shù)據(jù)類型的標(biāo)量或矢量。第一種事件表達(dá)式形式:代表的觸發(fā)事件是所指定的信號(hào)發(fā)生了某種邏輯變化(不論是整條便還是負(fù)跳變)。它是信號(hào)出了保持穩(wěn)定太意外的任意一種變化過程。第二種表示正跳變可以是下列中的一種:0x 0z 01 x1 z1第三種表示負(fù)跳變可以是寫列中的一種:1x 1z 10 x0Z0.4、用always過程塊實(shí)現(xiàn)組合邏輯功能(1)事件表達(dá)式內(nèi)不能能包含“posedge”和“negedge”關(guān)鍵詞,也就是說敏感事件列表中的事件表達(dá)式智能是前面所述的第一種現(xiàn)在敏感時(shí)間列表中。5、電平敏感事件控制(wait語句)與邊沿觸發(fā)事件控制不同,在電平敏感事件控制方式下啟動(dòng)語句執(zhí)行的觸發(fā)條件是某一個(gè)指定的條件為真。有三種形式:第一種:wait(條件表達(dá)式) 語句塊;第二種:wait(條件表達(dá)式) 行為語句;第三種:wait(條件表達(dá)式);6、過程賦值語句:過程賦值語句是使用于兩種結(jié)構(gòu)化過程塊(initial和always過程塊)中的賦值語句。在過程塊中智能使用過程賦值語句(不能在過程塊中出現(xiàn)連續(xù)賦值語句),同時(shí)過程賦值語句也只能用在過程塊中。過程賦值語句的基本格式為:其中賦值操作符是“=”或者“=”之一,他們分別代表了阻塞型賦值和非阻塞性賦值類型。7、過程賦值語句智能對于對寄存器類的變量(reg、integer、real、time)進(jìn)行賦值8、過程賦值的兩種延時(shí)方式:(1)、外部延時(shí)控制方式:如果時(shí)間控制部分出現(xiàn)在整個(gè)過程賦值語句的最左端,也就是出現(xiàn)在賦值目標(biāo)變量的左邊,那么這種時(shí)間控制就是外部時(shí)間控制方式。在這種控制方式下,過程賦值語句在仿真時(shí)是這樣執(zhí)行的:仿真進(jìn)程暈倒這條帶有時(shí)間控制的過程賦值語句后,首先要延遲等待有時(shí)間控制部分指定的延時(shí)時(shí)間量,或者等待到指定觸發(fā)事件發(fā)生后,才開始計(jì)算有短的賦值表達(dá)式并將其值賦予左端被賦變量。例如 #5 a=b;相當(dāng)于延時(shí)5在把b的值賦給a。(2)、內(nèi)部時(shí)間控制當(dāng)賦值語句中的時(shí)間控制部分出現(xiàn)在“賦值操作符”和“賦值表達(dá)式”之間這種情況下的時(shí)間控制成為“內(nèi)部時(shí)間控制”。格式為:a=#5 b;先計(jì)算b的值,當(dāng)延遲時(shí)間過后把b的值賦給a??梢姡趦?nèi)部時(shí)間控制方式下,時(shí)間控制所“控制”的是賦值表達(dá)式被計(jì)算時(shí)刻到賦值操作被執(zhí)行時(shí)刻之間的時(shí)間差,賦值表達(dá)式被計(jì)算時(shí)刻和賦值變量被復(fù)制的時(shí)刻是不同的,他們之間的時(shí)間差是有時(shí)間控制部分決定的。注意:這里賦給a的值是b在零時(shí)刻的值,要是b在以后的時(shí)刻發(fā)生了變化,則a在延時(shí)時(shí)間過后得到的值依然是b零時(shí)刻的取值。格式例子:b=#5 a;c=(posedge clk)a;d=wait(enable)a;9、“顯式零延時(shí)”控制即延時(shí)時(shí)間為零。#0 a=b;上面的這條語句的執(zhí)行過程與不具有延時(shí)控制的賦值語句“a=b”的執(zhí)行過程是很相似的;在語句開始執(zhí)行后他們都是首先計(jì)算表達(dá)是b的值,在對變量a進(jìn)行賦值;同時(shí)這兩條語句的開始執(zhí)行時(shí)刻、表達(dá)式計(jì)算時(shí)刻和變量賦值時(shí)刻都是相同的。但是兩種賦值有這微妙的差別:在顯示零延時(shí)控制下,賦值語句內(nèi)賦值表達(dá)式的計(jì)算以及變量的賦值操作是在當(dāng)前的仿真時(shí)刻的末位進(jìn)行的,也就是說要等到這一時(shí)刻其他正常操作完成后才進(jìn)行的。而賦值語句“a=b”內(nèi)的表達(dá)式計(jì)算和變量賦值操作則是在賦值開始執(zhí)行后立即進(jìn)行的,不需要等待同一時(shí)刻的其他操作完成后才進(jìn)行。如initialBeginA=0;B=0;EndInitialBegin#0 a=1;#0 b=1;End其中四條賦值語句的操作都是在零時(shí)刻得到執(zhí)行。但是后兩條賦值語句的左端加上了顯示零延時(shí)控制#0,所以后兩條語句在前兩條語句執(zhí)行完后才執(zhí)行。也就是先給a,b賦值0,然后再仿真時(shí)刻0 的末尾執(zhí)行對a,b賦值1的操作,a、b的最終取值是1。10、阻塞和非阻塞賦值:阻塞型符號(hào)為“=” 非阻塞型符號(hào)為“=”區(qū)別:阻塞型在串行快中的 個(gè)跳阻塞型過程賦值語句將以他們在順序快中的先后排列次序依次得到執(zhí)行;而并行塊中 的各條阻塞型過程賦值語句則是同事得到執(zhí)行的。阻塞性過程賦值語句的執(zhí)行過程是:先計(jì)算右端賦值表達(dá)式的取值,然后立即將計(jì)算結(jié)果賦值給“=”左端的被復(fù)制變量。這兩個(gè)特點(diǎn)表明:仿真進(jìn)程在遇到阻塞型過程賦值語句時(shí)將計(jì)算表達(dá)是的值并立即將其結(jié)果付給等式左邊的被賦值變量;在串行語句塊中,下一條語句的執(zhí)行會(huì)被本條阻塞型過程賦值語句阻塞,只有當(dāng)前這條阻塞型過程賦值語句所對應(yīng)的賦值操作執(zhí)行完畢后下一條語句才能開始執(zhí)行。也就是說“=”時(shí),語句是一條一條執(zhí)行的,第一條語句執(zhí)行完畢后,第二條語句才開始執(zhí)行。非阻塞和阻塞是不同的,他的語句是同時(shí)執(zhí)行的,在零時(shí)刻中他的賦值是同時(shí)進(jìn)行的,在begin-end串行語句塊中,一條非阻塞型過程賦值語句的執(zhí)行不會(huì)阻塞下一條語句的執(zhí)行,也就是說本條非阻塞型過程賦值語句對應(yīng)的賦值操作執(zhí)行完畢之前,下一條語句也是可以執(zhí)行的。12、 連續(xù)賦值語句:主要對組合邏輯電路進(jìn)行描述。連線性賦值語句智能用來對連星星變量進(jìn)行驅(qū)動(dòng)(賦值),而不能對寄存器型變量進(jìn)行賦值他可以采用如下兩種格式:(1)、顯示連續(xù)復(fù)制語句:連線型變量類型 連線型變量位寬 連線型變量名;Assign #(延時(shí)量) 連線型變量名=賦值表達(dá)式;(2)、隱式連續(xù)賦值語句:連線型變量類型(賦值驅(qū)動(dòng)強(qiáng)度)連線型變量位寬#(延時(shí)量) 連線型變量名=賦值表達(dá)式;在以上兩種格式中:“連線型變量類型”可以是出了trireg類型外的任何一種連線型數(shù)據(jù)類型。驅(qū)動(dòng)強(qiáng)度默認(rèn)為(strong1,weak0)即賦1值時(shí)的驅(qū)動(dòng)強(qiáng)度為strong,賦0值時(shí)的驅(qū)動(dòng)強(qiáng)度是weak。例如語句wire (weak1,strong0)a=b&c;“延時(shí)量”也是可選的格式如下:#(delay1,delay2,delay3)其中delay1、2、3都是數(shù)值,“delay1”表示連線性變量轉(zhuǎn)移到“1”時(shí)的延時(shí)量(稱為上升延時(shí));delay2為下降延時(shí),delay3致命了連線性變量轉(zhuǎn)移到“高阻(z)”狀態(tài)的延時(shí)稱之為關(guān)斷延時(shí)。在實(shí)際使用中上三個(gè)值是可以省略其中一個(gè)或者兩個(gè)的:如值給出了一個(gè)延時(shí)值,則這個(gè)延時(shí)值同時(shí)帶表“上升延時(shí)”、“下降延時(shí)”、“關(guān)斷延時(shí)”。如給出了兩個(gè)延時(shí)值,則分別代表“上升延時(shí)”和“下降延時(shí)”,而“關(guān)斷延時(shí):將由給出的兩個(gè)延時(shí)值中的較小的哪一個(gè)指定。如果延時(shí)值這一項(xiàng)缺省,則默認(rèn)所有的延時(shí)值為零。“賦值表達(dá)式”可以包含連線型、寄存器型或函數(shù)調(diào)用等任何數(shù)據(jù)類型的操作數(shù),同時(shí)也可以包含任何操作符。13、 在實(shí)際中,連續(xù)賦值語句的賦值目標(biāo)可以是如下幾種:(1)、標(biāo)量連線型變量Wire a,b;Assign a=b;(2)、向量連線性變量Wire7:0a,b;Assign a=b;(3)、向量連線型中變量的一位Wire7:0a,b;Assign a3=b3;(4)、向量連線性變量中的幾位Wire7:0a,b;Assign a3:2=b3:2;(5)、上面幾種類型的任意憑借運(yùn)算結(jié)果Wire a,c;Wire2:1b;Assigna,c=b;在需要對多個(gè)連線型變量進(jìn)行連續(xù)賦值時(shí)還可以采用下列形勢的連續(xù)復(fù)制語句,他可以實(shí)現(xiàn)對多個(gè)變量進(jìn)行連續(xù)賦值。Assign a=b;C=d;D=f;就等同于Assign a=b;Assign c=d;Assign d=f;連續(xù)賦值語句是對連線型變量進(jìn)行連續(xù)的驅(qū)動(dòng);14、注意:與寄存器型變量類型不同,連線性變量沒有數(shù)據(jù)保持能力;只有在被連續(xù)驅(qū)動(dòng)后才能去的確定值(而寄存器型變量只奧在某一時(shí)刻得到一次過程賦值后就能一直保持其取值),弱一個(gè)連線性變量沒有得到認(rèn)可連續(xù)驅(qū)動(dòng)則它的取值將為不定態(tài)“x”。連續(xù)復(fù)制就是實(shí)現(xiàn)對連線型變量進(jìn)行連續(xù)驅(qū)動(dòng)的一種方法。一個(gè)連線型變量一單被連續(xù)復(fù)制語句賦值后,賦值語句右端賦值表達(dá)式的值將始終對被復(fù)制連線性變量產(chǎn)生驅(qū)動(dòng)(連續(xù)驅(qū)動(dòng))。15、如果在一個(gè)模塊內(nèi)包含了多條連續(xù)賦值語句,或者在一個(gè)模塊中同時(shí)包含了連續(xù)賦值語句、過程塊、模塊實(shí)例或原語實(shí)例時(shí),他們之間都是并行執(zhí)行的。.16、過程連續(xù)賦值語句:與過程賦值語句一樣,過程連續(xù)復(fù)制語句也是一種過程性賦值語句,它用來過程連續(xù)賦值。正如他的名稱表示的那樣,過程連續(xù)賦值是在過程塊內(nèi)對變量進(jìn)行連續(xù)賦值的。過程連續(xù)賦值語句和連續(xù)賦值語句的不同之處在于:(1)、過程連續(xù)賦值語句智能用在過程塊(initial塊和always塊)中,而連續(xù)賦值語句則不能出現(xiàn)在過程塊中。(2)、過程連續(xù)賦值語句刻意對寄存器類變量進(jìn)行連續(xù)復(fù)制(force-release語句組還可以對連線性變量進(jìn)行連續(xù)賦值),他的賦值目標(biāo)不可以是變量的某一位或者某幾位。過程連續(xù)賦值語句執(zhí)行的是一種“連續(xù)賦值”:一旦對某個(gè)變量進(jìn)行了過程連續(xù)賦值,則改變量將一直受到過程連續(xù)賦值語句內(nèi)“賦值表達(dá)式”的連續(xù)驅(qū)動(dòng),“賦值表達(dá)式”內(nèi)操作數(shù)的 任何變化都會(huì)引起被賦值變量取值的更新,直到對該變量執(zhí)行了“撤銷過程連續(xù)賦值操作”。17、assign和deassign語句assign和deassign語句構(gòu)成了一組連續(xù)賦值語句。他們只能用于對集訓(xùn)期類變量的連續(xù)賦值操作,而不能用來對連線型變量進(jìn)行連續(xù)賦值操作。前者是對寄存器類變量的連續(xù)復(fù)制,而后者則是一條撤連續(xù)賦值的語句。Assign語句的使用語法是:Assign=;其中“寄存器類變量”致命了連續(xù)賦值操作的目標(biāo)變量,熱“賦值表達(dá)式”則致命了連續(xù)賦值的“驅(qū)動(dòng)信號(hào)”。一旦assign語句得到執(zhí)行,寄存器累變量將由賦值表達(dá)式進(jìn)行連續(xù)驅(qū)動(dòng),他將進(jìn)入被連續(xù)驅(qū)動(dòng)的狀態(tài)。他的優(yōu)先級(jí)是高于普通過程賦值語句的。如果有2個(gè)assign語句對同一個(gè)寄存器變量進(jìn)行了過程連續(xù)驅(qū)動(dòng),那么第二條assign語句的執(zhí)行將覆蓋第一條assign語句的執(zhí)行效果。Deassign的使用語法:Deassign;這是一條撤銷連續(xù)復(fù)制語句。當(dāng)他得到執(zhí)行后,原來由assign語句對變量進(jìn)行的連續(xù)賦值操作將失效,寄存器標(biāo)量將被連續(xù)賦值的狀態(tài)被解除,改變量又可以由普通的過程賦值語句進(jìn)行賦值操作。需要注意的是:當(dāng)用deassign語句來撤銷了對某個(gè)寄存器變量的連續(xù)賦值后,改寄存器變量仍將保持deassign語句執(zhí)行錢的原有取值。18、force和release語句這組連續(xù)賦值語句不僅能對寄存器類變量產(chǎn)生作用,還可以對連線型變量進(jìn)行連續(xù)賦值操作。其中“force”語句用來實(shí)現(xiàn)對寄存器類變啦ing產(chǎn)生作用,還能對連線型變量進(jìn)行連續(xù)賦值操作,我們稱之為“強(qiáng)制語句”?!癴orce語句”的優(yōu)先級(jí)高于“assign語句”。Force語句的語法如下:Force =如果force語句內(nèi)制定的背賦值目標(biāo)變量是寄存器累變量,則在“force語句“得到執(zhí)行后,改寄存器強(qiáng)制的由”賦值表達(dá)式“連續(xù)的驅(qū)動(dòng),進(jìn)入被連續(xù)賦值的狀態(tài),這是將忽略其他較低優(yōu)先級(jí)的賦值語句(普通的過程賦值語句或assign賦值語句)對這個(gè)寄存器變量的賦值操作,知道執(zhí)行了一條”release“語句來釋放對這個(gè)寄存器變量的連續(xù)賦值為止。Force語句只能出現(xiàn)在過程塊中。Release語句的語法如下:Release用deassign的作用相似,用來解除force語句。行為描述:高級(jí)程序語句、函數(shù)和任務(wù)1、 分支語句:包含量中if-ekse條件分支語句和case語句。2、 If-else語句的使用格式:(1)、if() 語句或語句塊;其中條件表達(dá)式中1代表真,0、z、x代表假。沒else語句。(2)、if() 語句或語句塊1;Else 語句或語句塊2;(3)、if() 語句或語句塊1; Else if() 語句或語句塊2;。Else if () 語句或語句塊n;Else 語句或語句塊n+1;3、 case分支控制語句case分支語句有case、casez、casex三種形式。(1)、case語句的格式如下Case()1:語句塊1;2:語句塊2;。n:語句塊n;Default:語句塊n+1;Endcase其中:“”代表著對程序流向進(jìn)行控制的控制信號(hào);各個(gè)” 則是控制表達(dá)式的某些具體狀態(tài)的取值,在實(shí)際使用中這些分支項(xiàng)表達(dá)式通常是一些常量表達(dá)式。如果“控制表達(dá)式”有幾種不同取值情況對應(yīng)著同一操作,則上述格式可以這樣進(jìn)行簡寫:用逗號(hào)將代表著這幾種不同取值情況的多個(gè)“分支表達(dá)式”隔開,再將在這些槍狂下需要執(zhí)行的語句塊放在這幾個(gè)分支項(xiàng)表達(dá)式的后面。例如Case(op_code)2b00: out=a|b;2b01,2b10,2b11:out=a&b;Default:out=0;Endcase4、 casex和casez語句:casez語句執(zhí)行是的比較過程將不考慮控制表達(dá)式中處于高阻態(tài)“z”的那些位的比較;而casex語句則將高阻狀態(tài)和不定狀態(tài)“x”都視為不比關(guān)心的情況。5、 循環(huán)控制語句:forever、repeat、while、for循環(huán)語句。6、 Forever循環(huán)語句實(shí)現(xiàn)的是一種無線的循環(huán),改循環(huán)語句內(nèi)指定的循環(huán)體部分將不斷重復(fù)的執(zhí)行。格式如下:Forever 語句或語句塊;Forever語句常用來產(chǎn)生周期性的波形來作為仿真測試信號(hào)。如initialBeginForever#25 clk=clk;End 產(chǎn)生一個(gè)周期為50的時(shí)鐘波形。如果需要在某個(gè)時(shí)刻跳出forever循環(huán)語句所指定的無限循環(huán),則通過在循環(huán)體語句塊中使用終止語句(disable語句)來實(shí)現(xiàn)這一目的。如:begin:FOREVER_PARTforeverbegincount=count+1;if(count=200) disable FOREVER_PART;#25 clk=clk;EndEnd7、 repeat循環(huán)語句repeat循環(huán)語句實(shí)現(xiàn)的是一種循環(huán)次數(shù)預(yù)先指定的循環(huán),這中循環(huán)語句內(nèi)的循環(huán)體部分被重復(fù)執(zhí)行指定的次數(shù)。格式:repeat() 語句或者語句塊;其中循環(huán)此時(shí)表達(dá)式可以是整數(shù)、變量或一個(gè)數(shù)值表達(dá)式。Data=data1,temp用來實(shí)現(xiàn)移位操作。Temp等于data的最后一位8、 while循環(huán)語句while循環(huán)語句實(shí)現(xiàn)的是一種條件循環(huán),也就是說只有在制定的條件表達(dá)式取值為“真”時(shí)才會(huì)重復(fù)執(zhí)行循環(huán)體,否則不執(zhí)行循環(huán)體。格式如下:while() 語句或語句塊;只要條件表達(dá)式的值成立,就一直執(zhí)行下去。知道條件表達(dá)式的值不成立結(jié)束語句的執(zhí)行。9、 for循環(huán)語句與while語句一樣,for循環(huán)語句實(shí)現(xiàn)的循環(huán)也是一種“條件循環(huán)”,只有在制定的條件表達(dá)式成立時(shí)才進(jìn)行循環(huán)。格式:For(;) 循環(huán)體語句或語句塊;語句一和語句二是兩條過程賦值語句,他們分別來對循環(huán)計(jì)數(shù)變量執(zhí)行賦初值操作和增值操作;分一下幾步:(1)、執(zhí)行語句一。(2)、對“”是否成立做出判斷:若“條件表達(dá)式”取值為真,則執(zhí)行for循環(huán)語句中制定的“循環(huán)語句和語句塊”,然后執(zhí)行下面的 第3步;若“條件表達(dá)式”的取值不為真,則不再執(zhí)行循環(huán)體部分,循環(huán)過程結(jié)束,退出for循環(huán)語句的執(zhí)行。(3)、執(zhí)行語句二 然后轉(zhuǎn)到(2)繼續(xù)執(zhí)行。從上面我們知道:“”只是在第一次循環(huán)開始之前被執(zhí)行了一次,他通常是一條給循環(huán)計(jì)數(shù)變量賦初值的過程賦值語句;“”是每次循環(huán)技術(shù)后、下一次循環(huán)開始前被執(zhí)行的,他通常用于對循環(huán)計(jì)數(shù)變量的取值進(jìn)行修改;而“條件表達(dá)式”的取值判斷是在每次循環(huán)開始前發(fā)生的,他的結(jié)果決定著“是否繼續(xù)執(zhí)行循環(huán)”。10、 任務(wù)引入任務(wù)和函數(shù)的目的是為了對需要多次執(zhí)行的語句進(jìn)行描述,使之便于理解和調(diào)試,引入任務(wù)和函數(shù)還可以簡化程序的結(jié)構(gòu),增強(qiáng)代碼的易讀性。任務(wù)的定義:語法格式如下:Task;端口與類型說明局部變量說明Begin行為語句EndEndtask其中是為定義任務(wù)所取的一個(gè)名稱。在后面不能出現(xiàn)輸入輸出端口列表。在定義任務(wù)的時(shí)候,要注意以下幾點(diǎn):(1)、在第一行“task”語句中不能列出端口名稱表;(2)、在任務(wù)定義結(jié)構(gòu)中的“行為語句”部分可以有延時(shí)語句、敏感事件控制語句等時(shí)間控制語句的出現(xiàn)。(3)、一個(gè)任務(wù)可以沒有輸出,輸入和雙向端口,也可以有一個(gè)或多個(gè)輸出輸入和雙向端口。(4)、一個(gè)任務(wù)刻意沒有返回值,也可以通過輸出端口或雙向端口返回一個(gè)或多個(gè)返回值。(5)、在一個(gè)任務(wù)中刻意條用其他的任務(wù)或者函數(shù),也可以調(diào)用該任務(wù)本身。(6)、在任務(wù)定義結(jié)構(gòu)內(nèi)不允許出現(xiàn)過程塊。(7)、在任務(wù)定義結(jié)構(gòu)內(nèi)可以出現(xiàn)“disable中止語句”這條語句的執(zhí)行將中斷正在執(zhí)行的任務(wù)。當(dāng)任務(wù)中斷后,程序流程將返回到調(diào)用任務(wù)的地方繼續(xù)想下執(zhí)行。任務(wù)的調(diào)用格式:(端口1、2、。n)調(diào)用任務(wù)時(shí)注意:(1)、任務(wù)調(diào)用語句只能出現(xiàn)在過程塊中。(2)、任務(wù)調(diào)用語句就像一條普通的行為語句那樣得到處理。(3)、當(dāng)被調(diào)用的任務(wù)具有輸入或輸出端口時(shí),任務(wù)調(diào)用語句必須包含端口名列表,這個(gè)列表內(nèi)各個(gè)端口名出現(xiàn)的順序和類型必須和任務(wù)定義結(jié)構(gòu)中端口說明部分的端口順序和類型相一致,注意只有寄存器類型的變量才能與任務(wù)的輸出端口相對應(yīng)。11、函數(shù)函數(shù)定義的語法如下:Function;Begin行為語句;EndEndfunction“”是課選的,他用來對函數(shù)調(diào)用返回?cái)?shù)據(jù)的類型或?qū)挾冗M(jìn)行說明:(1)、“msb:lsb”這種形式說明函數(shù)名所代表的返回?cái)?shù)據(jù)變量是一個(gè)多為的寄存器變量,他的位數(shù)由“msb:lsb”指定。(2)、“integer”:這種性說說明函數(shù)名代表的返回變量是一個(gè)整數(shù)型變量。(3)、“real” 如果這項(xiàng)缺省則認(rèn)為函數(shù)名代表的變量是一個(gè)一位的寄存器。在進(jìn)行函數(shù)定義是必須注意:(1)、與任務(wù)一樣,函數(shù)定義結(jié)構(gòu)智能出現(xiàn)在模塊中,而不能出現(xiàn)在過程塊中。(2)、函數(shù)至少需要一個(gè)輸入端口。(3)、函數(shù)不能有任何類型的輸出端口和雙向端口。(4)、在函數(shù)定義結(jié)構(gòu)中的行為語句部分內(nèi)不能出現(xiàn)任何類型的時(shí)間控制描述,也不允許使用disable中止語句。(5)、與任務(wù)定義一樣,函數(shù)定義結(jié)構(gòu)內(nèi)部不能出現(xiàn)過程塊。(6)、在一個(gè)函數(shù)內(nèi)可以對其它函數(shù)進(jìn)行調(diào)用,但是函數(shù)不能調(diào)用其他的任務(wù)。(7)、在第一行“function”中不能出現(xiàn)端口名列表。函數(shù)調(diào)用:函數(shù)調(diào)用的格式:()M個(gè)與函數(shù)定義的結(jié)構(gòu)中說明的各個(gè)輸入端口一一對應(yīng),他們代表著各個(gè)輸入端口的輸入數(shù)據(jù)。這些輸入表達(dá)式的排列順序及類型必須與各個(gè)端口在函數(shù)定義結(jié)構(gòu)中排列順序及類型保持一致。注意以下兩點(diǎn):(1)、函數(shù)的調(diào)用不能單獨(dú)作為一條語句出現(xiàn),他只能作為一個(gè)操作數(shù)出現(xiàn)在調(diào)用語句內(nèi)。如out=getbyte(input、number);在這個(gè)函數(shù)語句中,函數(shù)調(diào)用部分“getbyte(input、number)”被看做是一個(gè)操作數(shù),這個(gè)操作數(shù)的取值是函數(shù)調(diào)用的返回值。在整個(gè)調(diào)用過程中,函數(shù)調(diào)用作為“賦值表達(dá)式”出現(xiàn)在整條過程賦值語句中,函數(shù)調(diào)用部分不能單獨(dú)作為一條語句出現(xiàn)也就是說“getbyte(input、number)”是非法的。(2)、函數(shù)調(diào)用既可以出現(xiàn)在過程塊中,也能出現(xiàn)在assign連續(xù)賦值語句中。如assign net= getbyte(input、number);第四章:用戶自定義元件(UDP)UDP的格式如下:Primitive(,)輸出端口類型說明(output);輸入端口類型說明(input);輸出端寄存器變量說明(reg);元件初始狀態(tài)說明(initial);Table。EndtableEndprimitive說明:UPD定義模塊不能出現(xiàn)在其他的模塊定義內(nèi),他只能作為一個(gè)獨(dú)立的模塊。(2)、只有一個(gè)輸出端口并且改輸出端口并且改輸出端口必須是端口說明表中的第一項(xiàng),而UDP的輸入端口樹木可以有一個(gè)或幾個(gè),一般對時(shí)序電路的UDP最多允許有9個(gè)輸入端,對組合電路的UDP最多允許10個(gè)輸出端。必須注意在定義UPD元件時(shí)所有的輸入端口和輸出端口都只能是一位的(標(biāo)量)。(3)、輸出端寄存器變量說明是在對時(shí)序邏輯UDP元件的進(jìn)行定義的,為了對輸出端口寄存器變量類型進(jìn)行說明而引入的。寄存器變量用與描述時(shí)序電路UDP中的內(nèi)部狀態(tài)。要注意只有在被定義的元件時(shí)時(shí)序邏輯元件時(shí)才能將輸出端口定義為寄存器類型變量。(4)、元件只允許有0、1、x三種狀態(tài),全省為z。(5)、由關(guān)鍵字“table”和“endtable”界定的多個(gè)table表項(xiàng)構(gòu)成了UDP元件定義模塊內(nèi)的一個(gè)輸出真值表。在table只允許出現(xiàn)0、1、x三種邏輯值,不允許出現(xiàn)高阻態(tài)“z”,組合邏輯和時(shí)序邏輯UDP定義模塊的table表項(xiàng)格是不同的。Table表項(xiàng)構(gòu)成了UDP元件輸入、輸出以及誒不狀態(tài)的一張“邏輯真值表”。對不同邏輯功能的UDP元件進(jìn)行定義時(shí)的差別將體現(xiàn)在不同的table表項(xiàng)描述上。例子;Primitive mux4_1(out,in1,in2,in3,in4,ctrl1,ctr2);Output out;Input in1,in2,in3,in4,ctrl1,ctr2; Table /in1 in2 in3 in4 ctrl1 ctrl2: out注釋行用于保證表項(xiàng)中各項(xiàng)的正確/排列順序0 ? ? ? 0 0 :01 ? ? ? 0 0 :1? 0 ? ? 0 0 :0? 1 ? ? 0 0 :1? ? 0 ? 0 0 :0? ? 1 ? 0 0 :1? ? 0 ? 0 0 :0? ? ? 1 0 0 :1EndtableEndprimitive注意在UDP定義中智能是一位寬度的標(biāo)量類型。2、組合邏輯電路UDP對于組合邏輯電路UDP元件的描述相當(dāng)于直接把電路的邏輯真值表搬到UDP藐視的table表中。組合邏輯電路UDP定義時(shí)的table的真值表為:對于table表格必須注意:各個(gè)輸入輸出邏輯值智能是0、1、x和?中的一個(gè),不能去高阻態(tài);輸出端口在primitive定義語句的端口表項(xiàng)中的第一的位置,而在輸出端邏輯值在table表象內(nèi)則是最后一個(gè)位置。在表項(xiàng)中藥用空格分隔開不同的輸入端邏輯值,各個(gè)輸入端口在table表偶像中的排列順序必須和他們在“primivite”定義語句中端口表象內(nèi)的排列順序保持嚴(yán)格一致。為了明確觀察輸入輸出相互關(guān)系的各項(xiàng)排列順序是否正確通常在table表項(xiàng)的第一欄插入一條注釋語句。如上例。在table表中應(yīng)該盡量把所有的情況都包含進(jìn)去,當(dāng)他找不到與其匹配的信息時(shí)則輸出端將取不定態(tài)x。3、時(shí)序邏輯對時(shí)序邏輯UDP進(jìn)行定義時(shí)的table表項(xiàng)格式為:。:: 輸入邏輯值要用空格分開。在時(shí)序邏輯電路中必須增加“輸出端寄存器變啦ing說明”這一項(xiàng)來將輸出端口說明變?yōu)榧拇嫫黝愋?。他分為電平觸發(fā)和邊沿觸發(fā)兩種:電平觸發(fā)的UDPD_inClkCurrent_stateNext_state000或1或x0100或1或x10或1或x1110或1或x100Primitive latch (q,clk,d_in)Output q;Reg q;Input clk,d_in;Initial q=1b0;Table/clk d_in :current_state :next_state01:?:1;00:?:0;1?:

溫馨提示

  • 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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論