




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、1、 .2、 .3、 Reg型的數(shù)據(jù)類型默認初始值為X。reg型數(shù)據(jù)可以賦正值也可以賦負值,但是當一個reg型數(shù)據(jù)是一個表達式的操作數(shù)的時候,他的值被當做無符號數(shù)及正值。4、 在數(shù)據(jù)類型中?和Z均表示高阻態(tài)。5、 Reg型只表示被定義的信號將用在“always”模塊內(nèi),并不是說reg型一定是寄存器或觸發(fā)器的輸出。雖然reg型信號常常是寄存器或觸發(fā)器的輸出但是并不一定總是這樣。6、 Verilog語言中沒有多維數(shù)組的存在。Memory型數(shù)據(jù)類型是通過擴展reg型數(shù)據(jù)的弟子和范圍來生成的。其格式如下regn-1:0存儲器名m-1:0;7、 在除法和取余的運算中結(jié)果的符號和第一個操作數(shù)的符號位是相同
2、的。8、 不同長度的數(shù)據(jù)進行運算:兩個長度不同的數(shù)據(jù)進行位運算時,系統(tǒng)會自動地將兩者按有端對齊,位數(shù)少的操作數(shù)會在相應的高位用0填滿以便連個操作數(shù)安慰進行操作。9、 = = =與!= = =和= =與!= =的區(qū)別:后者稱為邏輯等是運算符,其結(jié)果是2個操作數(shù)的值決定的。由于操作書中某些位可能不定值x和高阻態(tài)z結(jié)果可能是不定值x。而 = = =和!= = =運算符對操作數(shù)的比較時對某些位的高阻態(tài)z和不定值x也進行比較,兩個操作數(shù)必須完全一致,其結(jié)果才是1,否則是0.10、 非阻塞和阻塞賦值方式:非阻塞賦值方式(如a<=b)上面語句所賦得變量值不能立即被下面語句所用,(2)快結(jié)束后才能完成這
3、次賦值操作 3在編寫克綜合的時序邏輯模塊時這是最常用的賦值方法。 阻塞賦值(如a=b) 賦值語句執(zhí)行完后,塊才結(jié)束 2 b的值在賦值語句完成后立即執(zhí)行 3在時序邏輯使用中,可能產(chǎn)生意想不到的結(jié)果。11、 模塊的描述方式:(RTL為寄存器傳輸級描述) “(1)數(shù)據(jù)流描述方式:數(shù)據(jù)流行描述主要用來描述組合功能,具體用“assign”連續(xù)賦值語句來實現(xiàn)。分為兩種a、顯式連續(xù)賦值語句;連線型變量類型連線型變量為快連線型變量名Assign #(延時量) 連線型變量名=賦值表達式;顯式連續(xù)賦值語句包含了兩條語句;第一條是對連線型變量的進行類型說明的說明語句;第二句是對這個已得到聲明的連線型變量進行連續(xù)賦值
4、語句。影視賦值語句:連線型變量類型(復制驅(qū)動強度)連線型變量位寬#(延時量)連線性變量名=賦值表達式。隱式連續(xù)賦值語句是把連線性變量說明語句和連線性變量連續(xù)賦值語句結(jié)合在一條語句中。他可以對連線型變量進行說明的同時進行連續(xù)賦值 。Assign 連續(xù)賦值語句的功能是:當賦值表達式中的變量的只發(fā)生變化時,重新計算賦值表達式的值,并在指定的時延后將得到的結(jié)果賦給左端的連線性變量。Assign只能實現(xiàn)組合功能。而reg型數(shù)據(jù)可以可以存儲過程賦值的最終結(jié)果。端口默認為連線性的不用定義一般,只要輸入發(fā)生變化輸出馬上發(fā)生變化。(2)行為描述方式:A、initial語句:此語句只執(zhí)行一次。B、always語句
5、:次語句循環(huán)執(zhí)行。只有寄存器類型數(shù)據(jù)能夠在這兩種語句中被賦值。寄存器類型數(shù)據(jù)在被賦新值前保持所有值不變。以上兩種語句在0時刻并發(fā)執(zhí)行。(3)、結(jié)構(gòu)描述方式結(jié)構(gòu)描述是通過實例進行描述的方法,他將verilog中預定義的基本元件實例嵌入到語言中,監(jiān)控實力的舒服,一旦其中任何一個發(fā)生變化,便重新運算并輸出。在verilog HDL中可以使用如下結(jié)構(gòu)描述部件:A、 用戶自己定義的模塊b、用用戶自定義元件UDP c、內(nèi)置門級元件 d、內(nèi)置開關(guān)級元件(4)混合型描述11、連續(xù)賦值語句與過程賦值語句的區(qū)別:我覺得這個在剛開始學習verilog時,是會有一些疑問的!a、從語法上來看,連續(xù)賦值語句由“assig
6、n”關(guān)鍵詞來表示,而過程賦值語句中則不包含b、連續(xù)賦值語句中左側(cè)的被賦值數(shù)據(jù)類型必須是線網(wǎng)型數(shù)據(jù),而過程賦值語句中的被賦值數(shù)據(jù)類型則必須是寄存器類型的變量c、連續(xù)賦值語句不能出現(xiàn)在過程快(initial 過程快或者always過程塊)中,而過程賦值語句則只能出現(xiàn)在過程快中d、連續(xù)復制語句主要用來對組合邏輯電路進行建模以及對線網(wǎng)型數(shù)據(jù)間的連接進行描述,而過程賦值語句主要用來對時序邏輯電路進行行為描述e、連續(xù)賦值語句對被賦值線網(wǎng)型數(shù)據(jù)的賦值是“連續(xù)的”(即連續(xù)復制語句產(chǎn)生作用后,賦值表達式中的信號的任何變換都將立即反映到被賦值線網(wǎng)型數(shù)據(jù)的取值上,這也是我們有時會使用“連續(xù)驅(qū)動”這個術(shù)語的原因),而
7、在過程賦值語句情況下,只有在過程賦值語句被執(zhí)行時才執(zhí)行賦值操作,語句執(zhí)行完后被賦值變量的取值不再受到賦值表達式的影響.12、間隔符和注釋符:verilog HDL中的間隔符包括空格(b)、tab(t)、換行符(n)以及換頁符。注釋符有2種:/和/*.*/ 后為多行注釋符用于對多行語句注釋;前者為單行注釋符,只對注釋符所在的行有效。13、數(shù)值:下劃線除了不可以放于數(shù)值的首位意外,可以隨意用在整型數(shù)和實型數(shù)之間,他們對數(shù)值的大小沒有任何的影響,只是為了提高可讀性。在verilog中有二進制(b或者B)、十進制(d或者D)、八進制(o或者O)、十六進制(h或者H)格式:<size><
8、;base-format><number> <size>用于指定所表示數(shù)的位寬,在數(shù)值的表示中式可以缺省的.位寬小于數(shù)值的實際位數(shù)時,相應的高位部分被忽略;當位寬大于實際的位數(shù),且數(shù)值的最高位是0或者1時,相應的高位補零;當位寬高于數(shù)值的實際位數(shù),但數(shù)值的最高位是x或者z時相應的高位部分補x或者z。二進制中的x或者z表示一位處于x或者z,八進制的表示三位,十六進制的表示4位。14、實型數(shù)及其表示方法Verilog HDL中的實數(shù)可以用十進制與科學計數(shù)法兩種格式來表示,如果采用十進制數(shù)格式,小數(shù)點兩邊必須有數(shù)字,否則為非法字符。如 3.8E10 2.1e-9;15、
9、字符串字符串是用雙引號括起來的字符序列,他必須包含在同一行中,不能分成多行書寫。如字符串用作verilog HDL表達式或賦值語句中的操作數(shù),則字符串被看做8位的ASCII值序列 ,即一個對應8位的ASCII碼。在verilog中采用寄存器變量來存儲字符串,寄存器變量的位數(shù)要大于字符串的最大長度。需要注意的是,verilog HDL中并不需要特殊位來存儲終止符??梢圆捎脴藴什僮鞣麑ψ址M行諸如連接類的操作。在操作過程中字符串變量位數(shù)大于字符串的實際長度,則字符串變量的高位補零。Reg8*12:1stringvarInitialBegin string=“hello woeld!”;End特殊
10、字符:n 換行符t tab鍵 符號*符號* ddd三位八進制數(shù)表示的ASCII值 %符號%16、數(shù)據(jù)類型(1)、物理數(shù)據(jù)類型:分為連線性和寄存器型 變量可以取0、1、x、z,中的認可一個。X表示一個位置初始狀態(tài)的變量,或者由于多個驅(qū)動源試圖將其設定為不同的值而引起的沖突性連線性變量,z表示高祖狀態(tài)或浮空量。物理類型數(shù)據(jù)分為連線型和寄存器型亮中連線型數(shù)據(jù)對應的是硬件電路的物理信號連線,沒有電荷的保持作用(trireg除外)。連線型數(shù)據(jù)必須有去動員驅(qū)動,有兩種方式對他進行驅(qū)動:一種是結(jié)構(gòu)描述中把它連接到一個們或者模塊的輸出端;二是用連續(xù)賦值語句assign對其進行復制。當沒有驅(qū)動源對其驅(qū)動時,他將
11、保持高阻態(tài)連線型數(shù)據(jù)功能描述Wire,tri兩種常見類型Wor,trior多重驅(qū)動時,具有線或特性的連線型Wand,triand多重驅(qū)動時,具有線與特性的連線型Tri1上拉電阻Tri0下拉電阻Supp.ly1電源線,邏輯1Supply0電源線,邏輯0Verilog HDL中的連線型數(shù)據(jù)及其功能描述寄存器數(shù)據(jù)對應的是具有保持作用的硬件電路與元件,如觸發(fā)器、鎖存器等。如reg沒初始化則將為x缺省為一位。兩種數(shù)據(jù)的區(qū)別:寄存器型數(shù)據(jù)保持最后一次的賦值,而連線型數(shù)據(jù)需要有持續(xù)的驅(qū)動。寄存器數(shù)據(jù)的驅(qū)動刻意通過過程賦值語句實現(xiàn),過程賦值語句只能出現(xiàn)在過程語句后面的過程塊語句中。存儲區(qū):verilog中采用
12、寄存器數(shù)組來表示存儲器,用來對ROM,RAM或寄存器文件進行建模。數(shù)組中的每一個寄存器均稱為一個元素,用不同的索引來尋址。Reg16:1 mem5:1 申明16位5字的存儲器與寄存器。(2)、抽象數(shù)據(jù)類項有整型integer 時間型time 實型real 參數(shù)性parameter17、運算符算術(shù)運算符:包括+ - * / %是二元運算符。如果操作數(shù)為寄存器或者連線型則為無符號數(shù);如果為整型或者實型,則刻意是有符號數(shù)。當用基數(shù)格式表示整數(shù)時,一定是無符號數(shù);兩個操作數(shù)中的一個為x則記過為x。18、按位運算符和邏輯運算符:!是邏輯非而是按位操作的非即按位取反。例如:對于!(3=2)的結(jié)果是1;而后
13、者對為進行操作(0、0、1、0)=1101;19、歸約運算符:歸約運算是對單個的操作數(shù)進行歸約的遞推運算,最后的結(jié)果是一位的二進制數(shù)。具體過程:先講操作數(shù)的第一位和第二位進行歸約運算,然后將運算結(jié)果與第三位進行歸約運算,以此類推,直到最后一位。格式(&b)19、移位運算?!不會20、條件運算符:verilog HDL中只有唯一的一種三目運算符,及條件運算符有三個操作數(shù)。如第一個操作數(shù)為邏輯1,則算子返回第二個操作數(shù);如第一個操作數(shù)為邏輯0,則返回第三個操作數(shù);如第一個操作數(shù)為高阻態(tài)或未知態(tài)則按下表給出的邏輯,將第二個和第三個操作數(shù)按位比較得到結(jié)果。?:01XZ00XXX1X1XXXXX
14、XXZXXXX21、連接和復制:連接運算是將多個小的表達式合并成一個大的表達式。Verilog HDL中用符號, ,實現(xiàn)多個表達式的鏈接運算,各個表達式之間用“,”隔開。復制運算符將一個表達式放入雙重花括號內(nèi),而復制因子放在第一個括號內(nèi),用來指定復制的次數(shù)。運算符描述為選擇或部分選擇()圓括號!邏輯非或按位非&| & | 歸約運算符+ -單目算術(shù)運算符鏈接運算符*/%算術(shù)運算符+ -雙目運算符<< >>以為運算符>關(guān)系運算符= !=相等運算符&按位與 按位異或或異或非|按位或&&邏輯與|邏輯或?:條件表達式二、模塊的基本結(jié)構(gòu)
15、1、行為描述的結(jié)構(gòu):Module<模塊名>(<端口列表>)模塊端口說明參數(shù)定義(可選)數(shù)據(jù)類型說明過程快(initial過程塊或always快,可有一個或多個)連續(xù)賦值語句任務定義(tast)(可選)函數(shù)定義(function)(可選)其中:數(shù)據(jù)類型說明用來對模塊中用到的各類變量類型進行說明,如果某個變量沒有進行數(shù)據(jù)類型說明,則他的類型缺省為連線類型(wire)。上面列出的各個模塊組成項可以是任意次序出現(xiàn),但是端口說明和數(shù)據(jù)類型說明必須出現(xiàn)在端口和數(shù)據(jù)被引用之前。2、(1)在行為描述模塊中出現(xiàn)的每個過程塊(always過程塊或者initial過程塊)都代表一個獨立的進程
16、。(2)在進行仿真時,所有的過程塊的執(zhí)行都是從0時刻開始并行的執(zhí)行。(3)每一個過程塊內(nèi)部的多條語句的執(zhí)行方式可以是順序執(zhí)行的(當快定義語句為beginend時的情況),也可以是并行執(zhí)行的(塊定義語句是fork-join時的情況)。(4)always和initial過程塊都是不能嵌套使用的。3、initial過程塊:Initial語句塊而語句塊的格式為:<塊定義語句>:<塊名>塊內(nèi)局部變量;時間控制1 行為語句;。時間控制n 行為語句;<塊定義語句2>其中:塊定義語句刻意是“begin end”語句組,或者時“fork,join”語句組。<塊名>
17、為可選項,塊名可以乘早一個局部作用域。定義塊名的過程快成為“有名塊”,在有名塊下可以定義局部變量,有名塊內(nèi)部語句的執(zhí)行刻意被disable語句中斷。塊內(nèi)局部變量說明也是可選項,只有在有名塊中才能定義局部變量,并且塊內(nèi)局部變量只能是寄存器類數(shù)據(jù)類型。行為語句可以是如下語句中的一種:過程賦值語句(阻塞型或非阻塞型過程賦值語句) 過程連續(xù)賦值語句(assign/deassign或force/release語句組) if條件分支語句 case條件分支語句 循環(huán)控制語句(forever、repeat、while、for循環(huán)語句) wait等待語句 disable終端語句 事件觸發(fā)語句(eventtrig
18、ger) 任務調(diào)用語句(用戶自定義的任務或系統(tǒng)任務)。Initial過程塊的使用只要是面向功能模擬的,他通常不具有可綜合性。Initial過程塊通常來描述測試模塊的初始化、監(jiān)視、波形生成等功能行為;而對硬件功能模塊的行為描述中,initial過程塊常常用來對只需執(zhí)行一次的過程進行描述,例如刻意用來寄存器的初始化!4、always過程塊:Always過程塊是由“always”過程語句和語句塊組成的,他的格式為:Always(敏感事件列表)語句塊其中語句塊的格式為:<塊定義語句1 這里一般是begin或者fork>:<塊名>塊內(nèi)局部變量說明;時間控制1 行為語句1;。時間控
19、制n 行為語句n;<塊定義語句2 這里一般是end>說明:(敏感事件列表)是可選項,帶有敏感事件列表的語句塊被稱為“由事件控制的語句塊”他的執(zhí)行守敏感事件的控制。敏感事件是有OR連接起來的一個或者多個表達式,只要發(fā)生了敏感事件列表所列出的多個事件中的任何一個,就啟動后面語句塊的執(zhí)行。敏感事件列表實際上代表了一個事件控制類型的時間控制。他的塊內(nèi)定義語句也分為串行塊和并行塊。5、always和initial語句的區(qū)別:always語句過程語句后面可以有一個敏感事件列表,該敏感事件列表的作用是來激活always過程塊語句的執(zhí)行,而initial語句后面則不允許有敏感事件列表。如果alwa
20、ys的敏感事件列表是缺省的則認為觸發(fā)條件始終被滿足。6、always過程塊的使用只要是對硬件功能模塊的行為進行描述,他可以是在測試模塊中用來對視中進行描述。利用always過程塊可以實現(xiàn)鎖存器和觸發(fā)器他也可以用來實現(xiàn)組合邏輯。在用always過程塊視線組合邏輯時要注意將所有的輸入信號都列入敏感事件列表中,而在使用always過程塊實現(xiàn)時序邏輯時卻不一定要將所有的輸入信號都列入敏感事件列表。7、串行塊:begin:<塊名>快內(nèi)局部變量時間控制1 行為語句1;。時間控制n 行為語句nEnd其中:塊內(nèi)局部變量刻意是reg型聲明語句、integer型變量聲明語句及real型變量聲明語句。他
21、的語句是順序執(zhí)行的。8、并行塊和串行塊的格式是相同的,只是它的關(guān)鍵字是fork-join,而且他的語句是并行執(zhí)行的。而且并行塊和串行塊是可以嵌套使用的。三、行為描述:時間控制和賦值控制1、時間控制可以用來對過程塊中各條語句的執(zhí)行時間進行控制,時間控制分為兩類:(1)、延時控制:為行為語句的執(zhí)行指定一個延時時間的控制方式(2)、事件控制:為行為語句的執(zhí)行指定觸發(fā)事件的時間控制方式其中時事件控制方式又可以分為兩類:邊沿觸發(fā)事件控制和電平敏感事件控制2、延時控制格式為:#<延遲時間> 行為語句;或者#<延遲時間>;其中:#是延時控制的標識符,“<延遲時間>”是一個
22、直接指定的延遲時間量,他是以多少個仿真時間單位的形式給出的,可以是一個立即數(shù)、變量和表達式。如延遲時間為x或者z那么延遲控制等小于零延遲控制。如果為負值,是以該負值的二進制補碼值作為實際的延時量。3、邊沿觸發(fā)控制分為四種格式:第一種:<事件表達式> 行為語句;第二種:<事件表達式>;第三種:(<事件表達式1>or<事件表達式2>。or<事件表達式n>)行為語句;第四種:(<事件表達式1>or<事件表達式2>。or<事件表達式n>);其中事件表達式有三種形式:<信號名>Posedge<
23、;信號名>Negedge<信號名>信號名可以是任意數(shù)據(jù)類型的標量或矢量。第一種事件表達式形式:代表的觸發(fā)事件是<信號名>所指定的信號發(fā)生了某種邏輯變化(不論是整條便還是負跳變)。它是信號出了保持穩(wěn)定太意外的任意一種變化過程。第二種表示正跳變可以是下列中的一種:0x 0z 01 x1 z1第三種表示負跳變可以是寫列中的一種:1x 1z 10 x0Z0.4、用always過程塊實現(xiàn)組合邏輯功能(1)事件表達式內(nèi)不能能包含“posedge”和“negedge”關(guān)鍵詞,也就是說敏感事件列表中的事件表達式智能是前面所述的第一種現(xiàn)在敏感時間列表中。5、電平敏感事件控制(wai
24、t語句)與邊沿觸發(fā)事件控制不同,在電平敏感事件控制方式下啟動語句執(zhí)行的觸發(fā)條件是某一個指定的條件為真。有三種形式:第一種:wait(條件表達式) 語句塊;第二種:wait(條件表達式) 行為語句;第三種:wait(條件表達式);6、過程賦值語句:過程賦值語句是使用于兩種結(jié)構(gòu)化過程塊(initial和always過程塊)中的賦值語句。在過程塊中智能使用過程賦值語句(不能在過程塊中出現(xiàn)連續(xù)賦值語句),同時過程賦值語句也只能用在過程塊中。過程賦值語句的基本格式為:<被賦值變量><賦值操作符><賦值表達式>其中賦值操作符是“=”或者“=”之一,他們分別代表了阻塞型賦
25、值和非阻塞性賦值類型。7、過程賦值語句智能對于對寄存器類的變量(reg、integer、real、time)進行賦值8、過程賦值的兩種延時方式:(1)、外部延時控制方式:如果時間控制部分出現(xiàn)在整個過程賦值語句的最左端,也就是出現(xiàn)在賦值目標變量的左邊,那么這種時間控制就是外部時間控制方式。在這種控制方式下,過程賦值語句在仿真時是這樣執(zhí)行的:仿真進程暈倒這條帶有時間控制的過程賦值語句后,首先要延遲等待有時間控制部分指定的延時時間量,或者等待到指定觸發(fā)事件發(fā)生后,才開始計算有短的賦值表達式并將其值賦予左端被賦變量。例如 #5 a=b;相當于延時5在把b的值賦給a。(2)、內(nèi)部時間控制當賦值語句中的時
26、間控制部分出現(xiàn)在“賦值操作符”和“賦值表達式”之間這種情況下的時間控制成為“內(nèi)部時間控制”。格式為:a=#5 b;先計算b的值,當延遲時間過后把b的值賦給a??梢?,在內(nèi)部時間控制方式下,時間控制所“控制”的是賦值表達式被計算時刻到賦值操作被執(zhí)行時刻之間的時間差,賦值表達式被計算時刻和賦值變量被復制的時刻是不同的,他們之間的時間差是有時間控制部分決定的。注意:這里賦給a的值是b在零時刻的值,要是b在以后的時刻發(fā)生了變化,則a在延時時間過后得到的值依然是b零時刻的取值。格式例子:b=#5 a;c=(posedge clk)a;d=wait(enable)a;9、“顯式零延時”控制即延時時間為零。#
27、0 a=b;上面的這條語句的執(zhí)行過程與不具有延時控制的賦值語句“a=b”的執(zhí)行過程是很相似的;在語句開始執(zhí)行后他們都是首先計算表達是b的值,在對變量a進行賦值;同時這兩條語句的開始執(zhí)行時刻、表達式計算時刻和變量賦值時刻都是相同的。但是兩種賦值有這微妙的差別:在顯示零延時控制下,賦值語句內(nèi)賦值表達式的計算以及變量的賦值操作是在當前的仿真時刻的末位進行的,也就是說要等到這一時刻其他正常操作完成后才進行的。而賦值語句“a=b”內(nèi)的表達式計算和變量賦值操作則是在賦值開始執(zhí)行后立即進行的,不需要等待同一時刻的其他操作完成后才進行。如initialBeginA=0;B=0;EndInitialBegin#
28、0 a=1;#0 b=1;End其中四條賦值語句的操作都是在零時刻得到執(zhí)行。但是后兩條賦值語句的左端加上了顯示零延時控制#0,所以后兩條語句在前兩條語句執(zhí)行完后才執(zhí)行。也就是先給a,b賦值0,然后再仿真時刻0 的末尾執(zhí)行對a,b賦值1的操作,a、b的最終取值是1。10、阻塞和非阻塞賦值:阻塞型符號為“=” 非阻塞型符號為“<=”區(qū)別:阻塞型在串行快中的 個跳阻塞型過程賦值語句將以他們在順序快中的先后排列次序依次得到執(zhí)行;而并行塊中 的各條阻塞型過程賦值語句則是同事得到執(zhí)行的。阻塞性過程賦值語句的執(zhí)行過程是:先計算右端賦值表達式的取值,然后立即將計算結(jié)果賦值給“=”左端的被復制變量。這兩個
29、特點表明:仿真進程在遇到阻塞型過程賦值語句時將計算表達是的值并立即將其結(jié)果付給等式左邊的被賦值變量;在串行語句塊中,下一條語句的執(zhí)行會被本條阻塞型過程賦值語句阻塞,只有當前這條阻塞型過程賦值語句所對應的賦值操作執(zhí)行完畢后下一條語句才能開始執(zhí)行。也就是說“=”時,語句是一條一條執(zhí)行的,第一條語句執(zhí)行完畢后,第二條語句才開始執(zhí)行。非阻塞和阻塞是不同的,他的語句是同時執(zhí)行的,在零時刻中他的賦值是同時進行的,在begin-end串行語句塊中,一條非阻塞型過程賦值語句的執(zhí)行不會阻塞下一條語句的執(zhí)行,也就是說本條非阻塞型過程賦值語句對應的賦值操作執(zhí)行完畢之前,下一條語句也是可以執(zhí)行的。12、 連續(xù)賦值語句
30、:主要對組合邏輯電路進行描述。連線性賦值語句智能用來對連星星變量進行驅(qū)動(賦值),而不能對寄存器型變量進行賦值他可以采用如下兩種格式:(1)、顯示連續(xù)復制語句:連線型變量類型 連線型變量位寬 連線型變量名;Assign #(延時量) 連線型變量名=賦值表達式;(2)、隱式連續(xù)賦值語句:連線型變量類型(賦值驅(qū)動強度)連線型變量位寬#(延時量) 連線型變量名=賦值表達式;在以上兩種格式中:“連線型變量類型”可以是出了trireg類型外的任何一種連線型數(shù)據(jù)類型。驅(qū)動強度默認為(strong1,weak0)即賦1值時的驅(qū)動強度為strong,賦0值時的驅(qū)動強度是weak。例如語句wire (weak1
31、,strong0)a=b&c;“延時量”也是可選的格式如下:#(delay1,delay2,delay3)其中delay1、2、3都是數(shù)值,“delay1”表示連線性變量轉(zhuǎn)移到“1”時的延時量(稱為上升延時);delay2為下降延時,delay3致命了連線性變量轉(zhuǎn)移到“高阻(z)”狀態(tài)的延時稱之為關(guān)斷延時。在實際使用中上三個值是可以省略其中一個或者兩個的:如值給出了一個延時值,則這個延時值同時帶表“上升延時”、“下降延時”、“關(guān)斷延時”。如給出了兩個延時值,則分別代表“上升延時”和“下降延時”,而“關(guān)斷延時:將由給出的兩個延時值中的較小的哪一個指定。如果延時值這一項缺省,則默認所有的延
32、時值為零?!百x值表達式”可以包含連線型、寄存器型或函數(shù)調(diào)用等任何數(shù)據(jù)類型的操作數(shù),同時也可以包含任何操作符。13、 在實際中,連續(xù)賦值語句的賦值目標可以是如下幾種:(1)、標量連線型變量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)、上面幾種類型的任意憑借運算結(jié)果Wire a,c;Wire2:1b;Assigna,c=b;在需要對多個連線型變量進行連續(xù)賦值時還可以采用
33、下列形勢的連續(xù)復制語句,他可以實現(xiàn)對多個變量進行連續(xù)賦值。Assign a=b;C=d;D=f;就等同于Assign a=b;Assign c=d;Assign d=f;連續(xù)賦值語句是對連線型變量進行連續(xù)的驅(qū)動;14、注意:與寄存器型變量類型不同,連線性變量沒有數(shù)據(jù)保持能力;只有在被連續(xù)驅(qū)動后才能去的確定值(而寄存器型變量只奧在某一時刻得到一次過程賦值后就能一直保持其取值),弱一個連線性變量沒有得到認可連續(xù)驅(qū)動則它的取值將為不定態(tài)“x”。連續(xù)復制就是實現(xiàn)對連線型變量進行連續(xù)驅(qū)動的一種方法。一個連線型變量一單被連續(xù)復制語句賦值后,賦值語句右端賦值表達式的值將始終對被復制連線性變量產(chǎn)生驅(qū)動(連續(xù)驅(qū)
34、動)。15、如果在一個模塊內(nèi)包含了多條連續(xù)賦值語句,或者在一個模塊中同時包含了連續(xù)賦值語句、過程塊、模塊實例或原語實例時,他們之間都是并行執(zhí)行的。.16、過程連續(xù)賦值語句:與過程賦值語句一樣,過程連續(xù)復制語句也是一種過程性賦值語句,它用來過程連續(xù)賦值。正如他的名稱表示的那樣,過程連續(xù)賦值是在過程塊內(nèi)對變量進行連續(xù)賦值的。過程連續(xù)賦值語句和連續(xù)賦值語句的不同之處在于:(1)、過程連續(xù)賦值語句智能用在過程塊(initial塊和always塊)中,而連續(xù)賦值語句則不能出現(xiàn)在過程塊中。(2)、過程連續(xù)賦值語句刻意對寄存器類變量進行連續(xù)復制(force-release語句組還可以對連線性變量進行連續(xù)賦值
35、),他的賦值目標不可以是變量的某一位或者某幾位。過程連續(xù)賦值語句執(zhí)行的是一種“連續(xù)賦值”:一旦對某個變量進行了過程連續(xù)賦值,則改變量將一直受到過程連續(xù)賦值語句內(nèi)“賦值表達式”的連續(xù)驅(qū)動,“賦值表達式”內(nèi)操作數(shù)的 任何變化都會引起被賦值變量取值的更新,直到對該變量執(zhí)行了“撤銷過程連續(xù)賦值操作”。17、assign和deassign語句assign和deassign語句構(gòu)成了一組連續(xù)賦值語句。他們只能用于對集訓期類變量的連續(xù)賦值操作,而不能用來對連線型變量進行連續(xù)賦值操作。前者是對寄存器類變量的連續(xù)復制,而后者則是一條撤連續(xù)賦值的語句。Assign語句的使用語法是:Assign<寄存器變量&
36、gt;=<賦值表達式>其中“寄存器類變量”致命了連續(xù)賦值操作的目標變量,熱“賦值表達式”則致命了連續(xù)賦值的“驅(qū)動信號”。一旦assign語句得到執(zhí)行,寄存器累變量將由賦值表達式進行連續(xù)驅(qū)動,他將進入被連續(xù)驅(qū)動的狀態(tài)。他的優(yōu)先級是高于普通過程賦值語句的。如果有2個assign語句對同一個寄存器變量進行了過程連續(xù)驅(qū)動,那么第二條assign語句的執(zhí)行將覆蓋第一條assign語句的執(zhí)行效果。Deassign的使用語法:Deassign<寄存器變量>;這是一條撤銷連續(xù)復制語句。當他得到執(zhí)行后,原來由assign語句對變量進行的連續(xù)賦值操作將失效,寄存器標量將被連續(xù)賦值的狀態(tài)被解
37、除,改變量又可以由普通的過程賦值語句進行賦值操作。需要注意的是:當用deassign語句來撤銷了對某個寄存器變量的連續(xù)賦值后,改寄存器變量仍將保持deassign語句執(zhí)行錢的原有取值。18、force和release語句這組連續(xù)賦值語句不僅能對寄存器類變量產(chǎn)生作用,還可以對連線型變量進行連續(xù)賦值操作。其中“force”語句用來實現(xiàn)對寄存器類變啦ing產(chǎn)生作用,還能對連線型變量進行連續(xù)賦值操作,我們稱之為“強制語句”。“force語句”的優(yōu)先級高于“assign語句”。Force語句的語法如下:Force <寄存器或連線性變量>=<賦值表達式>如果force語句內(nèi)制定的背
38、賦值目標變量是寄存器累變量,則在“force語句“得到執(zhí)行后,改寄存器強制的由”賦值表達式“連續(xù)的驅(qū)動,進入被連續(xù)賦值的狀態(tài),這是將忽略其他較低優(yōu)先級的賦值語句(普通的過程賦值語句或assign賦值語句)對這個寄存器變量的賦值操作,知道執(zhí)行了一條”release“語句來釋放對這個寄存器變量的連續(xù)賦值為止。Force語句只能出現(xiàn)在過程塊中。Release語句的語法如下:Release<寄存器或連線型變量>用deassign的作用相似,用來解除force語句。行為描述:高級程序語句、函數(shù)和任務1、 分支語句:包含量中if-ekse條件分支語句和case語句。2、 If-else語句的使
39、用格式:(1)、if(<條件表達式>) 語句或語句塊;其中條件表達式中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(<控制表達式>)<分支項
40、表達式>1:語句塊1;<分支項表達式>2:語句塊2;。<分支項表達式>n:語句塊n;Default:語句塊n+1;Endcase其中:“<控制表達式>”代表著對程序流向進行控制的控制信號;各個”<分支表達式>” 則是控制表達式的某些具體狀態(tài)的取值,在實際使用中這些分支項表達式通常是一些常量表達式。如果“控制表達式”有幾種不同取值情況對應著同一操作,則上述格式可以這樣進行簡寫:用逗號將代表著這幾種不同取值情況的多個“分支表達式”隔開,再將在這些槍狂下需要執(zhí)行的語句塊放在這幾個分支項表達式的后面。例如Case(op_code)2b00: out
41、=a|b;2b01,2b10,2b11:out=a&b;Default:out=0;Endcase4、 casex和casez語句:casez語句執(zhí)行是的比較過程將不考慮控制表達式中處于高阻態(tài)“z”的那些位的比較;而casex語句則將高阻狀態(tài)和不定狀態(tài)“x”都視為不比關(guān)心的情況。5、 循環(huán)控制語句:forever、repeat、while、for循環(huán)語句。6、 Forever循環(huán)語句實現(xiàn)的是一種無線的循環(huán),改循環(huán)語句內(nèi)指定的循環(huán)體部分將不斷重復的執(zhí)行。格式如下:Forever 語句或語句塊;Forever語句常用來產(chǎn)生周期性的波形來作為仿真測試信號。如initialBeginForev
42、er#25 clk=clk;End 產(chǎn)生一個周期為50的時鐘波形。如果需要在某個時刻跳出forever循環(huán)語句所指定的無限循環(huán),則通過在循環(huán)體語句塊中使用終止語句(disable語句)來實現(xiàn)這一目的。如:begin:FOREVER_PARTforeverbegincount=count+1;if(count>=200) disable FOREVER_PART;#25 clk=clk;EndEnd7、 repeat循環(huán)語句repeat循環(huán)語句實現(xiàn)的是一種循環(huán)次數(shù)預先指定的循環(huán),這中循環(huán)語句內(nèi)的循環(huán)體部分被重復執(zhí)行指定的次數(shù)。格式:repeat(<循環(huán)次數(shù)表達式>) 語句或者語
43、句塊;其中循環(huán)此時表達式可以是整數(shù)、變量或一個數(shù)值表達式。Data=data<<1,temp用來實現(xiàn)移位操作。Temp等于data的最后一位8、 while循環(huán)語句while循環(huán)語句實現(xiàn)的是一種條件循環(huán),也就是說只有在制定的條件表達式取值為“真”時才會重復執(zhí)行循環(huán)體,否則不執(zhí)行循環(huán)體。格式如下:while(<條件表達式>) 語句或語句塊;只要條件表達式的值成立,就一直執(zhí)行下去。知道條件表達式的值不成立結(jié)束語句的執(zhí)行。9、 for循環(huán)語句與while語句一樣,for循環(huán)語句實現(xiàn)的循環(huán)也是一種“條件循環(huán)”,只有在制定的條件表達式成立時才進行循環(huán)。格式:For(<語句一
44、><條件表達式><語句二>) 循環(huán)體語句或語句塊;語句一和語句二是兩條過程賦值語句,他們分別來對循環(huán)計數(shù)變量執(zhí)行賦初值操作和增值操作;分一下幾步:(1)、執(zhí)行語句一。(2)、對“<條件表達式>”是否成立做出判斷:若“條件表達式”取值為真,則執(zhí)行for循環(huán)語句中制定的“循環(huán)語句和語句塊”,然后執(zhí)行下面的 第3步;若“條件表達式”的取值不為真,則不再執(zhí)行循環(huán)體部分,循環(huán)過程結(jié)束,退出for循環(huán)語句的執(zhí)行。(3)、執(zhí)行語句二 然后轉(zhuǎn)到(2)繼續(xù)執(zhí)行。從上面我們知道:“<語句一>”只是在第一次循環(huán)開始之前被執(zhí)行了一次,他通常是一條給循環(huán)計數(shù)變量賦初
45、值的過程賦值語句;“<語句二>”是每次循環(huán)技術(shù)后、下一次循環(huán)開始前被執(zhí)行的,他通常用于對循環(huán)計數(shù)變量的取值進行修改;而“條件表達式”的取值判斷是在每次循環(huán)開始前發(fā)生的,他的結(jié)果決定著“是否繼續(xù)執(zhí)行循環(huán)”。10、 任務引入任務和函數(shù)的目的是為了對需要多次執(zhí)行的語句進行描述,使之便于理解和調(diào)試,引入任務和函數(shù)還可以簡化程序的結(jié)構(gòu),增強代碼的易讀性。任務的定義:語法格式如下:Task<任務名>;端口與類型說明局部變量說明Begin行為語句EndEndtask其中<任務名>是為定義任務所取的一個名稱。在<任務名>后面不能出現(xiàn)輸入輸出端口列表。在定義任務的
46、時候,要注意以下幾點:(1)、在第一行“task”語句中不能列出端口名稱表;(2)、在任務定義結(jié)構(gòu)中的“行為語句”部分可以有延時語句、敏感事件控制語句等時間控制語句的出現(xiàn)。(3)、一個任務可以沒有輸出,輸入和雙向端口,也可以有一個或多個輸出輸入和雙向端口。(4)、一個任務刻意沒有返回值,也可以通過輸出端口或雙向端口返回一個或多個返回值。(5)、在一個任務中刻意條用其他的任務或者函數(shù),也可以調(diào)用該任務本身。(6)、在任務定義結(jié)構(gòu)內(nèi)不允許出現(xiàn)過程塊。(7)、在任務定義結(jié)構(gòu)內(nèi)可以出現(xiàn)“disable中止語句”這條語句的執(zhí)行將中斷正在執(zhí)行的任務。當任務中斷后,程序流程將返回到調(diào)用任務的地方繼續(xù)想下執(zhí)行
47、。任務的調(diào)用格式:<任務名>(端口1、2、。n)調(diào)用任務時注意:(1)、任務調(diào)用語句只能出現(xiàn)在過程塊中。(2)、任務調(diào)用語句就像一條普通的行為語句那樣得到處理。(3)、當被調(diào)用的任務具有輸入或輸出端口時,任務調(diào)用語句必須包含端口名列表,這個列表內(nèi)各個端口名出現(xiàn)的順序和類型必須和任務定義結(jié)構(gòu)中端口說明部分的端口順序和類型相一致,注意只有寄存器類型的變量才能與任務的輸出端口相對應。11、函數(shù)函數(shù)定義的語法如下:Function<返回值類型或返回值寬度><函數(shù)名>;<輸入端口說明><局部變量說明>Begin行為語句;EndEndfuncti
48、on“<返回值類型和返回值寬度>”是課選的,他用來對函數(shù)調(diào)用返回數(shù)據(jù)的類型或?qū)挾冗M行說明:(1)、“msb:lsb”這種形式說明函數(shù)名所代表的返回數(shù)據(jù)變量是一個多為的寄存器變量,他的位數(shù)由“msb:lsb”指定。(2)、“integer”:這種性說說明函數(shù)名代表的返回變量是一個整數(shù)型變量。(3)、“real” 如果這項缺省則認為函數(shù)名代表的變量是一個一位的寄存器。在進行函數(shù)定義是必須注意:(1)、與任務一樣,函數(shù)定義結(jié)構(gòu)智能出現(xiàn)在模塊中,而不能出現(xiàn)在過程塊中。(2)、函數(shù)至少需要一個輸入端口。(3)、函數(shù)不能有任何類型的輸出端口和雙向端口。(4)、在函數(shù)定義結(jié)構(gòu)中的行為語句部分內(nèi)不
49、能出現(xiàn)任何類型的時間控制描述,也不允許使用disable中止語句。(5)、與任務定義一樣,函數(shù)定義結(jié)構(gòu)內(nèi)部不能出現(xiàn)過程塊。(6)、在一個函數(shù)內(nèi)可以對其它函數(shù)進行調(diào)用,但是函數(shù)不能調(diào)用其他的任務。(7)、在第一行“function”中不能出現(xiàn)端口名列表。函數(shù)調(diào)用:函數(shù)調(diào)用的格式:<函數(shù)名>(<輸入表達式1><輸入表達式2><><輸入表達式n>)M個<輸入表達式>與函數(shù)定義的結(jié)構(gòu)中說明的各個輸入端口一一對應,他們代表著各個輸入端口的輸入數(shù)據(jù)。這些輸入表達式的排列順序及類型必須與各個端口在函數(shù)定義結(jié)構(gòu)中排列順序及類型保持一致。注
50、意以下兩點:(1)、函數(shù)的調(diào)用不能單獨作為一條語句出現(xiàn),他只能作為一個操作數(shù)出現(xiàn)在調(diào)用語句內(nèi)。如out=getbyte(input、number);在這個函數(shù)語句中,函數(shù)調(diào)用部分“getbyte(input、number)”被看做是一個操作數(shù),這個操作數(shù)的取值是函數(shù)調(diào)用的返回值。在整個調(diào)用過程中,函數(shù)調(diào)用作為“賦值表達式”出現(xiàn)在整條過程賦值語句中,函數(shù)調(diào)用部分不能單獨作為一條語句出現(xiàn)也就是說“getbyte(input、number)”是非法的。(2)、函數(shù)調(diào)用既可以出現(xiàn)在過程塊中,也能出現(xiàn)在assign連續(xù)賦值語句中。如assign net= getbyte(input、number);第四
51、章:用戶自定義元件(UDP)UDP的格式如下:Primitive<元件名稱>(<輸出端口>,<輸入端口1>,<輸入端口2><輸入端口n>)輸出端口類型說明(output);輸入端口類型說明(input);輸出端寄存器變量說明(reg);元件初始狀態(tài)說明(initial);Table<table表項1><table表項2>。<table表項n>EndtableEndprimitive說明:UPD定義模塊不能出現(xiàn)在其他的模塊定義內(nèi),他只能作為一個獨立的模塊。(2)、只有一個輸出端口并且改輸出端口并且改輸
52、出端口必須是端口說明表中的第一項,而UDP的輸入端口樹木可以有一個或幾個,一般對時序電路的UDP最多允許有9個輸入端,對組合電路的UDP最多允許10個輸出端。必須注意在定義UPD元件時所有的輸入端口和輸出端口都只能是一位的(標量)。(3)、輸出端寄存器變量說明是在對時序邏輯UDP元件的進行定義的,為了對輸出端口寄存器變量類型進行說明而引入的。寄存器變量用與描述時序電路UDP中的內(nèi)部狀態(tài)。要注意只有在被定義的元件時時序邏輯元件時才能將輸出端口定義為寄存器類型變量。(4)、元件只允許有0、1、x三種狀態(tài),全省為z。(5)、由關(guān)鍵字“table”和“endtable”界定的多個table表項構(gòu)成了U
53、DP元件定義模塊內(nèi)的一個輸出真值表。在table只允許出現(xiàn)0、1、x三種邏輯值,不允許出現(xiàn)高阻態(tài)“z”,組合邏輯和時序邏輯UDP定義模塊的table表項格是不同的。Table表項構(gòu)成了UDP元件輸入、輸出以及誒不狀態(tài)的一張“邏輯真值表”。對不同邏輯功能的UDP元件進行定義時的差別將體現(xiàn)在不同的table表項描述上。例子;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注釋行用于保
54、證表項中各項的正確/排列順序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定義中智能是一位寬度的標量類型。2、組合邏輯電路UDP對于組合邏輯電路UDP元件的描述相當于直接把電路的邏輯真值表搬到UDP藐視的table表中。組合邏輯電路UDP定義時的table的真值表為:<輸入1邏輯表><輸入2邏輯表><輸入n邏輯表>:<輸入1邏
55、輯表>對于table表格必須注意:各個輸入輸出邏輯值智能是0、1、x和?中的一個,不能去高阻態(tài);輸出端口在primitive定義語句的端口表項中的第一的位置,而在輸出端邏輯值在table表象內(nèi)則是最后一個位置。在表項中藥用空格分隔開不同的輸入端邏輯值,各個輸入端口在table表偶像中的排列順序必須和他們在“primivite”定義語句中端口表象內(nèi)的排列順序保持嚴格一致。為了明確觀察輸入輸出相互關(guān)系的各項排列順序是否正確通常在table表項的第一欄插入一條注釋語句。如上例。在table表中應該盡量把所有的情況都包含進去,當他找不到與其匹配的信息時則輸出端將取不定態(tài)x。3、時序邏輯對時序邏輯
56、UDP進行定義時的table表項格式為:<輸入1邏輯值><輸入2邏輯值>。<輸入n邏輯值>:<內(nèi)部狀態(tài)>:<輸出邏輯值> 輸入邏輯值要用空格分開。在時序邏輯電路中必須增加“輸出端寄存器變啦ing說明”這一項來將輸出端口說明變?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?:?:-;EndtableEndprimitive上升沿觸發(fā)的T觸發(fā)器的UDP描述:Primitive t_trrgger(q,clk,t_in);Output q;Reg q;Input t_in,clk;Table/clkt_in:state:q(01)0:?:-;(01)1:?:1;(01)1:?:0;(10)?:?:-;(0x)0:?:-;(1x)0:?:-;? (?):?:-;Endt
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個人借款協(xié)議財產(chǎn)抵押
- 城市亮化與景觀設計方案
- 智能語音設備銷售及服務合同
- 影視制作服務中版權(quán)糾紛與免責條款的協(xié)議
- 惠州學院教師進修協(xié)議書
- 意向租賃合同年
- 網(wǎng)絡科技業(yè)物聯(lián)網(wǎng)技術(shù)應用與發(fā)展規(guī)劃方案設計
- 喪葬禮儀服務契約合同書
- 農(nóng)業(yè)技術(shù)創(chuàng)新與研發(fā)方案
- 生物制藥研發(fā)項目投資合同
- 體驗店FM述職報告
- 教科版六年級下冊科學第三單元《宇宙》教材分析及全部教案(定稿;共7課時)
- 2024年中國鐵路投資集團有限公司招聘筆試參考題庫含答案解析
- 學校教育中的品牌塑造與校園文化建設培訓課件
- 干部人事檔案數(shù)字化 制度
- 經(jīng)營開發(fā)部工作目標責任書
- 小班繪本教學《藏在哪里了》課件
- 【公司會計信息化建設研究文獻綜述2000字】
- 滄州師范學院學士學位論文寫作指南2020版
- 【高中語文】《中國人民站起來了》課件40張+統(tǒng)編版高中語文選擇性必修上冊
- 手機歸屬地表格
評論
0/150
提交評論