版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章FPGA應(yīng)用基礎(chǔ)賈立新1概述編程前編程后1概述1概述FPGA的優(yōu)勢(shì)功能可自行定制、靈活性大;高并發(fā);低延遲、確定性延遲;高能耗比;可重構(gòu)。FPGA的劣勢(shì)器件成本高。開(kāi)發(fā)難度大;1概述1概述1概述1概述1概述FPGA/CPLD在電子系統(tǒng)中的應(yīng)用——數(shù)據(jù)采集與分析存儲(chǔ)示波器、脈沖參數(shù)測(cè)量?jī)x等1概述FPGA/CPLD在電子系統(tǒng)中的應(yīng)用——信號(hào)源可以生成以下波形(1)PWM;(2)正弦波,頻率幅度可調(diào);(3)任意波—正弦波、三角波、鋸齒波、方波;(4)調(diào)制波形,如時(shí)變波形,隨時(shí)間改變相位、頻率。FSK,頻率隨電平改變。1概述表1CycloneIV系列典型器件性能對(duì)照表1概述EP4CE6E22C8N1概述6.2FPGA的結(jié)構(gòu)和原理賈立新1.FPGA的內(nèi)部資源6.2FPGA的結(jié)構(gòu)和原理邏輯單元LE的簡(jiǎn)化示意圖2.邏輯陣列塊(LogicArrayBlock,LAB)6.2FPGA的結(jié)構(gòu)和原理查找表(Look-UpTable,LUT)6.2FPGA的結(jié)構(gòu)和原理CycloneIVE系列FPGA在正常模式下的LE邏輯圖6.2FPGA的結(jié)構(gòu)和原理3.可編程輸入輸出單元IOE6.2FPGA的結(jié)構(gòu)和原理例1.如何FPGA實(shí)現(xiàn)RC振蕩器?6.2FPGA的結(jié)構(gòu)和原理由于每個(gè)IO引腳都有一個(gè)三態(tài)緩沖器,RC振蕩器原理圖如圖所示。工作原理分析4.嵌入式存儲(chǔ)器M9K存儲(chǔ)器塊可以構(gòu)成單口RAM、簡(jiǎn)單雙口RAM、真正雙口RAM、ROM和FIFO。單口RAM只有一個(gè)讀寫(xiě)口,同時(shí)只能做讀或?qū)懖僮鳌:?jiǎn)單雙口RAM有兩個(gè)端口,但是其中一個(gè)端口只能讀,另一個(gè)端口只能寫(xiě)。真正雙口RAM的兩個(gè)端口都能讀寫(xiě),沒(méi)有任何限制。FIFO是一種先入先出的存儲(chǔ)器,即最先寫(xiě)入的數(shù)據(jù),最先讀。ROM就是存儲(chǔ)單元賦了初始值的單口RAM。6.2FPGA的結(jié)構(gòu)和原理M9K存儲(chǔ)器塊根據(jù)需要可配置成8192×1,4096×2,2048×4,1024×8,1024×9,512×16,512×18,256×32,256×36等多種尺寸。簡(jiǎn)單雙口RAM符號(hào)6.2FPGA的結(jié)構(gòu)和原理簡(jiǎn)單雙口RAM原理框圖6.2FPGA的結(jié)構(gòu)和原理簡(jiǎn)單雙口RAM同步時(shí)鐘選擇單時(shí)鐘(異步輸出)單時(shí)鐘(同步輸出)讀寫(xiě)時(shí)鐘輸入輸出時(shí)鐘6.2FPGA的結(jié)構(gòu)和原理簡(jiǎn)單雙口RAM寫(xiě)操作時(shí)序6.2FPGA的結(jié)構(gòu)和原理簡(jiǎn)單雙口RAM讀時(shí)序異步輸出同步輸出3.鎖相環(huán)6.2FPGA的結(jié)構(gòu)和原理6.3VerilogHDL語(yǔ)言基礎(chǔ)
硬件描述語(yǔ)言HDL(HardwareDescriptionLanguage)是一種用來(lái)描述數(shù)字電路和系統(tǒng)的語(yǔ)言。利用HDL可以完成數(shù)字電路系統(tǒng)的描述、仿真驗(yàn)證,經(jīng)過(guò)自動(dòng)綜合工具轉(zhuǎn)換到門(mén)級(jí)電路網(wǎng)表。再用FPGA自動(dòng)布局布線(xiàn)工具,把網(wǎng)表轉(zhuǎn)換為要實(shí)現(xiàn)的具體電路布線(xiàn)結(jié)構(gòu)。硬件描述語(yǔ)言發(fā)展至今已有30多年的歷史,對(duì)電路設(shè)計(jì)自動(dòng)化起到了極大的促進(jìn)和推動(dòng)作用,目前常用的硬件描述語(yǔ)言有VerilogHDL和VHDL兩種。
硬件描述語(yǔ)言主要有三大用途:建立描述數(shù)字系統(tǒng)的標(biāo)準(zhǔn)文檔;數(shù)字系統(tǒng)的仿真;邏輯綜合(Synthesis)。1概述從學(xué)習(xí)的角度來(lái)看,VerilogHDL比較簡(jiǎn)單,與C語(yǔ)言較接近,容易掌握;從使用的角度看,支持VerilogHDL的半導(dǎo)體廠家也比支持VHDL的多,因此,從發(fā)展趨勢(shì)看VerilogHDL比VHDL有更寬廣的應(yīng)用前途。1995年,制訂了IEEE標(biāo)準(zhǔn):VerilogHDL1364-1995;2001年,發(fā)布了VerilogHDL1364-2001標(biāo)準(zhǔn);2005年,發(fā)布了SystemVerilogIEEE1800-2005標(biāo)準(zhǔn)。1983年,GDA公司的PhilMoorby首創(chuàng);1概述VerilogHDL模型(1)系統(tǒng)級(jí)(system-level):用語(yǔ)言提供的高級(jí)結(jié)構(gòu)能夠?qū)崿F(xiàn)待設(shè)計(jì)模塊的外部性能的模型;1概述(2)算法級(jí)(algorithm-level):用語(yǔ)言提供的高級(jí)結(jié)構(gòu)能夠?qū)崿F(xiàn)算法運(yùn)行的模型;(3)RTL級(jí)(registertransferlevel):描述數(shù)據(jù)在寄存器之間的流動(dòng)和如何處理、控制這些數(shù)據(jù)流動(dòng)的模型;(4)門(mén)級(jí)(gate-level):描述邏輯門(mén)以及邏輯門(mén)之間連接的模型;(5)開(kāi)關(guān)級(jí)(switch-level):描述器件中三極管和儲(chǔ)存節(jié)點(diǎn)以及它們之間連接的模型。一個(gè)簡(jiǎn)單的Verilog代碼modulemuxtwo(out,a,b,sl);inputa,b,sl;outputout;regout;always@(sloraorb) if(!sl) out=a; else out=b;endmodulemodulemuxtwo(out,a,b,sl);inputa,b,sl;outputout;wirensl,sela,selb; //定義內(nèi)部連接線(xiàn)assignnsl=~sl; //求反assignsela=a&nsl; //按位與運(yùn)算assignselb=b&sl;assignout=sela|selb; //按位或運(yùn)算endmodule1概述綜合(Synthesis)綜合就是利用EDA工具把VerilogHDL代碼轉(zhuǎn)變成相應(yīng)的邏輯電路(門(mén)級(jí)網(wǎng)表),再通過(guò)布局布線(xiàn)工具自動(dòng)地轉(zhuǎn)變?yōu)槟撤N具體器件和工藝的電路布線(xiàn)結(jié)構(gòu)。modulemuxtwo(out,a,b,sl);inputa,b,sl;outputout;regout;always@(sloraorb) if(!sl) out=a; else out=b;endmodulead1概述學(xué)習(xí)硬件描述語(yǔ)言應(yīng)注意的問(wèn)題1.用硬件設(shè)計(jì)思想來(lái)編寫(xiě)Verilog多實(shí)踐,多思考,多總結(jié)。2.語(yǔ)法掌握貴在精,不在多
本章介紹的基本語(yǔ)句就可以完成大多數(shù)的電路設(shè)計(jì)。3.Verilog描述和傳統(tǒng)原理圖的關(guān)系
適合用原理圖的地方就用原理圖,適合用HDL的地方就用Verilog,熟練后可全部用Verilog描述。4.Verilog語(yǔ)句的可綜合性問(wèn)題并不是所有的語(yǔ)句都是可綜合的,本章主要講解可綜合VerilogHDL模塊的相關(guān)知識(shí)。1概述2.VerilogHDL模塊的基本結(jié)構(gòu)
VerilogHDL模塊結(jié)構(gòu)位于module和endmodule聲明語(yǔ)句之間,每個(gè)模塊程序包括:端口說(shuō)明、數(shù)據(jù)類(lèi)型說(shuō)明、邏輯功能定義。同時(shí),一個(gè)可讀性好的模塊還包括一些有用的注釋。
模塊名右側(cè)的括號(hào)稱(chēng)為模塊端口列表,列出了此模塊的所有輸入、輸出或雙向端口名。端口名間用逗號(hào)分開(kāi),右側(cè)括號(hào)外加分號(hào)。1.端口說(shuō)明輸入口:input;輸出口:output;輸入輸出口:inout;以輸入口為例,格式為:input[信號(hào)位寬-1:0]端口名1;input[信號(hào)位寬-1:0]端口名2; …….input[信號(hào)位寬-1:0]端口名i;【注】端口說(shuō)明也可以寫(xiě)在端口聲明語(yǔ)句里,格式如下:modulemodule_name(inputport1,inputport2,…);2.VerilogHDL模塊的基本結(jié)構(gòu)2.數(shù)據(jù)類(lèi)型說(shuō)明這部分主要定義兩種類(lèi)型的變量:wire類(lèi)型和reg類(lèi)型。格式為:reg[width-1:0]R變量1,R變量2,…; …….wire[width-1:0]W變量1,W變量2,…; …….【注】輸入輸出端口若不定義,則默認(rèn)為wire類(lèi)型:2.VerilogHDL模塊的基本結(jié)構(gòu)3.邏輯功能定義模塊中最重要的部分是邏輯功能定義部分,常用以下兩種方法:(1)用“assign”聲明語(yǔ)句。只需在assign后面加一個(gè)賦值表達(dá)式即可。如:assigna=b&c;(2)用“always”塊。always@(posedgeclkorposedgeclr) begin if(clr)q<=0; else q<=d;//帶有異步清零端的D觸發(fā)器 end采用“assign”語(yǔ)句是描述組合邏輯最常用的方法之一,而“always”塊既可用于描述組合邏輯,也可描述時(shí)序邏輯。如:2.VerilogHDL模塊的基本結(jié)構(gòu)4.注釋在VerilogHDL程序中有兩種形式的注釋?zhuān)簡(jiǎn)涡凶⑨專(zhuān)阂浴?/”開(kāi)始到本行結(jié)束,不允許續(xù)行;多行注釋?zhuān)阂浴?*”開(kāi)始,到“*/”結(jié)束。【注】:注釋能夠大大提高程序的可讀性,在初學(xué)階段就要養(yǎng)成撰寫(xiě)注釋的習(xí)慣。2.VerilogHDL模塊的基本結(jié)構(gòu)3.數(shù)據(jù)類(lèi)型VerilogHDL有4種最基本的數(shù)據(jù)類(lèi)型:wire型、reg型、integer型和parameter型。VerilogHDL語(yǔ)言也有常量和變量之分。4種進(jìn)制表示形式:二進(jìn)制(b或B);十進(jìn)制(d或D);十六進(jìn)制(h或H);八進(jìn)制(o或O)。(1)常量——數(shù)字——整數(shù)1)<位寬>'<進(jìn)制><數(shù)字>
8‘b10101100 //位寬為8的某整數(shù)的二進(jìn)制表示;2)'<進(jìn)制><數(shù)字>,例如:
‘b10101100//位寬為32(系統(tǒng)默認(rèn)位寬)的數(shù)的二進(jìn)制表示;3)<數(shù)字>,例如:
10101100 //十進(jìn)制數(shù)10101100;(1)常量——數(shù)字——x和z值在數(shù)字電路中,x代表不定值,z代表高阻值。z的另一種表達(dá)方式是寫(xiě)作“?”。例如:3.數(shù)據(jù)類(lèi)型
4'b10x0 //位寬為4的二進(jìn)制數(shù)從低位數(shù)起第2位為不定值;
4'b101z
//位寬為4的二進(jìn)制數(shù)最低位為高阻值;
12'dz //另一種表達(dá)方式為:12'd? //位寬為12的十進(jìn)制數(shù),其值為高阻值;
8'h4x //位寬為8的十六進(jìn)制數(shù),其低4位值為不定值;(1)常量——數(shù)字——負(fù)數(shù)一個(gè)數(shù)字可以被定義為負(fù)數(shù),只需在位寬表達(dá)式前加一個(gè)減號(hào),減號(hào)必須寫(xiě)在數(shù)字定義表達(dá)式的最前面。例如:
-8'd5 //代表5的補(bǔ)碼(用八位二進(jìn)制數(shù)表示);
8'd-5
//非法格式;(1)常量——數(shù)字——下劃線(xiàn)下劃線(xiàn)可以用來(lái)分隔開(kāi)數(shù)的表達(dá)以提高程序的可讀性。它不能用在位寬和進(jìn)制處,只能用在具體的數(shù)字之間,例如:
16'b1010_1011_1111_1010//合法格式;
8'b_1010_1011 //非法格式;
3.數(shù)據(jù)類(lèi)型(1)常量——數(shù)字【注】當(dāng)常量不說(shuō)明位數(shù)時(shí),默認(rèn)值是32位;每個(gè)字母用8位的ASCII值表示,例如:3.數(shù)據(jù)類(lèi)型
10=32'd10=32'b1010 1=32'd1=32'b1 -1=-32'd1=32'hFFFFFFFF 'BX=32'BX “AB”=16'B01000001_010000010//字符串AB,為十六進(jìn)制16'h4142(1)常量——參數(shù)parameter
在VerilogHDL中用parameter來(lái)定義常量,稱(chēng)為符號(hào)常量,即標(biāo)識(shí)符形式的常量。采用標(biāo)識(shí)符代表一個(gè)常量可提高程序的可讀性和可維護(hù)性。說(shuō)明格式如下:
parametermsb=7;parametere=25,f=29;parameterbyte_size=8parameterbyte_msb=byte_size-1;parameterdelay=e+f;parameter參數(shù)名1=表達(dá)式1,…,參數(shù)名n=表達(dá)式n;該表達(dá)式只能包含數(shù)字或先前已定義過(guò)的參數(shù)。例如:3.數(shù)據(jù)類(lèi)型(2)變量——wire型
wire是最常用數(shù)據(jù)變量,其特點(diǎn)是輸出的值緊跟輸入值的變化而變化,相當(dāng)于硬件電路中的各種物理連接,必須受到驅(qū)動(dòng)器(例如assign賦值語(yǔ)句)的驅(qū)動(dòng)。VerilogHDL模塊中的輸入/輸出信號(hào)沒(méi)有明確指定數(shù)據(jù)類(lèi)型時(shí)都被默認(rèn)為wire型。wire型信號(hào)可以用做任何表達(dá)式的輸入,也可以用做“assign”語(yǔ)句和實(shí)例元件的輸出。
wirea,b;//定義了兩個(gè)wire型變量a和b,且位寬都為1
wire[7:0]databus; //定義8位寬的數(shù)據(jù)總線(xiàn)
或者:
wire[8:1]databus;3.數(shù)據(jù)類(lèi)型(2)變量——reg型
reg型變量必須放在過(guò)程語(yǔ)句(例如always)中通過(guò)過(guò)程賦值語(yǔ)句賦值,或者說(shuō),在always等過(guò)程塊內(nèi)被賦值的信號(hào)必須定義成reg型。定義格式與wire類(lèi)型類(lèi)似。reg型變量并不意味著一定對(duì)應(yīng)硬件上的一個(gè)觸發(fā)器或寄存器等存儲(chǔ)元件。在進(jìn)行綜合時(shí),reg型變量會(huì)根據(jù)其被賦值的具體情況來(lái)確實(shí)是映射成連線(xiàn)還是映射為存儲(chǔ)元件(觸發(fā)器或寄存器)。reg型變量只表示被定義的信號(hào)將用在“always”模塊內(nèi)。3.數(shù)據(jù)類(lèi)型4.運(yùn)算符VerilogHDL語(yǔ)言提供了豐富的運(yùn)算符,按功能分包括:算數(shù)運(yùn)算符、位運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符、等式運(yùn)算符、移位運(yùn)算符、位拼接運(yùn)算符、縮減運(yùn)算符和條件運(yùn)算符等。若按運(yùn)算符所帶操作數(shù)的個(gè)數(shù)來(lái)區(qū)分,可分為:?jiǎn)文窟\(yùn)算符(unaryoperators):運(yùn)算符可帶一個(gè)操作數(shù);雙目運(yùn)算符(binaryoperators):運(yùn)算符可帶兩個(gè)操作數(shù);三目運(yùn)算符(ternaryoperators):運(yùn)算符可帶三個(gè)操作數(shù)。(1)算術(shù)運(yùn)算符運(yùn)算符功能+加-減*乘/除%取模算術(shù)運(yùn)算符都屬于雙目運(yùn)算符。在進(jìn)行整數(shù)除法運(yùn)算時(shí),結(jié)果值要略去小數(shù)部分,只取整數(shù)部分;而進(jìn)行取模運(yùn)算時(shí),結(jié)果值的符號(hào)位采用模運(yùn)算式里第一個(gè)操作數(shù)的符號(hào)位,例如:
11%3 //結(jié)果為2
-10%3 //結(jié)果為-1
11%-3 //結(jié)果為24.運(yùn)算符(2)邏輯運(yùn)算符運(yùn)算符功能!邏輯非(單目運(yùn)算符)&&邏輯與||邏輯或aba&&ba||b!a!b11
1100
10
0101
01
0110
00
0011
運(yùn)算規(guī)則4.運(yùn)算符(2)邏輯運(yùn)算符【注】:如果操作數(shù)不只一位的話(huà),則應(yīng)將操作數(shù)作為一個(gè)整體來(lái)對(duì)待,即如果操作數(shù)是全0,則相當(dāng)于邏輯0,但只要某一位是1,則操作數(shù)就應(yīng)該整體看做邏輯1。邏輯運(yùn)算符的運(yùn)算結(jié)果是1位的,要么為邏輯1,要么為邏輯0。例如:A=4'b0000;B=4'b0101;C=4'b0011;D=4'b0000;則有:
!A=1;!B=0;A&&B=0;B&&C=1; A&&C=0;A&&D=0; A||B=1;B||C=1;A||C=1;A||D=0;4.運(yùn)算符(3)位運(yùn)算符運(yùn)算符功能~按位取反(單目運(yùn)算符)&按位與|按位或^按位異或^~,~^按位同或(兩種寫(xiě)法等價(jià))&01x|01x^01x^~01x0000
000x
001x
010x
101x
1111
110x
101x
x0xx
xx1x
xxxx
xxxx
運(yùn)算規(guī)則4.運(yùn)算符(3)位運(yùn)算符例如:若A=5'b11001;B=5'b10101;則有:
~A=5'b00110; A&B=5'b10001; A|B=5'b11101; A^B=5'b01100; A^~B=5'b10011;【注】:不同長(zhǎng)度的數(shù)據(jù)進(jìn)行位運(yùn)算:系統(tǒng)會(huì)自動(dòng)將兩個(gè)數(shù)據(jù)右端(低位端)對(duì)齊,位數(shù)少的操作數(shù)在相應(yīng)的高位用0填滿(mǎn),以使兩個(gè)操作數(shù)按位運(yùn)算。4.運(yùn)算符(4)關(guān)系運(yùn)算符
關(guān)系運(yùn)算符都是雙目運(yùn)算符,用于比較兩個(gè)操作數(shù)的大小關(guān)系。關(guān)系運(yùn)算符操作得到的結(jié)果是1位的邏輯值,1代表比較關(guān)系成立,0代表比較關(guān)系不成立。如果某個(gè)操作數(shù)的值不定,則返回值是不定值。運(yùn)算符功能<小于<=小于或等于>大于>=大于或等于運(yùn)算符功能==等于!=不等于===全等!==不全等4.運(yùn)算符==01xz===01xz010xx01000101xx10100xxxxxx0010zxxxxz0001例如:若A=5'b11x01;B=5'b11x01;則有:“A==B”得到的結(jié)果為不定值;“A===B”得到的結(jié)果為邏輯1。
==和===的區(qū)別是:==參與比較的兩個(gè)操作數(shù)必須逐位相等,其相等比較的結(jié)果才為1,如果某些位是不定態(tài)或高阻值,其相等比較得到的結(jié)果是不定值;而===比較則是對(duì)這些不定態(tài)或高阻態(tài)的位也進(jìn)行比較,兩個(gè)操作數(shù)必須完全一致,其結(jié)果才是1,否則結(jié)果為0。(4)關(guān)系運(yùn)算符4.運(yùn)算符(5)縮位運(yùn)算符縮位運(yùn)算符與位運(yùn)算符的邏輯運(yùn)算法則一樣,但縮減運(yùn)算符是對(duì)單個(gè)操作數(shù)進(jìn)行的與、或、非遞推運(yùn)算的,它放在操作數(shù)的前面,最后結(jié)果是1位的二進(jìn)制數(shù)。運(yùn)算符功能&與~&與非|或~|或非^異或~^,^~同或4.運(yùn)算符(5)縮位運(yùn)算符具體運(yùn)算過(guò)程:第一步先將操作數(shù)的第1位與第2位進(jìn)行與、或、非運(yùn)算;第二步將運(yùn)算結(jié)果與第3位進(jìn)行與、或、非運(yùn)算,以此類(lèi)推,直到最后一位。例如:
reg[3:0]a; b=&a;//等效于b=((a[0]&a[1])&a[2])&a[3]再比如:若A=5'b11001;則有:
&A=0; |A=1; ~|A=0;4.運(yùn)算符(6)移位運(yùn)算符用法為:A>>n或A<<n,表示把操作數(shù)A右移或左移n位,移出的空位用0填補(bǔ)。
例如:若A=5'b11001;則有:
A>>2的值為:5'b00110 A<<2的值為:5'b00100運(yùn)算符功能>>右移<<左移4.運(yùn)算符(7)條件運(yùn)算符運(yùn)算符功能?:三目運(yùn)算符用法為:信號(hào)=條件?表達(dá)式1:表達(dá)式2即當(dāng)條件成立時(shí),信號(hào)取表達(dá)式1的值,反之取表達(dá)式2的值。例如:
assignout=sel?in1:in0;//完成2選1的數(shù)據(jù)選擇功能4.運(yùn)算符(8)位拼接運(yùn)算符
{信號(hào)1的某幾位,信號(hào)2的某幾位,…,信號(hào)n的某幾位}運(yùn)算符功能{}把兩個(gè)或多個(gè)信號(hào)的某些位拼接起來(lái)moduleadd(ina,inb,cin,sum,cout);input[3:0]ina,inb;inputcin;output[3:0]sum;outputcout;assign
{cout,sum}=ina+inb+cin;endmodule例如,在進(jìn)行加法運(yùn)算時(shí),可將和輸出與進(jìn)位輸出拼接在一起使用:4.運(yùn)算符(8)位拼接運(yùn)算符位拼接可以用來(lái)進(jìn)行符號(hào)位擴(kuò)展,例如: wire[7:0]data; wire[11:0]s_data;
assigns_data={{4{data[7]}},data};位拼接還可以嵌套使用,例如:
{b,{3{a,b}}},等同于:{b,a,b,a,b,a,b}4.運(yùn)算符(9)運(yùn)算符的優(yōu)先級(jí)不同的綜合開(kāi)發(fā)工具,在執(zhí)行這些優(yōu)先級(jí)時(shí)可能有微小的差別,因此在書(shū)寫(xiě)程序時(shí)建議用括號(hào)()來(lái)控制運(yùn)算的優(yōu)先級(jí),這樣能有效避免錯(cuò)誤,同時(shí)也增加程序的可讀性。4.運(yùn)算符5.VerilogHDL的行為語(yǔ)句1.過(guò)程語(yǔ)句VerilogHDL中的多數(shù)過(guò)程模塊都從屬于以下兩種過(guò)程語(yǔ)句:initial和always。一個(gè)程序模塊可以有多個(gè)initial和always過(guò)程語(yǔ)句。initial語(yǔ)句常用于仿真中的初始化,只執(zhí)行一次,不可綜合。而always過(guò)程語(yǔ)句后跟著的過(guò)程塊可以不斷重復(fù)執(zhí)行,只要觸發(fā)條件滿(mǎn)足就可以,即滿(mǎn)足一次執(zhí)行一次,且是可綜合的,因此always過(guò)程語(yǔ)句在實(shí)際電路設(shè)計(jì)中廣泛采用。1.過(guò)程語(yǔ)句always@(<敏感信號(hào)表達(dá)式event-expression>) begin //過(guò)程賦值 //if-else,case等條件語(yǔ)句 //for等循環(huán)語(yǔ)句 end5.VerilogHDL的行為語(yǔ)句1.過(guò)程語(yǔ)句——always——敏感信號(hào)表達(dá)式
觸發(fā)條件就寫(xiě)在敏感信號(hào)表達(dá)式中,只有當(dāng)觸發(fā)條件滿(mǎn)足時(shí),其后的“begin-end”塊語(yǔ)句才被執(zhí)行,多個(gè)條件之間用“or”連接。@(a) //當(dāng)信號(hào)a的值發(fā)生改變,屬于電平觸發(fā)@(aorb) //當(dāng)信號(hào)a或信號(hào)b的值發(fā)生改變,屬于電平觸發(fā)@(posedgeclock) //當(dāng)clock的上升沿到來(lái)時(shí),屬于邊沿觸發(fā)@(negedgeclock) //當(dāng)clock的下降沿到來(lái)時(shí),屬于邊沿觸發(fā)
@(posedgeclkornegedgereset) //當(dāng)clk的上升沿到來(lái)或是reset信號(hào)的下降沿到來(lái)敏感信號(hào)可以分為兩種類(lèi)型:一種為電平敏感型,一種為邊沿敏感型,每一個(gè)always語(yǔ)句最好只由一種類(lèi)型的敏感信號(hào)來(lái)觸發(fā),而最好不要將兩類(lèi)列在一起,例如:@(posedgeclkorclr),這樣的敏感信號(hào)表達(dá)式盡量不要使用。5.VerilogHDL的行為語(yǔ)句1.過(guò)程語(yǔ)句——always——實(shí)現(xiàn)組合邏輯電路舉例modulemux4_1(out,in0,in1,in2,in3,sel); inputin0,in1,in2,in3; input[1:0]sel; outputout; regout; always@(in0orin1orin2orin3orsel) begin case(sel) 2'b00:out=in0; 2'b01:out=in1; 2'b10:out=in2; 2'b11:out=in3; endcase endendmodule5.VerilogHDL的行為語(yǔ)句1.過(guò)程語(yǔ)句——always——實(shí)現(xiàn)時(shí)序邏輯電路舉例1modulecount(out,data,load,reset,clk); inputload,reset,clk; input[7:0]data; output[7:0]out; reg[7:0]out; always@(posedgeclk) begin if(!reset)out<=8'd0; elseif(load)out<=data; elseout<=out+8'd1; endendmodule5.VerilogHDL的行為語(yǔ)句1.過(guò)程語(yǔ)句——always——實(shí)現(xiàn)時(shí)序邏輯電路舉例2modulecount(out,data,clear,clk); inputclear,clk; input[7:0]data; output[7:0]out; reg[7:0]out; always@(posedgeclkornegedgeclear) begin if(!clear) out<=8'd0; else out<=out+8'd1; endendmodule5.VerilogHDL的行為語(yǔ)句2.塊語(yǔ)句——begin-end塊語(yǔ)句VerilogHDL中塊語(yǔ)句的作用是將多條語(yǔ)句合并成一組。關(guān)鍵字begin-end用于將多條語(yǔ)句組成順序塊,即塊中語(yǔ)句順序執(zhí)行的,(除了非阻塞賦值語(yǔ)句,在下一小節(jié)會(huì)介紹)。關(guān)鍵字fork-join將多條語(yǔ)句組成并行塊,塊內(nèi)語(yǔ)句并發(fā)執(zhí)行,是不可綜合的。說(shuō)明:由于begin-end塊內(nèi)的語(yǔ)句順序執(zhí)行,最后將regb和regc的值都更新為rega。且若只有一條語(yǔ)句,begin-end可以省略。begin regb=rega; regc=regb;end5.VerilogHDL的行為語(yǔ)句3.持續(xù)賦值語(yǔ)句——assign語(yǔ)句assign為持續(xù)賦值語(yǔ)句,主要用于對(duì)wire型變量的賦值,例如:
assignc=a&b;c為wire型變量,a和b信號(hào)的任何變化,都將隨時(shí)反應(yīng)到c上來(lái)。下面的例子是用持續(xù)賦值方式定義的2選1多路選擇器:
modulemux2_1(out,a,b,sel); inputa,b,sel; outputout; assignout=(sel==0)?a:b; //也可寫(xiě)成:assignout=(sel)?b:a;endmodule5.VerilogHDL的行為語(yǔ)句4.過(guò)程賦值語(yǔ)句如前所述,reg型變量必須放在過(guò)程語(yǔ)句(例如always)中通過(guò)過(guò)程賦值語(yǔ)句賦值,或者說(shuō)在always過(guò)程語(yǔ)句中被賦值的變量必須定義為reg型。過(guò)程賦值有兩種方式:非阻塞賦值方式:賦值符號(hào)為“<=”,例如:b<=a;非阻塞賦值在整個(gè)過(guò)程塊結(jié)束時(shí)才完成賦值操作,即b的值并不是立刻就改變的。阻塞賦值方式:賦值符號(hào)為“=”,例如:b=a;阻塞賦值在該語(yǔ)句結(jié)束時(shí)就立即完成賦值操作,即b的值在該條語(yǔ)句結(jié)束后立刻改變。如果在一個(gè)塊語(yǔ)句中有多條阻塞賦值語(yǔ)句,那么在前面的賦值語(yǔ)句沒(méi)有完成之前,后面的語(yǔ)句就不能執(zhí)行,仿佛被阻塞了一樣,因此成為阻塞賦值方式。5.VerilogHDL的行為語(yǔ)句4.過(guò)程賦值語(yǔ)句——舉例1modulereg_EXM1(A,B,C,F1,F2); inputA,B,C; outputF1,F2; regF1,F2; always@(AorBorC) begin F1=A|B; F2=F1&C; endendmodule5.VerilogHDL的行為語(yǔ)句(4)過(guò)程賦值語(yǔ)句——舉例2modulereg_EXM2(a,b,c,clk); inputa,clk; outputb,c; regb,c; always@(posedgeclk) begin b=a; c=b; endendmodule5.VerilogHDL的行為語(yǔ)句4.過(guò)程賦值語(yǔ)句——舉例3modulereg_EXM3(a,b,c,clk); inputa,clk; outputb,c; regb,c; always@(posedgeclk) begin b<=a; c<=b; endendmodule5.VerilogHDL的行為語(yǔ)句5.條件語(yǔ)句——if-else語(yǔ)句說(shuō)明:
語(yǔ)句可以是單句,也可以是多句,多句時(shí)用“begin-end”塊語(yǔ)句括起來(lái);
else語(yǔ)句不能單獨(dú)使用,必須與if語(yǔ)句配對(duì)使用;If(表達(dá)式)
語(yǔ)句1;if(表達(dá)式)
語(yǔ)句1;else
語(yǔ)句2;if(表達(dá)式)
語(yǔ)句1;elseif(表達(dá)式2)
語(yǔ)句2;elseif(表達(dá)式3)
語(yǔ)句3;……elseif(表達(dá)式n)
語(yǔ)句n;else 語(yǔ)句n+1;5.VerilogHDL的行為語(yǔ)句5.條件語(yǔ)句——if-else語(yǔ)句else總是與它上面最近的if配對(duì)。如果if與else的數(shù)目不一樣,為了實(shí)現(xiàn)程序設(shè)計(jì)者的意圖,可以用“begin-end”塊語(yǔ)句來(lái)確定配對(duì)關(guān)系,例如:if() begin if()語(yǔ)句1;//內(nèi)嵌if endelse
語(yǔ)句2;【注】“begin-end”塊語(yǔ)句限定了內(nèi)嵌if語(yǔ)句的范圍,else與第一個(gè)if配對(duì)。允許一定形式的表達(dá)式簡(jiǎn)寫(xiě)方式。例如:if(expression) //等同于if(expression==1) if(!expression) //等同于if(expression!=1)或if(expression==0)5.VerilogHDL的行為語(yǔ)句5.條件語(yǔ)句——case語(yǔ)句相對(duì)于if語(yǔ)句只有兩個(gè)分支而言,case語(yǔ)句是一種多分支語(yǔ)句,因此case語(yǔ)句多用于條件譯碼電路,如描述譯碼器、數(shù)據(jù)選擇器、狀態(tài)機(jī)及微處理器的指令譯碼等。case語(yǔ)句有case、casez、casex三種
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 稀土磁性材料成型工崗前保密意識(shí)考核試卷含答案
- 成品礦運(yùn)送工創(chuàng)新方法強(qiáng)化考核試卷含答案
- 焦化裝置操作工安全培訓(xùn)效果測(cè)試考核試卷含答案
- 選煤工班組評(píng)比知識(shí)考核試卷含答案
- 營(yíng)造林技術(shù)員安全知識(shí)競(jìng)賽水平考核試卷含答案
- 黃酒釀造工崗前安全生產(chǎn)知識(shí)考核試卷含答案
- 2024年朝陽(yáng)職工工學(xué)院輔導(dǎo)員考試筆試真題匯編附答案
- 固體飲料噴霧造粒工測(cè)試驗(yàn)證知識(shí)考核試卷含答案
- 淀粉及淀粉糖制造工達(dá)標(biāo)測(cè)試考核試卷含答案
- 2024年齊齊哈爾醫(yī)學(xué)院輔導(dǎo)員考試筆試題庫(kù)附答案
- 新能源并網(wǎng)系統(tǒng)短路比指標(biāo)分析及臨界短路比計(jì)算方法
- DB32T3916-2020建筑地基基礎(chǔ)檢測(cè)規(guī)程
- 換電柜維護(hù)培訓(xùn)課件
- GB/T 15153.1-2024遠(yuǎn)動(dòng)設(shè)備及系統(tǒng)第2部分:工作條件第1篇:電源和電磁兼容性
- 初中語(yǔ)文 送別詩(shī)練習(xí)題(含答案)
- 企業(yè)標(biāo)準(zhǔn)-格式模板
- 五年級(jí)上冊(cè)道德與法治期末測(cè)試卷新版
- 2022年醫(yī)學(xué)專(zhuān)題-石家莊中國(guó)鮑曼不動(dòng)桿菌感染診治與防控專(zhuān)家共識(shí)
- YY/T 1543-2017鼻氧管
- YS/T 903.1-2013銦廢料化學(xué)分析方法第1部分:銦量的測(cè)定EDTA滴定法
- FZ/T 70010-2006針織物平方米干燥重量的測(cè)定
評(píng)論
0/150
提交評(píng)論