• /  88
  • 下載費用: 29.9積分  

EDA技術與Verilog設計王金明版第6章.ppt

'EDA技術與Verilog設計王金明版第6章.ppt'
第6章 Verilog設計進階 主要內容◆ 過程語句(initial、always)◆ 塊語句(begin-end、fork-join)◆ 賦值語句(assign、=、<=)◆ 條件語句(if-else、case、casez、casex)◆ 循環語句(for、forever、repeat、while)◆ 編譯指示語句(`define、`include、`ifdef、`else、`endif)◆ 任務(task)與 函數(function)◆ 順序執行與并發執行Verilog HDL行為語句類別語句可綜合性過程語句initial always√塊語句串行塊begin-end√并行塊fork-join 賦值語句持續賦值assign√過程賦值=、<=√條件語句if-else√case√ 循環語句for√repeat while forever  編譯向導語句`define√`include√`ifdef, `else, `endif√6.1 過程語句一、initial和always??initial 從0時刻起,順序執行其后的塊語句一次;??always 從0時刻起(若帶有觸發條件的話,則從觸發時刻起),反復執行其后的塊語句多次,僅當碰到諸如$finish之類的結束控制語句之后,才能停止循環過程??initial 過程塊的使用主要是面向功能模擬的,通常用來描述測試模塊的初始化、監視、波形生成等功能;??always過程塊的使用主要是對硬件功能模擬的行為進行描述,也可以在測試模塊用來對時鐘進行描述。利用always過程塊可以實現觸發器、鎖存器和組合電路。一個模塊中可有多個initial和always語句,代表多個過程塊的存在,它們之間相互獨立,并行運行1.always過程語句使用模板always @()begin//過程賦值//if-else,case,casex,casez選擇語句//while,repeat,for循環//task,function調用end“always”過程語句通常是帶有觸發條件的,觸發條件寫在敏感信號表達式中,只有當觸發條件滿足時,其后的“begin-end”塊語句才能被執行。敏感信號表達式“event-expression”敏感信號表達式又稱事件表達式或敏感信號列表,即當該表達式中變量的值改變時,就會引發塊內語句的執行。因此敏感信號表達式中應列出影響塊內取值的所有信號。若有兩個或兩個以上信號時,它們之間用“or”連接。例如:@(a) //當信號a的值發生改變@(a or b) //當信號a或信號b的值發生改變@(posedge clock) //當clock 的上升沿到來時@(negedge clock) //當clock 的下降沿到來時@(posedge clk or negedge reset) //當clk的上升沿到來或reset信號的下降沿到來敏感信號列表舉例(4選1數據選擇器)module mux4_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 or sel) //敏感信號列表case(sel) 2'b00: out=in0; 2'b01: out=in1; 2'b10: out=in2; 2'b11: out=in3; default: out=2'bx;endcaseendmodule敏感信號分為兩類:邊沿敏感型;電平敏感型,每一個always過程最好由一種類型的敏感信號來觸發,而不要將邊沿敏感型和電平敏感型信號列在一起,比如:always @(posedge clk or posedge clr)//邊沿型always @(A or B)//兩個敏感信號都是電平敏感型always @(posedge clk or clr)//不建議這樣用,最好不要將邊沿敏感型和電平敏感型信號列在一起posedge和negedge關鍵字對于時序電路,事件通常是由時鐘邊沿觸發的,為表達邊沿這個概念,Verilog提供了posedge和negedge關鍵字來描述。比如:【例】同步置數、同步清零的計數器module count(out,data,load,reset,clk);output[7:0] out;input[7:0] data;input load,clk,reset;reg[7:0] out;always @(posedge clk) //clk上升沿觸發 begin if(!reset) out=8'h00; //同步清0,低電平有效 else if(load) out=data; //同步預置 else out=out+1; //計數 endendmoduleposedge和negedge關鍵字[email protected](posedge clk or posedge clear) //clear信號上升沿到來時清零,故高電平清零有效[email protected](posedge clk or negedge clear) //clear信號下降沿到來時清零,故低電平清零有效注意:塊內的邏輯描述要與敏感信號表達式中信號的有效電平一致。下面描述錯誤: always @(posedge clk or negedge clear) begin if(clear) out<=0; out<=in; else end 2、always語句: 其聲明格式如下: always always語句包括的所有行為語句構成了一個always塊。該塊從仿真0時刻開始順序執行其中的語句。在仿真過程中不斷重復執行的。   always語句由于其不斷重復執行的特性,只有和一定的時序控制結合在一起才有用。如果一個always語句沒有時序控制,則這個always語句將會成為一個仿真死鎖。[例]:always areg = ~areg; 這個always語句將會生成一個0延遲的無限循環跳變過程,這時會發生仿真死鎖。 如果加上時序控制,則這個always語句將變為一條非常有用的描述語句。見下例: [例]:always #half_period areg = ~areg; 這個例子生成了一個周期為:period(=2*half_period) 的無限延續的信號波形,常用這種方法來描述時鐘信號,作為激勵信號來測試所設計的電路。 Verilog提供三種時序控制方法:基于延遲的。省略部分。選的,它用來對函數調用返回數據的類型或寬度進行說明(這個數據是通過函數名返回的),它可以有如下形式:     “[msb:lsb]”:這種形式說明函數名所代表的返回數據變量是一個多位的寄存器變量,它的位數由[msb:lsb]指定,比如如下函數定義語句:  function [7:0] adder;   就定義了一個函數“adder”,它的函數名“adder”還代表著一個8位寬的寄存器變量,其最高位為第7位,最低位為第0位。函數的主要特性函數定義中不能包含任何時序控制語句。函數至少有一個輸入,不能包含任何輸出或雙向端口。函數只返回一個數據,其缺省為reg類型。傳送到函數的參數順序和函數輸入參數的說明順序相同。函數在模塊(module)內部定義。函數不能調用任務,但任務可以調用函數。函數舉例function[7:0] get0;input[7:0] x;reg[7:0] count;integer i; begin count=0; for (i=0;i<=7;i=i+1) if(x[i]=1'b0) count=count+1; get0=count; endendfunction 上面的get0函數循環核對輸入數據x的每一位,計算出x中0的個數,并返回一個適當的值?! ≡谶M行函數定義時必須注意:  (1) 與任務一樣,函數定義結構只能出現在模塊中,而不能出現在過程塊內?! ?2) 函數至少必須有一個輸入端口?! ?3) 函數不能有任何類型的輸出端口(output端口)和雙向端口(inout端口)?! ?4) 在函數定義結構中的行為語句部分內不能出現任何類型的時間控制描述,也不允許使用disable終止語句?! ?5) 與任務定義一樣,函數定義結構內部不能出現過程塊?! ?6) 在一個函數內可以對其它函數進行調用,但是函數不能調用其它任務?! ?7) 在第一行“function”語句中不能出現端口名列表?! ?. 函數的調用  函數調用的格式如下:   (,,……, );其中,m個“”與函數定義結構中說明的各個輸入端口一一對應,它們代表著各個輸入端口的輸入數據。這些輸入表達式的排列順序及類型必須與各個輸入端口在函數定義結構中的排列順序及類型保持嚴格一致?! ≡谡{用函數時必須注意如下兩點:  (1) 函數的調用不能單獨作為一條語句出現,它只能作為一個操作數出現在調用語句內?! ±?,下面這條語句對前面所定義的函數“getbyte”進行了調用:  out = getbyte( input1,number);  在這條調用語句中,函數調用部分“getbyte( input1,number)”被看作是一個操作數,這個操作數的取值就是函數調用的返回值。在整個調用語句中,函數調用部分是作為“賦值表達式”出現在整條過程賦值語句中的,函數調用部分不能單獨地作為一條語句出現,這就是說語句“getbyte(input1,number);”是非法的。函數舉例module code_83(din,dout);input[7:0] din;output[2:0] dout;function[2:0] code;input[7:0] din; casex(din) 8`b1xxx_xxxx:code=3`h7; 8`b01xx_xxxx:code=3`h6; 8`b001x_xxxx:code=3`h5; 8`b0001_xxxx:code=3`h4; 8`b0000_1xxx:code=3`h3; 8`b0000_01xx:code=3`h2; 8`b0000_001x:code=3`h1; 8`b0000_000x:code=3`h0; default:code=3`hx;endfunctionassign dout=code(din);endmodule 函數舉例module funct(clk, n, result,reset);input reset, clk;input[3:0] n;output[31:0] result;reg[31:0] result;[email protected](posedge clk) begin if(!reset) result<=0;else begin result<=2*factorial(n); endendfunction[31:0] factorial;Input [3:0] opa;reg[3:0] i; begin factorial=opa?1:0; for(i=2;i<=opa;i=i+1) factorial=i*factorial;endendfunction任務與函數的比較 6.8 順序執行與并發執行兩個或更多個“always”過程塊、“assign”持續賦值語句、實例元件調用等操作都是同時執行的。在“always”模塊內部,其語句如果是非阻塞賦值,也是并發執行的;而如果是阻塞賦值,則語句是按照指定的順序執行的,語句的書寫順序對程序的執行結果有著直接的影響。順序執行的例子順序執行模塊1module serial1(q,a,clk);output q,a;input clk;reg q,a;always @(posedge clk) begin q=~q; a=~q; endendmodule順序執行模塊2module serial2(q,a,clk);output q,a;input clk;reg q,a;[email protected](posedge clk) begin a=~q; q=~q; endendmodule順序執行順序執行模塊1仿真波形圖 順序執行模塊2仿真波形圖 順序執行模塊1綜合結果順序執行模塊2綜合結果思考與練習 6-1 試編寫求補碼的Verilog程序,輸入是帶符號的8位二進制數。 6-2 試編寫兩個四位二進制數相減的Verilog程序。6-3 有一個比較電路,當輸入的一位8421BCD碼大于4時,輸出為1,否則為0。試編寫出Verilog程序。6-4 試編寫一個實現3輸入與非門的Verilog源程序。6-5 用Verilog語言設計一個類似74138的譯碼器電路,用Synplify軟件對設計文件進行綜合,觀察RTL級綜合視圖和門級綜合視圖。6-6 用Verilog語言設計一個功能類似74161的電路,用Synplify軟件對設計文件進行綜合,觀察RTL級綜合視圖和門級綜合視圖。6-7 用Verilog設計一個8位加法器,用Quartus II軟件進行綜合和仿真。6-8 用Verilog設計一個8位計數器,用Quartus II軟件進行綜合和仿真。
關 鍵 詞:
設計 eda 技術 verilog 金明
 天天文庫所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
關于本文
本文標題:EDA技術與Verilog設計王金明版第6章.ppt
鏈接地址: http://www.094347.live/p-51052597.html
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服點擊這里,給天天文庫發消息,QQ:1290478887 - 聯系我們

本站為“文檔C2C交易模式”,即用戶上傳的文檔直接賣給(下載)用戶,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有【成交的100%(原創)】。本站是網絡服務平臺方,若您的權利被侵害,侵權客服QQ:1290478887 歡迎舉報。

[email protected] 2017-2027 http://www.094347.live 網站版權所有

粵ICP備19057495號 

收起
展開
有没有苹果软件赚钱的 北京快三开奖结果全部 江西多乐彩玩法 辽宁35选7走势图二元网 黑龙江6加1开奖 黑龙江快乐十分前三组预测 浙江6+1开奖号3636027是那期 3D过滤器下载安装 外汇理财是传销吗 上证指数吧东方财富网吧 福建快三走势图彩经网