




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第四章 現(xiàn)場可編程邏輯器件的應(yīng)用設(shè)計技術(shù),4.1 Verilog HDL硬件描述語言,1. 簡單的Verilog HDL例子,首先來看兩個簡單的Verilog HDL程序。一個8位全加器的Verilog HDL源代碼:,module adder8(cout,sum,ina,inb,cin); output7:0 sum; output cout; input 7:0 ina,inb; input cin; assign cout,sum = ina+inb+cin; endmodule,1. 簡單的Verilog HDL例子,從上面的例子可以看出: 1.Verilog HDL巳程序是由模塊構(gòu)成
2、的。每個模塊的內(nèi)容都是嵌在module和endmodule兩個語句之間,每個模塊實現(xiàn)特定的功能,模塊是可以進(jìn)行層次嵌套的。 2.每個模塊首先要進(jìn)行端口定義并說明輸入(input)和輸出(output),然后對模塊的功能進(jìn)行邏輯描述。 3. Verilog HDL程序的書寫格式自由,一行可以寫幾個語句,一個語句也可以分多行寫。,1. 簡單的Verilog HDL例子,4. 除了endmodule語句外,每個語句的最后必須有分號。 5. 可以用/*/ 和 /對Verilog HDL程序的任何 部分作注釋。一個完整的源程序都應(yīng)當(dāng)加上必要的注釋,以增強程序的可讀性和可維護(hù)性。 6. 大小寫敏感; 7.
3、 所有的關(guān)鍵字小寫;,2. Verilog HDL模塊的結(jié)構(gòu),Verilog HDL的基本設(shè)計單元是“模塊(block)”。一個模塊是由兩部分組成的,一部分描述接口;另一部分描述邏輯功能,即定義輸入是如何影響輸出的。下面舉例說明一個“與或非”門電路。,2. Verilog HDL模塊的結(jié)構(gòu),該電路表示的邏輯函數(shù)可以寫為:,用Verilog HDL語言對該電路進(jìn)行描述如下。,module E1(A,B,C,D,F); / 模塊名為E1 (端口列表A,B,C,D) input A,B,C,D; /定義模塊的輸入端口A,B,C,D output F; /定義模塊的輸出端口F assign F = (
4、AB)|(CD); /模塊內(nèi)的邏輯描述 endmodule,2. Verilog HDL模塊的結(jié)構(gòu),從上面的例子可知,電路圖符號的引腳也就是程序模塊的端口,在程序模塊內(nèi)描述了電路圖符號所實現(xiàn)的邏輯功能。在上面的Verilog設(shè)計中,模塊中的第2、第3行說明接口的信號流向,第4行說明了模塊的邏輯功能。,Verilog HDL結(jié)構(gòu)完全嵌在module和endmodule聲明語句之間,每個Verilog程序包括4個主要部分:端口定義,IO說明,信號類型聲明和功能描述。,2. Verilog HDL模塊的結(jié)構(gòu),模塊的端口定義 模塊的端口聲明了模塊的輸入和輸出口。其格式如下: module 模塊名(口1
5、,口2, 口3,); 模塊內(nèi)容 模塊內(nèi)容包括IO說明,信號類型聲明和功能定義, (1) IO說明的格式如下:,2. Verilog HDL模塊的結(jié)構(gòu),輸入口: input 信號位寬1:0 端口名 ; input 信號位寬1:0 端口名1,端口名2 ,端口名N; 輸出口: output 信號位寬1:0 端口名; output 信號位寬1:0 端口名1,端口名2 ,端口名N; 輸入/輸出口: inout 信號位寬1:0 端口名; inout 信號位寬1:0 端口名1,端口名2 ,端口名N;,IO說明的格式,2. Verilog HDL模塊的結(jié)構(gòu),常用的形式為: reg 位寬1:0 變量1,變量2,
6、變量N; wire 位寬1:0 變量1,變量2,變量N;,(2) 信號類型聲明:它是說明邏輯描述中所用信號的數(shù)據(jù)類型及函數(shù)聲明。,2. Verilog HDL模塊的結(jié)構(gòu),對于端口信號的缺省定義類型為wire(連線)型。,如: input1:0 a,b; output 2:0 sum; wire 1:0 a; / a為連線型; reg 2:0 sum; / sum為寄存器型; . /b缺省為連線型;,2. Verilog HDL模塊的結(jié)構(gòu),在一個模塊的開始部分包含模塊的端口聲明和端口類型聲明。 Verilog 2001 標(biāo)準(zhǔn)可以將這兩部分合而為一。 增強的端口聲明實例:,module addr(
7、a,b,sum); input wire 1:0 a, b; output reg 2:0 sum; ,2. Verilog HDL模塊的結(jié)構(gòu),Verilog 2001 標(biāo)準(zhǔn)允許定義模塊時就聲明端口及其類型: 例如: module addr( input wire 1:0 a; input wire 1:0 b; output reg 2:0 sum ); .,3. 邏輯功能定義,邏輯功能描述部分是對數(shù)字電路系統(tǒng)的建模,是Verilog HDL模塊中最重要也是最復(fù)雜的部分。 但其最基本的描述方式只有三種:always、assign和創(chuàng)建模塊實例。 一個Verilog HDL模塊允許使用一種或多
8、種方式描述邏輯功能。,3. 邏輯功能定義,1. 用assign描述邏輯功能 assign語句多用在輸出信號可以和輸入信號建立某種直接聯(lián)系的情況下,這種聯(lián)系通??梢杂眠壿嫳磉_(dá)式或算術(shù)表達(dá)式方式描述。 assign只能用于組合邏輯描述,而不能用于時序邏輯電路。即該語句一般適合于對組合邏輯進(jìn)行賦值,稱為連續(xù)賦值方式。,3. 邏輯功能定義,例用assign描述下述表達(dá)式: X1 = a input a,b; output X1,X2; wire a,b; wire X1,X2; assign X1 = a endmodule,3. 邏輯功能定義,2.用always描述邏輯功能 在Verilog HDL
9、中,由always指定的內(nèi)容將不斷地重復(fù)運行,這恰恰反映出了實際電路的特性在通電的情況下不斷運行。用always可以描述一些比較復(fù)雜的組合邏輯電路及時序邏輯電路。 always在使用時必須加入事件的控制,當(dāng)事件發(fā)生時,執(zhí)行always指定的內(nèi)容。這與上面所說的不斷重復(fù)允許并不矛盾,不斷地重復(fù)運行是指只要事件發(fā)生就會執(zhí)行相關(guān)操作,不論該事件已經(jīng)發(fā)生了多少次。,3. 邏輯功能定義,最常用的兩個事件是電平觸發(fā)和邊沿觸發(fā)。 電平觸發(fā)是指當(dāng)某個信號的電平發(fā)生變化時,執(zhí)行always指定的內(nèi)容; 邊沿觸發(fā)指的是當(dāng)某個信號的上升沿或下降沿到來時,執(zhí)行always指定的內(nèi)容。 為always添加電平觸發(fā)事件或
10、邊沿觸發(fā)事件的方法是在always后面添加“”,之后再跟上事件內(nèi)容, “” 后面的內(nèi)容稱為敏感列表(sensitive list)。,3. 邏輯功能定義,電平觸發(fā)的寫法是在“”后面直接寫觸發(fā)信號的名稱; 邊沿觸發(fā)的寫法是在“”后面寫“posedge 信號名”或者“negedge 信號名”,posedge代表信號的上升沿,negedge代表信號的下降沿。 對于同一個操作,可能有多個觸發(fā)事件,當(dāng)其中的任意一個事件發(fā)生時都要執(zhí)行該操作,那么需要在不同的事件之間添加關(guān)鍵字“or”。,3. 邏輯功能定義,下例為always不正確的使用方法。,module wr1(a,b,out); input a,b;
11、 output out; wire a,b; reg out; always out = a /錯誤使用always endmodule,3. 邏輯功能定義,下例為always正確的使用方法。,module crt1(clk1,clk2,a,b,out1,out2,out3); input clk1,clk2, a,b; output out1,out2,out3; wire clk1,clk2, a,b; reg out1,out2,out3; /當(dāng)clk1的上升沿到來時,令out 1等于a與b; always (posedge clk1) out1 = a,3. 邏輯功能定義,/當(dāng)clk1
12、的上升沿或者clk2的下降沿到來時, always (posedge clk1 or negedge clk2) out2 = a|b; /當(dāng)a或b的值發(fā)生變化時, always (a or b) out3 = a+b; endmodule,3. 邏輯功能定義,敏感列表中可以同時包括多個電平敏感的事件,也可以同時包括多個邊沿敏感的事件,但不可以同時包括電平敏感的事件和邊沿敏感的事件。 敏感列表中,同時包括一個信號的上升沿敏感事件和下降沿敏感事件是不允許的,這兩個事件可以合并為一個電平敏感的事件。,3. 邏輯功能定義,always后面除了可以跟隨電平敏感的事件和邊沿敏感的事件以外,也可以跟隨其他
13、事件,例如延時或者自定義事件。Verilog HDL中,“”為延時符號,后面跟的數(shù)字表示延時多少個基本周期,基本周期是電路仿真的時間單位,其長度由timescale定義。,3. 邏輯功能定義,示例:使用延時事件的always。,timescale 100ns/100ns /定義仿真的基本周期為100ns module delay1(clkout); output clkout; reg clkout; /clkout為輸出時鐘信號,頻率5MHz initial clkout =0; /將輸出初值賦零; /每過100ns時鐘信號翻轉(zhuǎn)一次; always #1 clkout = clkout; e
14、ndmodule,3. 邏輯功能定義,always塊在采用電平敏感事件時,所有的輸入信號,即位于賦值語句等式右邊的信號,都必須在敏感列表中列出,否則有可能發(fā)生錯誤。比如,有一個四輸入與門,其程序為:,module and4(a,b,c,d,out); input a,b,c,d; output out; always (a or b or c or d) out = a endmodule,3. 邏輯功能定義,Verilog 2001對此作了增強,即通過一個符號 “*” 來代替敏感列表的內(nèi)容,表示將所有輸入信號都加入敏感列表。好處是避免疏忽而在敏感列表中漏掉某個信號造成錯誤。則上例可寫為:,m
15、odule and4(a,b,c,d,out); input a,b,c,d; output out; reg out; always * out = a endmodule,3. 邏輯功能定義,Verilog 2001 還有一項對敏感列表的增強,就是用逗號代替原來敏感列表中的關(guān)鍵字or。 如: always (posedge clk or negedge rst) 可以寫成: always (posedge clk , negedge rst),3. 邏輯功能定義,3.利用創(chuàng)建實例來描述邏輯功能 Verilog HDL創(chuàng)建的實例包括模塊實例和原語兩種。 原語(Primitive)也同模塊一樣
16、描述某個特定功能的電路,但與模塊不同,原語是利用真值表來描述電路。 Verilog HDL自身帶有一些原語模型,這些原語描述從門級或開關(guān)級數(shù)字電路中的基本組成部分,如與門(and),與非門(nand),或門(or),或非門(nor),異或門(xor),異或非門(nxor),緩沖器(buf)和非門等。,3. 邏輯功能定義,例如通過原語描述的邏輯門描述一位半加器,module hadd(a,b,carry,sum); input a,b; output carry,sum; xor sum_Z(sum,a,b); and c_Z(carry,a,b); endmodule,3. 邏輯功能定義,Ve
17、rilog HDL允許用戶自定義原語,稱為用戶自定義原語(User Define Primitive ,UDP)。關(guān)于UDP的創(chuàng)建規(guī)則見后續(xù)部分。,用創(chuàng)建模塊實例來描述邏輯功能。利用創(chuàng)建模塊實 例來描述邏輯功能的方法和使用電路原理圖描述類似,每個模塊實例都代表實際電路中的某個結(jié)構(gòu)單元。在Verilog HDL模塊中,用變量將各個實例模塊連接起來,就如同在實際電路中用導(dǎo)線將多個結(jié)構(gòu)單元連接起來。,3. 邏輯功能定義,例如一位全加器的Verilog HDL模塊,module Addr1 (a,b,cin,sum,cout) input a,b,cin; output sum cout; wire
18、a,b,cin; wire sum,cout; assign cout,sum = a+b+cin; endmodule,3. 邏輯功能定義,在Verilog HDL中,高層模塊可以通過調(diào)用低層模塊來構(gòu)建復(fù)雜系統(tǒng)。例如通過調(diào)用一位全加器的模塊構(gòu)建四位全加器。如下圖所示。,3. 邏輯功能定義,通過一位全加器的模塊構(gòu)建四位全加器的程序為:,module addr4(a,b,cin,sum,cout); input wire 3:0 a,b; input wire cin; output reg3:0 sum; output reg cout; /定義內(nèi)部變量 wire cout0; /第0位的Co
19、ut信號; wire cout1; /第1位的Cout信號; wire cout2; /第2位的Cout信號;,3. 邏輯功能定義,/描述邏輯功能 /調(diào)用一位全加器的模塊構(gòu)建四位全加器 MyAddr addr0(. a(a0),.b(b0), .cin(cin),.sum(sum0),.cout(cout0); MyAddr addr1(. a(a1),.b(b1), .cin(cout0),.sum(sum1),.cout(cout1); MyAddr addr2(. a(a2),.b(b2), .cin(cout1),.sum(sum2),.cout(cout2); MyAddr addr
20、3(. a(a3),.b(b3), .cin(cout2),.sum(sum3),.cout(cout); endmodule,3. 邏輯功能定義,下面是模塊調(diào)用的一般形式:,調(diào)用模塊也可以用省略方式:,模塊名 實例名(.端口1(連接的信號1), .端口2(連接的信號2), );,模塊名 實例名(連接的信號1,連接的信號2 );,需要注意括號內(nèi)列出的信號的順序要和模塊的端口順序一致。,3. 邏輯功能定義,對與一個復(fù)雜系統(tǒng),可以劃分成很多模塊,并且具有層次關(guān)系,高層模塊可以調(diào)用低層模塊, 各個模塊可以同時編寫。,3. 邏輯功能定義,多個邏輯描述塊之間的關(guān)系 在描述邏輯功能時,對使用assign,
21、always和模塊實例的種類和次數(shù)沒有限制。 用高級語言編寫的程序是順序執(zhí)行的,而Verilog HDL在描述邏輯功能時每個assign,always和模塊實例是同時發(fā)生的。因此assign,always和模塊實例在程序中出現(xiàn)的順序可以隨意排列。,3. 邏輯功能定義,例如:算術(shù)表達(dá)式x = a+b+c 兩種描述,module parallel(a,b,c,x); input a,b,c; output1:0 x; wire a,b,c; wire1:0 x; /定義之間變量temp, /用于保存結(jié)果a+b的和 wire 1:0 temp; assign temp = a+b; assign x
22、 = temp+c; endmodule,assign x = temp+c; assign temp = a+b;,4 . 塊語句,在Verilog HDL描述邏輯功能中,當(dāng)操作需要多條Verilog HDL語句才能描述時,這時就需要用塊語句將多條Verilog HDL語句復(fù)合在一起。,塊語句包括兩種: (1) 由begin end構(gòu)成的塊語句: (2) 由forkjoin構(gòu)成的塊語句:,4 . 塊語句,1. 由begin end構(gòu)成的塊語句 begin end之間可以添加多條語句,并且語句是按照出現(xiàn)的順序執(zhí)行的。 如果語句前面有延時符號“”,那么延時的長度是相對于前一條語句而言的。,4 .
23、 塊語句,下例為begin end使用實例:,timescale 100ns/100ns module beginend(din,dout); input din; output dout; wire din; reg dout; reg temp1,temp2; /定義之間變量;,4 . 塊語句,always (din) begin #1 temp1 = din; #1 temp2 = temp1; #1 dout = temp2; end endmodule,4 . 塊語句,2. 由forkjoin構(gòu)成的塊語句 fork join之間可以添加多條語句,并且語句的關(guān)系是并行的,是同時執(zhí)行的。 如果語句前面有延時符號“”,那么延時的長度是相對于fork join塊開始時間而言的。,4 . 塊語句,下例為fork join使用實例:,timescale 100ns/100ns module forkjoin(din,dout); input din; output dout; wire din; reg dout; reg temp1,temp2; /定義之間變量;,4 . 塊語句,always (din) fork / fork join之間是同時執(zhí)行的 #1 temp1 = din; /相對塊開始延時100ns #2 temp2
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工餐廳員工合同范本
- 合同范例咨詢電話
- 2025年公共建筑工程監(jiān)理合同協(xié)議書模板
- 場長聘用合同范本
- 胞二磷膽堿與神經(jīng)元存活研究-深度研究
- 2025至2030年中國刻紋機(jī)數(shù)據(jù)監(jiān)測研究報告
- 2025年軍隊文職人員招聘之軍隊文職管理學(xué)與服務(wù)能力測試試卷A卷附答案
- 2025年消防設(shè)施操作員之消防設(shè)備中級技能基礎(chǔ)試題庫和答案要點
- 煙草公司2024招聘考試全真筆試試題(綜合能力測試卷)和答案解析
- 節(jié)能環(huán)保產(chǎn)品研發(fā)生產(chǎn)協(xié)議
- DeepSeek介紹及其典型使用案例
- 2025年貴陽市貴安新區(qū)產(chǎn)業(yè)發(fā)展控股集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
- 積極心理學(xué)視角下高職院校學(xué)生心理健康教育路徑研究
- 2025年內(nèi)蒙古建筑職業(yè)技術(shù)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 人教版五年級數(shù)學(xué)下冊全套試卷附完整答案
- 2025年春新人教版數(shù)學(xué)一年級下冊課件 第一單元 2.拼一拼
- 2024年網(wǎng)絡(luò)建設(shè)與運維選擇題理論試題題庫
- 四年級下冊勞動《小小快遞站》課件
- 終止供應(yīng)商協(xié)議書
- 專題12 職業(yè)夢想 -2023年中考英語作文熱點話題終極預(yù)測
- 食品抽檢核查處置重點安全性指標(biāo)不合格原因分析排查手冊
評論
0/150
提交評論