版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、Verilog HDL語言初步,主講 楊全勝東南大學計算機科學與工程學院,P.1,計算機系統(tǒng)綜合課程設(shè)計,第一部分 Verilog HDL語言§1 綜述,一. 什么是硬件描述語言?,P.2,硬件描述語言是一種用文本形式來描述和設(shè)計電路的語言。是硬件設(shè)計人員和電子設(shè)計自動化(EDA)工具之間的界面。,P.3,功能:1)編寫設(shè)計文件;2)建立電子系統(tǒng)行為級的仿真模型;3)自動綜合以生成符合要求且在電路
2、結(jié)構(gòu)上可以實現(xiàn)的數(shù)字邏輯網(wǎng)表(Netlist);4)寫入到CPLD和FPGA器件中。,二.為什么要用HDL?,P.4,1、電路設(shè)計的規(guī)模越來越大,復(fù)雜度越來越高。2、電子領(lǐng)域的競爭越來越激烈,開發(fā)周期要短。3、調(diào)試電路速度快。不必修改電路原理圖原型,只需要對HDL進行修改。4、易于理解,易于維護。5、有許多易于掌握的仿真、綜合和布局布線工具。,三、Bottom Up和 Top down的設(shè)計方法,P.5,1. Bottom U
3、p的設(shè)計方法,P.6,?傳統(tǒng)的電路系統(tǒng)設(shè)計方法的步驟:1.采用自下而上的設(shè)計方法-從狀態(tài)圖的簡化,寫出最簡邏輯表達式;2. 采用通用邏輯元器件-通常采用74系列和CMOS4000系列的產(chǎn)品進行設(shè)計; 3.在系統(tǒng)硬件設(shè)計的后期進行調(diào)試和仿真 ; 只有在部分或全部硬件電路連接完畢,才可以進行電路調(diào)試,一旦考慮不周到,系統(tǒng)設(shè)計存在較大缺陷,則要重新設(shè)計,使設(shè)計周期延長。 4.設(shè)計結(jié)果是一張電路圖 ; 當設(shè)計調(diào)試完畢后,形成電原
4、理圖,該圖包括元器件型號和信號之間的互連關(guān)系等等,P.7,優(yōu)點:1.設(shè)計人員對于用這種方法進行設(shè)計比較熟悉;2.實現(xiàn)各個子塊電路所需的時間短。缺點:1.一般來講,對系統(tǒng)的整體功能把握不足;2.實現(xiàn)整個系統(tǒng)的功能所需的時間長,因為必須先 將各個小模塊完成,使用這種方法對設(shè)計人員之間相互進行協(xié)作有比較高的要求。,P.8,2. Top down 的設(shè)計方法,Top down 的設(shè)計方法的特點:,P.9,從系統(tǒng)層開始設(shè)計和優(yōu)化,保
5、證了設(shè)計結(jié)果的正確性適合復(fù)雜的、大規(guī)模電路的設(shè)計縮短設(shè)計周期依賴于先進的EDA設(shè)計工具和環(huán)境,費用昂貴需要精確的工藝庫支持,四.設(shè)計過程,P.10,§2 Verilog HDL設(shè)計初步,P.11,內(nèi)容簡介Verilog HDL與C語言的比較Verilog模塊的基本結(jié)構(gòu)邏輯功能的定義,一. Verilog HDL與C語言的比較,P.12,Verilog HDL是在C語言基礎(chǔ)上發(fā)展起來的,保留了C語言的結(jié)構(gòu)特點。,
6、但C語言的各函數(shù)之間是串行的,而Verilog的各個模塊間是并行的,Verilog HDL與C語言運算符的比較,P.13,二. Verilog模塊的基本結(jié)構(gòu),P.14,由關(guān)鍵詞module和endmodule定義,P.15,1.模塊聲明,module——關(guān)鍵詞模塊名—— 模塊唯一的標識符端口列表——是由輸入、輸出和雙向端口的端口表達式按一定的次序組成的一個列表,它用來指明模塊所具有的端口,這些端口用來與其它模塊進行連接。,P.16,
7、2. 端口定義,又稱“端口聲明語句”,用來進行端口方向的說明。 Verilog語言中有如下三種端口聲明語句:1)input——對應(yīng)的端口是輸入端口2 )output——對應(yīng)的端口是輸出端口3 )inout——對應(yīng)的端口是雙向端口,P.17,3. 數(shù)據(jù)類型說明,用來指定模塊內(nèi)用到的數(shù)據(jù)對象的類型。wire——連線型wire A,B,C,D;//定義信號A~D為wire型reg——寄存器型reg [3:0] out;//定義
8、信號out的數(shù)據(jù)類型為 4位reg型,缺省數(shù)據(jù)類型為wire型,P.18,4. 邏輯功能定義,模塊中最核心部分,有三種方法可在模塊中產(chǎn)生邏輯。1)用“assign”持續(xù)賦值語句定義例: assign a = b & c;2)調(diào)用元件(元件例化) 類似于在電路圖輸入方式下調(diào)入圖形符號完成設(shè)計。,P.19,元件例化的格式為:門元件名 ();,例:調(diào)用模
9、塊的例子,module MUX2-1 (out,a,b,sel);output out;input a,b,sel;not (sel_,sel);and (a1,a,sel _);and ( b1,b,sel);or (out,a1,b1);endmodule,P.20,設(shè)計師自己設(shè)計的各種模塊也可以看作元件,被頂層文件或其他文件調(diào)用:模塊名 ();端口列表有兩種表示方式,第一種方式顯式給出端
10、口與信號之間的對應(yīng)關(guān)系:(.端口名(信號值表達式), .端口名(信號值表達式),……)第二種方法是隱式給出端口與信號之間的關(guān)系:(信號值表達式, 信號值表達式,……)這種方式下,例化的端口列表中信號的順序要與該模塊定義中的端口列表中端口順序嚴格一致。而第一種方法則無此要求。,P.21,舉例:由1位全加器組成的4位全加器,module full_add (a,b,cin,sum,cout); input a,b,cin;
11、 output sum,cout; assign {cout,sum} = a+b+cin;endmodulemodule add4(sum,cout,a,b,cin); output [3:0] sum; output cout; input [3:0] a,b; input cin;,P.22,wire cin1,cin2,cin3; full_add f0 (a[0],b[0],c
12、in,sum[0],cin1); full_add f1 (a[1],b[1],cin1,sum[1],cin2); full_add f2 (.a(a[2]),.b(b[2]),.cin(cin2), .sum(sum[2]),.cout(cin3)); full_add f3 (.cin(cin3),.a(a[3]),.b(b[3]),
13、 .cout(cout),.sum(sum[3]));endmodule,P.23,3)用“always”過程塊賦值,例:always @ (posedge clk) beginif(reset) out=0;else out=out+1; end,過程塊、持續(xù)賦值語句與實例應(yīng)用要點總結(jié):,P.24,在Verilog模塊中,所有的過程塊(如initial、alwa
14、ys)、持續(xù)賦值語句、實例引用之間都是并行的;它們表示的是一種通過變量名互相連接的關(guān)系;在同一模塊中這三者出現(xiàn)的先后順序沒有關(guān)系;只有持續(xù)賦值語句assign和實例引用語句可以獨立于過程塊而存在于模塊的功能定義部分。,§3 Verilog HDL語言要素,P.25,內(nèi)容簡介詞法數(shù)據(jù)類型寄存器和存儲器運算符,一. 詞法,P.26,空白符(間隔符)包括:空格(\b)、tab(\t)(制表符)、換行符(\n)及換
15、頁符。空白符使代碼錯落有致、閱讀方便。綜合時,空白符被忽略。但是在字符串中空白和制表符會被認為是有意義的字符。,P.27,Verilog程序可以不分行:initial begin ina=3'b001;inb=3'b011; end也可以加入空白符采用多行編寫:initial begin ina=3'b001; inb=3'b011; end,P.28,注釋
16、有兩種注釋形式:單行注釋:以//開始到本行結(jié)束。多行注釋:以/*開始到*/結(jié)束。,/*舉例說明*/module addbit(a,b,ci,sum,co);//輸入端口input a;input b;…….,P.29,3. 數(shù)字與字符串,Verilog HDL有下面4種基本邏輯狀態(tài):0——低電平、邏輯0或“假”1——高電平、邏輯1或“真”X——未知狀態(tài)Z——高阻態(tài),X、Z不分大小寫,P.30,1)整數(shù)有
17、4種進制表示形式: 二進制整數(shù)(b或B) 十進制整數(shù)(d或D) 十六進制整數(shù)(h或H) 八進制整數(shù)(o或O),常數(shù)按照其數(shù)值類型可以劃分為整數(shù)和實數(shù)兩種,P.31,數(shù)字表達方式有以下3種: ,舉例:8'b11000101 //位寬為8位的二進制數(shù)8'hd5 //位寬為8位的十六進制數(shù)d5H5'o27 //位寬為5位的八進制數(shù)27O
18、,P.32,4'B1X_01//4位二進制數(shù)1X015'HX//5位十六進制數(shù)XX4'hz//4位十六進制數(shù)z8'h 2 A//位寬與字符間允許有空格-8‘D5//8位二進制數(shù),-5的補碼,X可以用來定義十六進制數(shù)的4位二進制狀態(tài),八進制數(shù)的3位,二進制數(shù)的1位。Z的表示方法同X類似。,P.33,數(shù)值常量中的下劃線“_”是為了增加可讀性,可以忽略。如8'b110
19、0_0110表示8位二進制數(shù)。數(shù)值常量中的“?”表示高阻狀態(tài)。例:2'B1?表示2位的二進制數(shù)其中的一位是高 阻狀態(tài)。,P.34,如果沒有定義一個整數(shù)型的長度,數(shù)的長度為相應(yīng)值中定義的位數(shù)。下面是兩個例子:'o721 //9位2進制位寬的八進制數(shù)'hAF //8位2進制位寬的十六進制數(shù)如果定義的長度比為常量指定的長度長,通常在左邊填0補位。但是如果數(shù)最左邊一位為x或z,就
20、相應(yīng)地用x或z在左邊補位。例如:10'b10 左邊添0占位, 0000000010 10'bx0x1 左邊添x占位,xxxxxxx0x1,,,P.35,如果定義的位寬比實際的位數(shù)小,那么最左邊的位相應(yīng)地被截斷:3'b1001_0011 //與3'b011相等5'h0FFF //與5'h1F相等,P.36,2)實數(shù)有兩種表示方法: 十進制表示方法
21、 2.0 5.67 2. //非法:小數(shù)點兩側(cè)必須有數(shù)字 科學計數(shù)法 43_5.1e2//43510.0(下劃線忽略) 9.6E2//960.0 5E-4//0.0005,P.37,下面的幾個例子是無效的格式:.253.7.E3.8e-2,實數(shù)可以轉(zhuǎn)化為整數(shù),根據(jù)四舍五入的原則,而不是截斷原則,當將實數(shù)賦給一個整數(shù)時,這種轉(zhuǎn)化會自行發(fā)
22、生,例如:在轉(zhuǎn)化成整數(shù)時,實數(shù)25.5和25.8都變成26,而25.2則變成25。,P.38,3)字符串字符串是雙引號內(nèi)的字符序列,不能分成多行書寫。若字符串用做Verilog HDL表達式或賦值語句中的操作數(shù),則字符串被看作8位似的ASCII值序列,每一個字符對應(yīng)8位ASCII值。,P.39,例1:字符串變量聲明reg [8*12:1] stringvar;initial begin string
23、var=“hello world!”; end,P.40,轉(zhuǎn)意符:,P.41,4. 標識符,Verilog HDL中的標識符可以是任意一組字母、數(shù)字以及符號“$”和“_ ”(下劃線)的組合,但是標識符的第一個字符必須是字母或下劃線。標識符是區(qū)分大小寫的。,合法標識符:count_A1_d2COUNTR56_68,非法標識符:30 count//標識符不允許以數(shù)字開頭out *//標識符中
24、不允許包含*,P.42,5. 關(guān)鍵字,Verilog HDL內(nèi)部已經(jīng)使用的詞稱為關(guān)鍵字或保留字。這些關(guān)鍵字用戶不能隨便使用。在編寫程序時,變量的定義不要與這些關(guān)鍵詞沖突。,所有的關(guān)鍵字都是小寫,二. 數(shù)據(jù)類型,P.43,Verilog HDL中共有19種數(shù)據(jù)類型。數(shù)據(jù)類型是用來表示數(shù)字電路硬件中的數(shù)據(jù)儲存和傳送元件的。這里主要介紹4種最基本的數(shù)據(jù)類型。,連線型(Net Type)net type 相當于硬件電路中的各種物
25、理連線。,P.44,Net Type的變量不能存儲值,而且必須受到驅(qū)動器的驅(qū)動。兩種驅(qū)動方式:1)在結(jié)構(gòu)描述中將它連接到一個邏輯門或模塊的輸出端。2)用持續(xù)賦值語句assign對其進行賦值。,特點:輸出的值緊跟輸入值的變化而變化。,當沒有驅(qū)動源對其驅(qū)動時,它將保持高阻態(tài)。,P.45,為了能夠精確地反映硬件電路中各種可能的物理信號連接特性, Verilog HDL提供了多種連線型數(shù)據(jù)。常用的有wire型和tri型。這兩種變
26、量都用于連接器件單元,它們具有相同的語法格式和功能。,wire型變量:通常用來表示單個門驅(qū)動或連續(xù) 賦值語句驅(qū)動的連線型數(shù)據(jù)。tri型變量:通常用來表示多驅(qū)動器驅(qū)動的連線 型數(shù)據(jù)。,P.46,wire型變量的格式:wire [n-1:0] 數(shù)據(jù)名1,數(shù)據(jù)名2,……,數(shù)據(jù)名n;,wire——wire型數(shù)據(jù)確認符;[n-1:0]——代表該數(shù)據(jù)的
27、位寬。缺省狀態(tài),位寬 默認值為1。這里的位是二進制的位。數(shù)據(jù)名——若一次定義多個數(shù)據(jù),數(shù)據(jù)名之間 用逗號隔開。聲明語句的最后用分號表示語句的結(jié)束。,P.47,例1. 定義數(shù)據(jù)總線寬8位,地址總線寬20位。wire[7:0] databus;// databus寬8位wire[19:0] addrbus;// addrbus寬20位或:
28、wire[8:1] databus;wire[20:1] addrbus;,wire a;//定義了一個1位的wire型數(shù)據(jù),P.48,例2. 多位wire 型數(shù)據(jù)可按下面方法使用wire[7:0] in, out;//定義兩個8位wire型向量assign out=in;// assign 就是持續(xù)賦值語句,例3. 可只使用多位數(shù)據(jù)中的幾位,但要注意 位寬。wire[7:0] out;
29、wire[3:0] in;assign out[5:2]=in;,P.49,說明:1) wire 型變量常用來表示以assign語句賦值的組合邏輯信號。2)輸入/輸出信號缺省時自動定義為wire 型。3)對綜合器而言, wire 型信號的每一位可以取0,1,X或Z中的任意值。,P.50,2. 寄存器型(Register Type)寄存器是數(shù)據(jù)存儲單元的抽象。寄存器型數(shù)據(jù)對應(yīng)的是具有狀態(tài)保持作用的硬件電路,如觸
30、發(fā)器、鎖存器等。,寄存器型數(shù)據(jù)和連線型數(shù)據(jù)的區(qū)別:寄存器型數(shù)據(jù)保持最后一次的賦值。而連線型數(shù)據(jù)需有持續(xù)的驅(qū)動。,P.51,reg ——常用的寄存器型變量reg型數(shù)據(jù)的格式:reg [n-1:0] 數(shù)據(jù)名1,數(shù)據(jù)名2,…數(shù)據(jù)名n;,例1. reg a, b;//定義了兩個reg型變量reg [7:0] qout; //定義qout為8位寬的reg
31、 型變量,P.52,說明:1) reg型數(shù)據(jù)常用來表示“always”模塊內(nèi)的指定信號,常代表觸發(fā)器。在“always”模塊內(nèi)被賦值的每一個信號都必須定義成reg型。2)對于reg型數(shù)據(jù),其賦值語句的作用就如同改變一組觸發(fā)器的存儲單元的值。3)若reg型數(shù)據(jù)未初始化(即缺?。瑒t初始值為不定狀態(tài)。,P.53,3. 參數(shù)型(parameter),在Verilog HDL中,用parameter來定義常量,即用它
32、來定義變量的位寬及延時等。,格式:parameter 參數(shù)名1=表達式1,參數(shù)名2=表達式2,…;,parameter常用來定義延遲時間和變量寬度。,P.54,例:parameter e=2,f=9;//定義兩個常數(shù)參數(shù)parameter r=5.7;//定義r為一個實型參數(shù)parameter a_delay=(r+f)/2;//用常數(shù)表達式賦值,三. 寄存器和存儲器,P.55,用reg類型變量可構(gòu)成寄存器
33、和存儲器寄存器reg [7:0] mybyte;A= mybyte[6];//將mybyte的第6位賦值給AB= mybyte[5:2];//將mybyte的第5,4,3,2 位賦值給B,P.56,例:reg [7:0] a,b;reg [3:0] c;reg d;d=a[7]&b[7];//位選擇c=a[7:4]+b[3:0];
34、//域選擇,寄存器可以取任意長度。寄存器中的值通常被解釋為無符號數(shù)。,P.57,2. 存儲器 Verilog HDL通過對reg型變量建立數(shù)組來對存儲器建模,可以描述RAM型存儲器、ROM存儲器和reg 文件。數(shù)組中的每一個單元通過一個數(shù)組索引進行尋址。在Verilog語言中沒有多維數(shù)組存在,memory型數(shù)據(jù)是通過擴展reg型數(shù)據(jù)的地址范圍來生成的。,P.58,格式:reg [n-1:0] 存儲器名[m-1:0]
35、;或reg [n-1:0] 存儲器名[m:1];,reg [n-1:0] :定義了存儲器中每一個存儲單元的大小。[m-1:0]:定義了該存儲器中有多少個這樣的單元。,P.59,例1. 定義一個存儲器,1024個字節(jié),每個字節(jié) 8位。reg [7:0] mymem[1023:0];例2. 存儲器與寄存器的區(qū)別reg [n-1:0] rega;//一個n位的寄存器reg mema[n-1:
36、0];//n個一位寄存器組成的存 儲器組reg [3:0] Amem[63:0];,P.60,說明:1)數(shù)組的維數(shù)不能大于2。2)存儲器屬于寄存器數(shù)組類型。連線數(shù)據(jù)類 型沒有相應(yīng)的存儲器類型。3)單個寄存器說明既能夠用于說明寄存器類 型,也可以用于說明存儲器類型。,P.61,例:parameter ADDR_SIZE =
37、 16 , WORD_SIZE = 8;reg [WORD_SIZE:1] RamPar [ ADDR_SIZE- 1 : 0],DataReg;RamPar——存儲器,是16個8位寄存器數(shù)組;DataReg——8位寄存器。,P.62,4)在賦值語句中需要注意如下區(qū)別:存儲器 賦值不能在一條賦值語句中完成,但是寄 存器可以。因此在存儲器被賦值時,需要定 義一個索引。下例說明它們之間
38、的不同。,reg [5:1] Dig; // Dig為5位寄存器。. . .Dig = 5'b11011; // 賦值正確,reg BOg[5:1]; // Bog為5個1位寄存器組成的的存儲器組. . .Bog = 5'b11011; // 賦值不正確,P.63,有一種存儲器賦值的方法是分別對存儲器中的每個字賦值。例如:reg [3:0] Xrom [4:1];Xrom[1] =
39、 4'hA;Xrom[2] = 4'h8;Xrom[3] = 4'hF;Xrom[4] = 4'h2;,四. 運算符,P.64,Verilog語言參考了C語言中大多數(shù)運算符的語義和句法。但Verilog中沒有增1(i++)和減1 (i– –)運算符。,1. 算術(shù)運算符,+(一元加和二元加)-(一元減和二元減)*(乘) /(除)%(取模),P.65,說明:1)兩個整數(shù)相除,結(jié)果值要略去小
40、數(shù)部分,只取整數(shù)部分;2)取模運算時,結(jié)果的符號位采用模運算式里第一個操作數(shù)的符號位;,P.66,3)在進行算術(shù)運算操作時,如果某個操作數(shù)有不確定的值X或Z,那么整個結(jié)果為X。例:'b10x1 + 'b01111 結(jié)果為不確定數(shù)'bxxxxx4)無符號數(shù)和有符號數(shù)若操作數(shù)為寄存器型或連線型,或基數(shù)格式表示形式的整數(shù)則為無符號數(shù);若為整型或?qū)嵭?,則可以是有符號數(shù)。,P.67,例:reg [5:0]
41、Bar;integer Tab;. . .Bar = -6'd12;//寄存器變量Bar的十進制數(shù)為 52,向量值為110100。Tab = -6'd12;//整數(shù)Tab的十進制數(shù)為-12,位 形式為110100。,P.68,5)算術(shù)操作結(jié)果的長度算術(shù)表達式結(jié)果的長度由最長的操作數(shù)決定。在賦值語句下
42、,算術(shù)操作結(jié)果的長度由操作符左端目標長度決定。reg [3:0] Arc, Bar, Crt;reg [5:0] Frx;. . . Arc = Bar + Crt;Frx = Bar + Crt;,P.69,例:算術(shù)運算符應(yīng)用的一個例子。module arithmetic (a,b,out1,out2,out3, out4,out5) i
43、nput [2:0] a ,b; output [3:0] out1 ; output [4:0] out3 ; output [2:0] out2 , out4,out5 ; reg [3:0] out1 ; reg [4:0] out3 ; reg [2:0] out2 , out4,out5 ;,P.70,always @ (a or b)begin
44、 out1=a+b ; out2=a-b ; out3=a*b ; out4=a/b ; out5=a%b ;endendmodule,P.71,2. 邏輯運算符,邏輯運算符有3種:&& (邏輯與) || (邏輯或) !(邏輯非),說明:1) && 和|| 為二目運算符,要求有兩個操作數(shù)。例(a>b) && (b>c)
45、, a && b (a<b) ||(b<c) , a || b,P.72,2) !是單目運算符,只要求一個操作數(shù)。例: !(a>b) , ! a 3)在一個邏輯表達式中,如果包含多個邏輯運算符,如:!a&&b||(x>y)&&c按以下優(yōu)先次序:!? && ?||邏輯運算符中,“&
46、amp;& ”和“||”的優(yōu)先級別低于關(guān)系運算符,“!”高于算術(shù)運算符。,P.73,3. 位運算,~ 按位取反; |按位或; &按位與; ^按位異或;,在Verilog語言中有7種位邏輯運算符:,^~或~^按位異或非;~&按位與非;~|按位或非;,P.74,例:若A=5'b11001;B=5'b10101,則:~A=5'b00110A&B= 5
47、'b10001A|B= 5'b11101A^B= 5'b01100,說明:1)按位運算符中,除了“~”為單目運算符外,其余均為雙目運算符。,P.75,2)對于雙目運算符,如果操作數(shù)長度不相等, 長度較小的操作數(shù)在最左側(cè)添0補位。3)無論單目按位運算符還是雙目按位運算符,經(jīng)過按位運算后,原來的操作數(shù)有幾位,所得結(jié)果仍為幾位。4)不要將邏輯運算符和按位運算符相混淆。,P.76,4. 關(guān)系運算符,
48、Verilog關(guān)系運算符有:>(大于)=(大于等于)<=(小于等于),P.77,例:關(guān)系運算符應(yīng)用的一個例子。module relation (a,b,out1,out2,out3,out4) input [2:0] a ,b; output out1 ,out2,out3,out4 ; reg out1,out2,out3,out4 ; always @ (a o
49、r b)begin out1=ab ; if (a>=b) out4=1 else out4=0 endendmodule,P.78,說明:1)在進行關(guān)系運算時,若聲明的關(guān)系為“假”,則返回值是“0”;若聲明的關(guān)系為“真”,則返回值是“1”;2)若某個操作數(shù)的值不定,則關(guān)系是模糊的,返回值是不定值。3)所有關(guān)系運算符有著相同的優(yōu)先級別。關(guān)
50、系運算符的優(yōu)先級別低于算術(shù)運算符。,P.79,5. 等式運算符,等式運算符有4種= =(等于)!=(不等于)= = =(全等)!= =(非全等),,雙目運算符,要求有兩個操作數(shù),得到的結(jié)果是1位的邏輯值。聲明的關(guān)系為真,結(jié)果為1;聲明的關(guān)系為假,結(jié)果為0;,P.80,“==”與“===”的區(qū)別:,相等運算符真值表,全等運算符真值表,P.81,6. 縮位運算符(歸約運算符),單目運算符,也有與、或、非運算。包括下面幾種:&
51、amp;——與 ~&——與非 | ——或 ~| ——或非 ^——異或 ^~,~^——同或,P.82,其與、或、非運算規(guī)則類似于位運算符的運算規(guī)則,但其運算過程不同。,對操作數(shù)的相應(yīng)位進行與、或、非運算,操作數(shù)是幾位數(shù),則運算結(jié)果是幾位。,位運算:,縮位運算:,對單個操作數(shù)進行與、或、非遞推運算,最后的運算結(jié)果是1位的二進制數(shù)。,P.83,具體運算過程:第一步:先將操作數(shù)的第1位與第2位進行與、
52、 或、非運算;第二步:將運算結(jié)果與第3位進行與、或、非 運算,依次類推,直至最后一位。,例:reg[3:0] a; b=&a;,若:A=5'b11001則:&A=0; |A=1;,P.84,7. 移位運算符,>> ——右移<< ——左移,使用方法: a>>n 或
53、 a<<na——代表要進行移位的操作數(shù);n ——代表要移幾位,這兩種移位運算都用0來填補移出的空位,P.85,module shift; reg[3:0] start, result;initialbigin start=1; result= (start<<2);endendmodule,P.86,8. 條件運算符,? : —— 條件運算符,有三個操作數(shù)
54、,與C 語言相同。,格式:信號=條件 ? 表達式1 : 表達式2;,當條件成立時,信號取表達式1的值,反之取表達式2的值。,P.87,module add_or_sub(a,b,op,result); parameter ADD=1'b0; input [7:0] a,b; input op; output [7:0] result;
55、 assign result=(op== ADD)?a+b:a-b; endmodule,P.88,9. 位拼接運算——{ },這是一個特殊的運算符,這一運算符可以將兩個或更多個信號的某些位并接起來進行運算操作。其使用方法是把某些信號的某些位詳細地列出來,中間用逗號分開,最后用大括號括起來表示一個整體信號。,格式:{信號1的某幾位,信號2的某幾位,…,信號n的某幾位},P.89,例:wire [7:0] Dbus;
56、 wire [11:0] Abus; assign Dbus [7:4] = {Dbus [0], Dbus [1], Dbus[2], Dbus[3]};//以反轉(zhuǎn)的順序?qū)⒌投?位賦給高端4位。 assign Dbus = {Dbus [3:0], Dbus [7:4]};//高4位與低4位交換。,P.90,由于非定長常數(shù)的長度未知, 不允許連接非定長常數(shù)。例如, 下列式子非法:{Dbus
57、,5} //不允許連接操作非定長常數(shù)。,P.91,運算符優(yōu)先級排序:,! ~* / %+ -> >=== != === !==&^ ^~|&&||?:,高優(yōu)先級別,低優(yōu)先級別,,§4 Verilog HDL行為語句,P.92,內(nèi)容簡介過程語句塊語句賦值語句條件語句循環(huán)語句編譯向?qū)дZ句,P.93,Verilog HDL是由模塊
58、組成的,一. 過程語句,P.94,1. always過程語句,P.95,格式:always @(敏感信號表達式)begin//過程賦值//if-else,case,casex,casez選擇語句//while,repeat,for循環(huán)//task,function調(diào)用end,,過程塊,可選項,P.96,1)敏感信號——只要表達式中某個信號發(fā)生變化,就會引發(fā)塊內(nèi)語句的執(zhí)行。,@ (a)
59、 //當信號a的值發(fā)生變化時@ (a or b) //當信號a或b的值發(fā)生變化時@ (posedge clock) //當clock上升沿到來時@ (negedge clock) //當clock下降沿到來時@ (posedge clk or negedge reset)//當clk的上升沿或reset的下降沿到來時,P.97,module mux
60、4_1(out,in0,in1,in2,in3,sel);output out;input in0,in1,in2,in3 ;input [1:0] sel;reg out;always @ (in0 or in1 or in2 or in3) case (sel)2'b00:out=in0 ;2'b01:out=in1 ;,P.98,2'b10:out=in2 ;
61、2'b11:out=in3 ; default :out=2'bx ; endcaseendmodule,P.99,2) posedge 與 negedge 關(guān)鍵字,例1:同步置數(shù)、同步清零的計數(shù)器module count(out,data,load,reset,clk);output[7:0] out;input [7:0] data ;input load , clk ,
62、 reset;reg [7:0] out;always @ (posedge clk) //clk上升沿觸發(fā)begin,,P.100,if (!reset) out=8'h00 ;//同步清零,低有效else if (load)out=data ;//同步預(yù)置else out=out+1 ;//計數(shù)endendmodule,例2:時鐘信號為clk,clear為異步清零信號alw
63、ays @ (posedge clk or posedge clear)always @ (posedge clk or negedge clear),P.101,錯誤的描述:always @ (posedge clk or negedge clear) begin if (clear)out=0;else out=in; end,//應(yīng)改為if (!clea
64、r),P.102,3)用always過程塊實現(xiàn)組合邏輯功能,敏感信號表達式內(nèi)不能包含posedge 與 negedge 關(guān)鍵字組合邏輯的所有輸入信號都要作為“信號名” 出現(xiàn)在敏感信號表達式中。,P.103,例:有什么問題?module three_and(f,a,b,c);output f;input a,b,c ;reg f;always @ (a or b)begin f=a&b&a
65、mp;c;endendmodule,//應(yīng)改為@ (a or b or c),P.104,4)用always過程塊實現(xiàn)時序邏輯功能,敏感信號表達式內(nèi)可以有posedge 與 negedge 關(guān)鍵字,也可以只有信號名;不要求所有輸入信號都出現(xiàn)在敏感信號列表的“信號名”中。,P.105,module D_FF(Q,D,CLK);output Q;input D,CLK;reg Q;always @(negedge C
66、LK) begin Q = D; endendmodule,例:時鐘下降沿觸發(fā)的D觸發(fā)器,P.106,說明:1)always過程語句后面可以是一個敏感事件列表,該敏感事件列表的作用是用來激活always過程語句的執(zhí)行;2)如果always過程塊中的敏感事件列表缺省,則認為觸發(fā)條件始終被滿足, always過程塊將無條件地循環(huán)執(zhí)行下去,直到遇到$finish或$stop系統(tǒng)任務(wù)為止;3)進行仿真時
67、, always過程塊是從模擬0開始執(zhí)行的,且always語句在仿真過程中是不斷重復(fù)執(zhí)行的;,P.107,4)敏感事件列表由一個或多個“事件表達式”構(gòu)成,事件表達式說明了啟動塊內(nèi)語句執(zhí)行時的觸發(fā)條件,當存在多個事件表達式時要用關(guān)鍵詞or將多個觸發(fā)條件組合起來。Verilog規(guī)定:只要這些事件表達式所代表的多個觸發(fā)條件中有一個成立,就啟動塊內(nèi)語句的執(zhí)行。5)切勿將變量引入敏感信號列表。6)always過程塊和initial過程塊都不能
68、嵌套使用。,P.108,例:不恰當使用always語句而產(chǎn)生仿真死鎖的情況。,alwaysbegin clk=~clk;end,alwaysbegin #50 clk=~clk;end,加上時延控制“#50”產(chǎn)生一個周期為100的方波信號,當敏感信號列表缺省時,語句塊將一直執(zhí)行下去,這就可能在仿真時產(chǎn)生仿真死鎖情況,2. initial過程塊,P.109,P.110,說明:1) initial語句后面
69、沒有“敏感信號列表”;2) initial過程塊中的語句是從模擬0開始執(zhí) 行,它在仿真過程中只執(zhí)行一次,在執(zhí)行 完后,該initial過程塊就被掛起,不再執(zhí) 行;3) initial過程塊的使用主要是面向功能模擬 的,通常不具綜合性。,P.111,例1:用initial過程語句對測試變量A、B、C 賦值。 `timescale 1ns/100ps
70、 module test; reg A,B,C; initialbeginA=0;B=1;C=0;#50 A=1;B=0;,P.112,#50 A= 0;C=1; #50 B=1; #50 B=0;C=0; #50 $finish; endendmodule,P.113,例2:initial過程塊用于對變量和存儲器進行初始化。module
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 計算機系統(tǒng)綜合課程設(shè)計
- 計算機系統(tǒng)綜合課程設(shè)計doc
- 計算機系統(tǒng)綜合課程設(shè)計報告模版doc
- 課程設(shè)計--微型計算機系統(tǒng)設(shè)計
- 計算機組成原理課程設(shè)計---簡單計算機系統(tǒng)設(shè)計與實現(xiàn)
- 計算機組成原理課程設(shè)計---簡單計算機系統(tǒng)設(shè)計與實現(xiàn)
- 計算機組成原理課程設(shè)計--簡單計算機系統(tǒng)設(shè)計與實現(xiàn)
- 計算機系統(tǒng)算法設(shè)計與分析報告課程設(shè)計
- 計算機系統(tǒng)結(jié)構(gòu)課程設(shè)計---簡單16位cpu設(shè)計
- 計算機系統(tǒng)算法設(shè)計與分析報告課程設(shè)計 _0
- 計算機系統(tǒng)結(jié)構(gòu)課程介紹
- 2-計算機系統(tǒng)
- 《高等計算機系統(tǒng)結(jié)構(gòu)》課程大綱
- 計算機系學生信息管理系統(tǒng)課程設(shè)計報告.doc
- 計算機系統(tǒng)-2課程教學大綱
- 計算機系統(tǒng)結(jié)構(gòu)
- 計算機系統(tǒng)結(jié)構(gòu)
- 計算機系統(tǒng)結(jié)構(gòu)
- 第2章 計算機系統(tǒng)結(jié)構(gòu)
- 計算機系統(tǒng)結(jié)構(gòu)論文量子計算機
評論
0/150
提交評論