verilog~宋萬(wàn)杰~中級(jí)第一~第六講(夏宇聞版)_第1頁(yè)
verilog~宋萬(wàn)杰~中級(jí)第一~第六講(夏宇聞版)_第2頁(yè)
verilog~宋萬(wàn)杰~中級(jí)第一~第六講(夏宇聞版)_第3頁(yè)
verilog~宋萬(wàn)杰~中級(jí)第一~第六講(夏宇聞版)_第4頁(yè)
verilog~宋萬(wàn)杰~中級(jí)第一~第六講(夏宇聞版)_第5頁(yè)
已閱讀5頁(yè),還剩120頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Verilog Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程數(shù)字系統(tǒng)設(shè)計(jì)教程第二部分第二部分 中級(jí)篇中級(jí)篇宋萬(wàn)杰宋萬(wàn)杰西安電子科技大學(xué)西安電子科技大學(xué)雷達(dá)信號(hào)處理國(guó)家重點(diǎn)實(shí)驗(yàn)室雷達(dá)信號(hào)處理國(guó)家重點(diǎn)實(shí)驗(yàn)室概述概述 由初級(jí)篇可知由初級(jí)篇可知,Verilog Verilog 模型可以是實(shí)際電路不同模型可以是實(shí)際電路不同級(jí)別的抽象。這些抽象的級(jí)別和它們對(duì)應(yīng)的模型類型級(jí)別的抽象。這些抽象的級(jí)別和它們對(duì)應(yīng)的模型類型共有以下五種共有以下五種: 1) 1) 系統(tǒng)級(jí)系統(tǒng)級(jí)(system)(system) 2) 2) 算法級(jí)算法級(jí)(algorithmic)(algorithmic) 3) RTL3) RTL級(jí)級(jí)(Regist

2、erTransferLevel):(RegisterTransferLevel): 4) 4) 門級(jí)門級(jí)(gate-level):(gate-level): 5) 5) 開(kāi)關(guān)級(jí)開(kāi)關(guān)級(jí)(switch-level)(switch-level) 一個(gè)邏輯網(wǎng)絡(luò)是由許多邏輯門和開(kāi)關(guān)所組成,因此用邏輯門的模型來(lái)描述邏輯網(wǎng)絡(luò)是最直觀的。Verilog HDL提供了一些門類型的關(guān)鍵字,可以用于門級(jí)結(jié)構(gòu)建模。 Verilog HDL中有關(guān)門類型的關(guān)鍵字共有26個(gè)之多,在本教材中我們只介紹最基本的八個(gè)。下面列出了八個(gè)基本的門類(GATETYPE)關(guān)鍵字和它們所表示的門的類型: and 與門與門 nand 與非門與

3、非門 nor 或非門或非門 or 或門或門 xor 異或門異或門 xnor 異或非門異或非門 buf 緩沖器緩沖器 not 非門非門【例例1.1】 module flop(data,clock,clear,q,qb); input data,clock,clear; output q,qb; nand #10 nd1(a,data,clock,clear), nd2(b,ndata,clock), nd4(d,c,b,clear), nd5(e,c,nclock), nd6(f,d,nclock), nd8(qb,q,f,clear); nand #9 nd3(c,a,d), nd7(q,e,

4、qb); not #10 iv1(ndata,data), iv2(nclock,clock); endmodule 圖圖2 .1.2 .1. 1 D 1 D 型主從觸發(fā)器的電路結(jié)構(gòu)圖型主從觸發(fā)器的電路結(jié)構(gòu)圖 顯而易見(jiàn),通過(guò)顯而易見(jiàn),通過(guò)Verilog HDL模塊的調(diào)用,可以構(gòu)成任模塊的調(diào)用,可以構(gòu)成任何復(fù)雜結(jié)構(gòu)的電路。何復(fù)雜結(jié)構(gòu)的電路。 如果已經(jīng)編制了一個(gè)模塊,如1.1.2節(jié)中的flop, 可以在另外的模塊中引用這個(gè)模塊,引用的方法與門類型的實(shí)例引用非常類似。只需在前面寫上已編的模塊名,緊跟著寫上引用的實(shí)例名,按順序?qū)懮蠈?shí)例的端口名即可,也可以用已編模塊的端口名按對(duì)應(yīng)的原則逐一填入1) fl

5、op f1op_d( d1, clk, clrb, q, qn);2) flop flop_d (.clock(clk),.q(q),.clear(clrb),.qb(qn),.data(d1);clrdqclkclrdqclkclrdqclkq0d0clrdqclkd3d2q2q3q1d1clrbclkf4f3f2f1四位寄存器電路結(jié)構(gòu)圖 用觸發(fā)器組成帶清零端的用觸發(fā)器組成帶清零端的4 4位寄存器位寄存器 設(shè)計(jì)示例二設(shè)計(jì)示例二/注意結(jié)束時(shí)用逗號(hào),注意結(jié)束時(shí)用逗號(hào),最后才用分號(hào)最后才用分號(hào) 為了對(duì)已設(shè)計(jì)的模塊進(jìn)行檢驗(yàn)往往需要產(chǎn)生一系列信號(hào)為了對(duì)已設(shè)計(jì)的模塊進(jìn)行檢驗(yàn)往往需要產(chǎn)生一系列信號(hào)作為輸出

6、,輸入到已設(shè)計(jì)的模塊,并檢查已設(shè)計(jì)模塊的輸作為輸出,輸入到已設(shè)計(jì)的模塊,并檢查已設(shè)計(jì)模塊的輸出,看它們是否符合設(shè)計(jì)要求。這就要求我們編寫測(cè)試模出,看它們是否符合設(shè)計(jì)要求。這就要求我們編寫測(cè)試模塊,也稱作測(cè)試文件,常用帶塊,也稱作測(cè)試文件,常用帶.tf.tf擴(kuò)展名的文件來(lái)描述測(cè)試擴(kuò)展名的文件來(lái)描述測(cè)試模塊。模塊。n行為級(jí)描述是對(duì)系統(tǒng)的高抽象級(jí)描述。在這個(gè)抽象級(jí),注重的是行為級(jí)描述是對(duì)系統(tǒng)的高抽象級(jí)描述。在這個(gè)抽象級(jí),注重的是整個(gè)系統(tǒng)的功能而不是實(shí)現(xiàn)。整個(gè)系統(tǒng)的功能而不是實(shí)現(xiàn)。nVerilog有高級(jí)編程語(yǔ)言結(jié)構(gòu)用于行為描述,包括:有高級(jí)編程語(yǔ)言結(jié)構(gòu)用于行為描述,包括: wait, while, i

7、f then, case和和forevernVerilog的行為建模是用一系列以高級(jí)編程語(yǔ)言編寫的并行的、動(dòng)的行為建模是用一系列以高級(jí)編程語(yǔ)言編寫的并行的、動(dòng)態(tài)的過(guò)程塊來(lái)描述系統(tǒng)的工作。態(tài)的過(guò)程塊來(lái)描述系統(tǒng)的工作。Module gen_clk (clk,reset); output clk; output reset; reg clk ,reset; initial begin reset = 1; /initial state clk=0; #3 reset = 0; #5 reset = 1; end always #5 clk = clk;endmodule 輸出仿真信號(hào)初始狀態(tài)時(shí),初始

8、狀態(tài)時(shí),clk置置為低電平,為低電平,reset為為高電平。高電平。Reset信號(hào)信號(hào)輸出一個(gè)復(fù)位信號(hào)輸出一個(gè)復(fù)位信號(hào)后,維持在高電平。后,維持在高電平。以后每隔5個(gè)時(shí)間單位,時(shí)鐘就翻轉(zhuǎn)一次宏定義 stim,可使源程序簡(jiǎn)潔定義事件end_first_pass 設(shè)計(jì)示例三 (續(xù)) 設(shè)計(jì)示例三 (續(xù)) 可以利用可以利用UDP( User Defined Primitives)來(lái)定義有自)來(lái)定義有自己特色的用于仿真的基本邏輯元件模塊并建立相應(yīng)的原語(yǔ)己特色的用于仿真的基本邏輯元件模塊并建立相應(yīng)的原語(yǔ)庫(kù)。庫(kù)。UDP模塊的結(jié)構(gòu)與一般模塊類似,只是不用模塊的結(jié)構(gòu)與一般模塊類似,只是不用module而而改用改

9、用primitive關(guān)鍵詞開(kāi)始,不用關(guān)鍵詞開(kāi)始,不用endmodule而改用而改用endprimitive關(guān)鍵詞結(jié)束。關(guān)鍵詞結(jié)束。1) UDP1) UDP只能有一個(gè)輸出端,而且必定是端口說(shuō)明列表的第一項(xiàng)。只能有一個(gè)輸出端,而且必定是端口說(shuō)明列表的第一項(xiàng)。2) UDP2) UDP可以有多個(gè)輸入端,最多允許有可以有多個(gè)輸入端,最多允許有1010個(gè)輸入端。個(gè)輸入端。3) UDP3) UDP所有端口變量必須是標(biāo)量,也就是必須是所有端口變量必須是標(biāo)量,也就是必須是1 1位的。位的。4) 4) 在在UDPUDP的真值表項(xiàng)中,只允許出現(xiàn)的真值表項(xiàng)中,只允許出現(xiàn)0 0、1 1、X X三種邏輯值,高阻值狀態(tài)三種

10、邏輯值,高阻值狀態(tài)Z Z是不允許出現(xiàn)的。是不允許出現(xiàn)的。5) 5) 只有輸出端才可以被定義為寄存器類型變量。只有輸出端才可以被定義為寄存器類型變量。6) initial6) initial語(yǔ)句用于為時(shí)序電路內(nèi)部寄存器賦初值,只允許賦語(yǔ)句用于為時(shí)序電路內(nèi)部寄存器賦初值,只允許賦0 0、1 1、X X三種三種邏輯值,缺省值為邏輯值,缺省值為X X。Verilog Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程數(shù)字系統(tǒng)設(shè)計(jì)教程第二講第二講 如何編寫和驗(yàn)證簡(jiǎn)單如何編寫和驗(yàn)證簡(jiǎn)單的純組合邏輯模塊的純組合邏輯模塊宋萬(wàn)杰宋萬(wàn)杰西安電子科技大學(xué)西安電子科技大學(xué)雷達(dá)信號(hào)處理國(guó)家重點(diǎn)實(shí)驗(yàn)室雷達(dá)信號(hào)處理國(guó)家重點(diǎn)實(shí)驗(yàn)室 數(shù)字邏輯系

11、統(tǒng)設(shè)計(jì)是一個(gè)非常細(xì)致、嚴(yán)密和費(fèi)時(shí)的復(fù)雜過(guò)程,做這項(xiàng)工作的人員必須具有極其認(rèn)真負(fù)責(zé)的工作態(tài)度、敏捷的頭腦、頑強(qiáng)的毅力和細(xì)致踏實(shí)的作風(fēng) 在數(shù)字電路課程里我們已學(xué)習(xí)過(guò)一位的加法電路,即全在數(shù)字電路課程里我們已學(xué)習(xí)過(guò)一位的加法電路,即全加器。它的真值表很容易寫出,電路結(jié)構(gòu)也很簡(jiǎn)單僅由幾個(gè)加器。它的真值表很容易寫出,電路結(jié)構(gòu)也很簡(jiǎn)單僅由幾個(gè)與門和非門組成與門和非門組成。表表2.2.1 2.2.1 一位全加器的真值表一位全加器的真值表 表中Xi 、Yi 表示兩個(gè)加數(shù),Si 表示和,Ci -1 表示來(lái)自低位的進(jìn)位、Ci 表示向高位的進(jìn)位。從真值表很容易寫出邏輯表達(dá)式如下: Ci = Xi Yi + Yi C

12、i -1 + Xi Ci - 1 Si = Xi Ci + Yi Ci + Ci - 1 Ci + Xi Yi Ci - 1 module add_4( X, Y, sum, C); input 3 : 0 X, Y; output 3: 0 sum; output C; assign C, Sum = X + Y; endmodule 在數(shù)字信號(hào)處理的快速運(yùn)算電路中常常用到多位數(shù)字在數(shù)字信號(hào)處理的快速運(yùn)算電路中常常用到多位數(shù)字量的加法運(yùn)算,這時(shí)需要用到并行加法器。并行加法器比串量的加法運(yùn)算,這時(shí)需要用到并行加法器。并行加法器比串行加法器快得多,電路結(jié)構(gòu)也不太復(fù)雜。行加法器快得多,電路結(jié)構(gòu)也不

13、太復(fù)雜。 : module add_16( X, Y, sum, C); input 15 : 0 X, Y; output 15 : 0 sum; output C; assign C, Sum = X + Y; endmodule 這樣設(shè)計(jì)的加法器在行為仿真時(shí)是沒(méi)有延時(shí)的。借助綜這樣設(shè)計(jì)的加法器在行為仿真時(shí)是沒(méi)有延時(shí)的。借助綜合器,可以根據(jù)以上合器,可以根據(jù)以上Verilog HDLVerilog HDL源代碼自動(dòng)將其綜合成典源代碼自動(dòng)將其綜合成典型的加法器電路結(jié)構(gòu)。型的加法器電路結(jié)構(gòu)。 則則X 和和Y 的乘積的乘積Z 有有2n 位,并且式中位,并且式中YiX 稱為稱為部分積,記為部分積,

14、記為P i,顯然,兩個(gè)一位二進(jìn)制數(shù)相乘遵,顯然,兩個(gè)一位二進(jìn)制數(shù)相乘遵循如下規(guī)則循如下規(guī)則:00=0; 01=0; 10=0; 11=1 因此因此YiXj 可用一個(gè)與門實(shí)現(xiàn),記可用一個(gè)與門實(shí)現(xiàn),記X : Xn-1X1 X0Y : Yn-1 Y1Y02.2 乘法器乘法器圖圖2.2.3 2.2.3 逐位進(jìn)位并行乘法器逐位進(jìn)位并行乘法器 快速乘法器常采快速乘法器常采用網(wǎng)格形式的迭帶陣用網(wǎng)格形式的迭帶陣列結(jié)構(gòu),圖列結(jié)構(gòu),圖 2.2.32.2.3 示示出兩個(gè)四位二進(jìn)制數(shù)出兩個(gè)四位二進(jìn)制數(shù)相乘的結(jié)構(gòu)圖。相乘的結(jié)構(gòu)圖。2.2 乘法器乘法器 為了提高乘法運(yùn)算速度可以改為圖5.5 所示的進(jìn)位節(jié)省乘法器(Carr

15、y-Save Multiplier) module mult_4( X, Y, Product); input 3 : 0 X, Y; output 7 : 0 Product; assign Product = X * Y; endmodule module mult_8( X, Y, Product); input 7 : 0 X, Y; output 15 : 0 Product; assign Product = X * Y; endmodule 這樣設(shè)計(jì)的乘法器在行為仿真時(shí)是沒(méi)有延時(shí)的。借助綜合這樣設(shè)計(jì)的乘法器在行為仿真時(shí)是沒(méi)有延時(shí)的。借助綜合器,可以根據(jù)以上器,可以根據(jù)以上Veri

16、log HDLVerilog HDL源代碼自動(dòng)將其綜合成典型的源代碼自動(dòng)將其綜合成典型的乘法器電路結(jié)構(gòu)。乘法器電路結(jié)構(gòu)。 數(shù)值大小比較邏輯在計(jì)算邏輯中是常用的一種邏數(shù)值大小比較邏輯在計(jì)算邏輯中是常用的一種邏輯電路,一位二進(jìn)制數(shù)的比較是它的基礎(chǔ)。輯電路,一位二進(jìn)制數(shù)的比較是它的基礎(chǔ)。X Y (XY) (X=Y) (X=Y) (X=Y) (X Y)XGY = 1; / / 設(shè)置設(shè)置X X 大于大于Y Y 的信號(hào)為的信號(hào)為1 1else XGY = 0;if (X Y)XSY = 1; / / 設(shè)置設(shè)置X X 小于小于Y Y 的信號(hào)為的信號(hào)為1 1else XSY = 0;endendmodule

17、用用Verilog HDLVerilog HDL來(lái)設(shè)計(jì)比較電路是來(lái)設(shè)計(jì)比較電路是很容易的。很容易的。綜合工具能自綜合工具能自動(dòng)把以上源代碼綜動(dòng)把以上源代碼綜合成一個(gè)八位比較合成一個(gè)八位比較器器 多路器是一個(gè)多輸入、單輸出的組合邏輯電路,在數(shù)字系統(tǒng)中有著廣泛的應(yīng)用。它可以根據(jù)地址碼的不同,從多個(gè)輸入數(shù)據(jù)中選取一個(gè),讓其輸出到公共的輸出端。綜合工具能自動(dòng)把以綜合工具能自動(dòng)把以上源代碼綜合成一個(gè)數(shù)據(jù)上源代碼綜合成一個(gè)數(shù)據(jù)位寬為位寬為8 8的八路選一數(shù)據(jù)的八路選一數(shù)據(jù)多路器多路器module SampleOfBus( DataBus, link_bus,write );inout 11:0 DataB

18、us; / 總線雙向端口input link_bus; / 向總線輸出數(shù)據(jù)的控制電平reg 11:0 outsigs;assign DataBus = (link_bus) ? outsigs : 12 h zzz ; /當(dāng)link_bus 為高電平時(shí)通過(guò)總線把存在outsigs 的計(jì)算結(jié)果輸出always (posedge write) /每當(dāng)每當(dāng)write write 信號(hào)上跳沿時(shí)信號(hào)上跳沿時(shí)begin /接收總線上數(shù)據(jù)并乘以五outsigs = DataBus * 5; /把計(jì)算結(jié)果存入outsigsendendmodule 上面是一個(gè)簡(jiǎn)單的與總線有接口的模塊是如何對(duì)總線進(jìn)行操作的例子通

19、過(guò)以上例子我們可以理解使這個(gè)總線連接模塊能正常工作的最重要的因素是與其他模塊的配合n流水線(流水線(pipe-line)設(shè)計(jì)技術(shù))設(shè)計(jì)技術(shù): 流水線的設(shè)計(jì)方法已經(jīng)在高性能的、需要經(jīng)常進(jìn)行大規(guī)流水線的設(shè)計(jì)方法已經(jīng)在高性能的、需要經(jīng)常進(jìn)行大規(guī)模運(yùn)算的系統(tǒng)中得到廣泛的應(yīng)用,如模運(yùn)算的系統(tǒng)中得到廣泛的應(yīng)用,如CPU(中央處理器)等(中央處理器)等。n 流水線設(shè)計(jì)的概念流水線設(shè)計(jì)的概念: 所謂流水線設(shè)計(jì)實(shí)際上就是把規(guī)模較大、層次較多的組合所謂流水線設(shè)計(jì)實(shí)際上就是把規(guī)模較大、層次較多的組合邏輯電路分為幾個(gè)級(jí),在每一級(jí)插入寄存器組暫存中間數(shù)據(jù)。邏輯電路分為幾個(gè)級(jí),在每一級(jí)插入寄存器組暫存中間數(shù)據(jù)。n采用流水

20、線設(shè)計(jì)的優(yōu)勢(shì)在于它能提高吞吐(采用流水線設(shè)計(jì)的優(yōu)勢(shì)在于它能提高吞吐(throughput)n流水線設(shè)計(jì)在性能上的提高是以消耗較多的寄存器資源為代流水線設(shè)計(jì)在性能上的提高是以消耗較多的寄存器資源為代價(jià)的價(jià)的第一級(jí)的延遲是T1 和T3 兩個(gè)延遲中的最大值第二級(jí)的延遲等于T2 的延遲 為了通過(guò)這個(gè)組合邏輯得到穩(wěn)定的計(jì)算結(jié)為了通過(guò)這個(gè)組合邏輯得到穩(wěn)定的計(jì)算結(jié)果輸出,果輸出, 需要等待的傳播延遲為需要等待的傳播延遲為max(T1,T3)+T2個(gè)時(shí)間單位。個(gè)時(shí)間單位。寄存器的寄存器的TcoTco(觸發(fā)時(shí)間)(觸發(fā)時(shí)間) 采用流水線設(shè)計(jì)為取得穩(wěn)定的采用流水線設(shè)計(jì)為取得穩(wěn)定的輸出總體計(jì)算周期為輸出總體計(jì)算周期

21、為:max(max(T1,T3)+Tco,(T2+Tco)Verilog Verilog 數(shù)字系統(tǒng)設(shè)計(jì)教程數(shù)字系統(tǒng)設(shè)計(jì)教程第三講第三講 復(fù)雜數(shù)字系統(tǒng)的構(gòu)成復(fù)雜數(shù)字系統(tǒng)的構(gòu)成宋萬(wàn)杰宋萬(wàn)杰西安電子科技大學(xué)西安電子科技大學(xué)雷達(dá)信號(hào)處理國(guó)家重點(diǎn)實(shí)驗(yàn)室雷達(dá)信號(hào)處理國(guó)家重點(diǎn)實(shí)驗(yàn)室n組合邏輯:輸出只是當(dāng)前輸入邏輯電平的函數(shù)(有延時(shí)),與電路的原始狀態(tài)無(wú)關(guān)的邏輯電路。也就是說(shuō),當(dāng)輸入信號(hào)中的任何一個(gè)發(fā)生變化時(shí),輸出都有可能會(huì)根據(jù)其變化而變化,但與電路目前所處的狀態(tài)沒(méi)有任何關(guān)系。n時(shí)序邏輯:輸出不只是當(dāng)前輸入的邏輯電平的函數(shù),還與電路目前所處的狀態(tài)有關(guān)的邏輯電路。3.1.1 3.1.1 數(shù)字邏輯電路的種類數(shù)字邏

22、輯電路的種類3.1.2 3.1.2 數(shù)字邏輯電路的構(gòu)成數(shù)字邏輯電路的構(gòu)成組合邏輯:由與、或、非門組成的網(wǎng)絡(luò)。常用的組合電路有:多路器、數(shù)據(jù)通路開(kāi)關(guān)、加法器、乘法器.時(shí)序邏輯: 由多個(gè)觸發(fā)器和多個(gè)組合邏輯塊組成的網(wǎng)絡(luò)。常用的有:計(jì)數(shù)器、復(fù)雜的數(shù)據(jù)流動(dòng)控制邏輯、運(yùn)算控制邏輯、指令分析和操作控制邏輯。它的它的Verilog HDLVerilog HDL描述如下描述如下:define ON 1 define ON 1 b 1b 1define OFF 1 define OFF 1 b 0b 0wire ControlSwitch;wire ControlSwitch;wire 7:0 Out, In;

23、wire 7:0 Out, In;assign Out = (ControlSwtich assign Out = (ControlSwtich = = ON) ? In : 8 = = ON) ? In : 8 h00h00;組合邏輯舉例之一:組合邏輯舉例之一:數(shù)據(jù)通道開(kāi)關(guān)的邏輯圖 數(shù)據(jù)通道開(kāi)關(guān)的輸出波形圖它的Verilog HDL描述如下:define ON 1 define ON 1 b 1b 1define OFF 1 define OFF 1 b 0b 0wire LinkBusSwitch;wire LinkBusSwitch;wire 7:0 outbuf;wire 7:0 ou

24、tbuf;inout 7:0 bus;inout 7:0 bus;assign bus = (LinkBusSwitch= = assign bus = (LinkBusSwitch= = ON) ? outbuf : 8 ON) ? outbuf : 8 hzzhzz組合邏輯舉例之二三態(tài)數(shù)據(jù)通道開(kāi)關(guān)的邏輯圖數(shù)據(jù)流通波形圖 它與組合邏輯舉例之一的差別只在前者在開(kāi)關(guān)斷開(kāi)時(shí)輸出為零,而后者在開(kāi)關(guān)斷開(kāi)時(shí)輸出為高阻,即與總線脫離連接。 組合邏輯電路的輸出與每個(gè)輸入信號(hào)的電平直接相組合邏輯電路的輸出與每個(gè)輸入信號(hào)的電平直接相關(guān)。如果能使組合邏輯電路的輸入穩(wěn)定一段時(shí)間,就可以關(guān)。如果能使組合邏輯電路的輸入

25、穩(wěn)定一段時(shí)間,就可以得到組合邏輯電路的理想輸出。而輸出要被下一階段的運(yùn)得到組合邏輯電路的理想輸出。而輸出要被下一階段的運(yùn)算作為輸入,也必須要有一段時(shí)間的穩(wěn)定,因而輸出的結(jié)算作為輸入,也必須要有一段時(shí)間的穩(wěn)定,因而輸出的結(jié)果必須保存在寄存器組中。果必須保存在寄存器組中。3.1.3 3.1.3 數(shù)據(jù)在寄存器中的暫時(shí)保存數(shù)據(jù)在寄存器中的暫時(shí)保存3.1.4 3.1.4 數(shù)據(jù)流動(dòng)的控制數(shù)據(jù)流動(dòng)的控制 組合邏輯計(jì)算電路中設(shè)有許多寄存器組,它們是用來(lái)組合邏輯計(jì)算電路中設(shè)有許多寄存器組,它們是用來(lái)暫存運(yùn)算的中間數(shù)據(jù)。對(duì)寄存器組之間數(shù)據(jù)流動(dòng)進(jìn)行精確暫存運(yùn)算的中間數(shù)據(jù)。對(duì)寄存器組之間數(shù)據(jù)流動(dòng)進(jìn)行精確的控制,在算法

26、的實(shí)現(xiàn)過(guò)程中有著及其重要的作用。這種的控制,在算法的實(shí)現(xiàn)過(guò)程中有著及其重要的作用。這種控制是由同步狀態(tài)機(jī)實(shí)現(xiàn)的控制是由同步狀態(tài)機(jī)實(shí)現(xiàn)的 同步時(shí)序邏輯是指表示狀態(tài)的寄存器組的值只可能在唯同步時(shí)序邏輯是指表示狀態(tài)的寄存器組的值只可能在唯一確定的觸發(fā)條件發(fā)生時(shí)刻改變。只能由時(shí)鐘的正跳沿或負(fù)跳一確定的觸發(fā)條件發(fā)生時(shí)刻改變。只能由時(shí)鐘的正跳沿或負(fù)跳沿觸發(fā)的狀態(tài)機(jī)就是一例。沿觸發(fā)的狀態(tài)機(jī)就是一例。 用用Verilog HDL Verilog HDL 設(shè)計(jì)的可綜合模塊設(shè)計(jì)的可綜合模塊, ,必須避免使用異步時(shí)必須避免使用異步時(shí)序邏輯,這不但是因?yàn)樵S多綜合器不支持異步時(shí)序邏輯的綜序邏輯,這不但是因?yàn)樵S多綜合器不

27、支持異步時(shí)序邏輯的綜合,而且也因?yàn)橛卯惒綍r(shí)序邏輯確實(shí)很難來(lái)控制由組合邏輯合,而且也因?yàn)橛卯惒綍r(shí)序邏輯確實(shí)很難來(lái)控制由組合邏輯和延遲所產(chǎn)生的冒險(xiǎn)和競(jìng)爭(zhēng)。和延遲所產(chǎn)生的冒險(xiǎn)和競(jìng)爭(zhēng)。 同步時(shí)序邏輯比異步時(shí)序邏輯具有更可靠更簡(jiǎn)單的邏輯同步時(shí)序邏輯比異步時(shí)序邏輯具有更可靠更簡(jiǎn)單的邏輯關(guān)系。如果我們強(qiáng)行作出規(guī)定,用關(guān)系。如果我們強(qiáng)行作出規(guī)定,用Verilog Verilog 來(lái)設(shè)計(jì)可綜合的來(lái)設(shè)計(jì)可綜合的狀態(tài)機(jī)必須使用同步時(shí)序邏輯狀態(tài)機(jī)必須使用同步時(shí)序邏輯, ,有了這個(gè)前提條件,實(shí)現(xiàn)自動(dòng)有了這個(gè)前提條件,實(shí)現(xiàn)自動(dòng)生成電路結(jié)構(gòu)的綜合器就有了可能。生成電路結(jié)構(gòu)的綜合器就有了可能。Verilog Verilog

28、數(shù)字系統(tǒng)設(shè)計(jì)教程數(shù)字系統(tǒng)設(shè)計(jì)教程第四講第四講 同步狀態(tài)機(jī)的原理、結(jié)構(gòu)和設(shè)計(jì)同步狀態(tài)機(jī)的原理、結(jié)構(gòu)和設(shè)計(jì)宋萬(wàn)杰宋萬(wàn)杰西安電子科技大學(xué)西安電子科技大學(xué)雷達(dá)信號(hào)處理國(guó)家重點(diǎn)實(shí)驗(yàn)室雷達(dá)信號(hào)處理國(guó)家重點(diǎn)實(shí)驗(yàn)室 有限狀態(tài)機(jī)是由寄存器組和組合邏輯構(gòu)成的有限狀態(tài)機(jī)是由寄存器組和組合邏輯構(gòu)成的硬件時(shí)序電路,其狀態(tài)(即由寄存器組的硬件時(shí)序電路,其狀態(tài)(即由寄存器組的1 1和和0 0的的組合狀態(tài)所構(gòu)成的有限個(gè)狀態(tài))只可能在同一時(shí)組合狀態(tài)所構(gòu)成的有限個(gè)狀態(tài))只可能在同一時(shí)鐘跳變沿的情況下才能從一個(gè)狀態(tài)轉(zhuǎn)向另一個(gè)狀鐘跳變沿的情況下才能從一個(gè)狀態(tài)轉(zhuǎn)向另一個(gè)狀態(tài),究竟轉(zhuǎn)向哪一狀態(tài)還是留在原狀態(tài)不但取決態(tài),究竟轉(zhuǎn)向哪一狀態(tài)還

29、是留在原狀態(tài)不但取決于各個(gè)輸入值,還取決于當(dāng)前所在狀態(tài)。(這里于各個(gè)輸入值,還取決于當(dāng)前所在狀態(tài)。(這里指的是米里指的是米里MealyMealy型有限狀態(tài)機(jī),而莫爾型有限狀態(tài)機(jī),而莫爾MooreMoore型有限狀態(tài)機(jī)究竟轉(zhuǎn)向哪一狀態(tài)只決于當(dāng)前狀型有限狀態(tài)機(jī)究竟轉(zhuǎn)向哪一狀態(tài)只決于當(dāng)前狀態(tài)。)態(tài)。) 在在Verilog HDL中可以用許多種方法來(lái)描述有限狀態(tài)機(jī),中可以用許多種方法來(lái)描述有限狀態(tài)機(jī),最常用的方法是用最常用的方法是用always語(yǔ)句和語(yǔ)句和case語(yǔ)句。下面的狀態(tài)轉(zhuǎn)移語(yǔ)句。下面的狀態(tài)轉(zhuǎn)移圖表示了一個(gè)有限狀態(tài)機(jī)圖表示了一個(gè)有限狀態(tài)機(jī) 圖中所示的狀態(tài)轉(zhuǎn)移圖中所示的狀態(tài)轉(zhuǎn)移圖表示了一個(gè)四狀態(tài)

30、的有圖表示了一個(gè)四狀態(tài)的有限狀態(tài)機(jī),它的同步時(shí)鐘限狀態(tài)機(jī),它的同步時(shí)鐘是是Clock,輸入信號(hào)是輸入信號(hào)是 A 和和 Reset,輸出信號(hào)是輸出信號(hào)是 F 和和 G。狀態(tài)的轉(zhuǎn)移只能在同步時(shí)狀態(tài)的轉(zhuǎn)移只能在同步時(shí)鐘(鐘(Clock)的上升沿時(shí))的上升沿時(shí)發(fā)生,往哪個(gè)狀態(tài)的轉(zhuǎn)移發(fā)生,往哪個(gè)狀態(tài)的轉(zhuǎn)移則取決于目前所在的狀態(tài)則取決于目前所在的狀態(tài)和輸入的信號(hào)和輸入的信號(hào)Reset 和和 A) 例例4.1:4.1:module fsm (Clock, Reset, A, K2, K1); input Clock, Reset, A; output K2, K1; reg K2 , K1; reg 1:0

31、 state ;Parameter Idle = 2b00, Start = 2b01; Stop = 2b10, Clear = 2b11;always (posedge Clock) if (! Reset) begin state = Idle; K2 =0; K1 =0; end else case (state) Idle : begin if (A) begin state = Start; K1 =0; end else state = idle; end Start : begin if (!A) state = Stop; else state = start; endSto

32、p : begin if (A) begin state = Clear; K2 = 1; end else state = Stop; endClear : begin if (! A) begin state =Idle; K2=0; K1=1; end else state = Clear; end endcaseendmodule例例4.1 4.1 采用采用GrayGray碼碼例例4.2:module fsm (Clock, Reset, A, K2, K1); input Clock, Reset, A; output K2,K1; reg K2,K1; reg 3:0 state

33、; parameter Idle = 4b1000, Start = 4b0100, Stop = 4b0010, Clear = 4b0001; always (posedge clock) if ( ! Reset) begin state = Idle; K2=0; K1=0; end else case (state) Idle: begin if (A) begin state = Start; K1=0; end else state = Idle; endStart: begin if (!A) state = Stop; else state = Start; endStop:

34、 begin if (A) begin state = Clear; K2 = 1; end else state = Stop; endClear: begin if (!A) begin state =Idle; K2=0; K1=1; end else state = Clear; end default: state =Idle; endcaseendmodule例4.2采用了獨(dú)熱編碼例例4.3Module fsm( Clock, Reset, A, K2, K1); input Clock, Reset, A; output K2, K1; reg 3:0 state; assign

35、 K2=state3; assign K1=state0; parameter Zero = 4b0_0_0_0, Idle = 4b0_0_0_1, Start = 4b0_1_0_0, Stop = 4b0_0_1_0, Clear = 4b1_0_0_0; always (posedge Clock) if ( ! Reset) begin state=Zero; end else Case (state) Idle,Zero: begin if (A) begin state=Start; end else state=Idle; endStart: begin if (! A) st

36、ate=Stop; else state=Start; endStop: begin if (A) begin state=Clear; end else state=Stop; endClear: begin if(!A) begin state=Idle; end else state=Clear; endDefault: state=Zero;endcaseendmodule例4.3 把輸出直接指定為狀態(tài)碼例例4.4module fsm (Clock, Reset, A, K2, K1); input Clock, Reset, A; output K2, K1; reg K2, K1;

37、 reg 1:0 state;parameter Idle = 2b00, Start = 2b01, Stop = 2b10, Clear = 2b11;always (posedge Clock) if ( ! Reset) state = Idle; else case(state) Idle: begin if (A) begin state = Start; end else state = Idle; end Start: begin if ( ! A) state = Stop; else state = Start; endStop: begin if (A) state =

38、Clear; else state = Stop; endClear: begin if ( ! A) state = Idle; else state = Clear; endDefault : state y ) begin tmp = x; x = y; y = tmp; end endtaskendmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例 例例5.4. 5.4. 比較器的設(shè)計(jì)實(shí)例(利用賦值語(yǔ)句設(shè)比較器的設(shè)計(jì)實(shí)例(利用賦值語(yǔ)句設(shè)計(jì)組合邏輯)計(jì)組合邏輯) module compare(equal,a,b); parameter size=1; outpu

39、t equal; input size-1:0 a, b; assign equal =(a=b)? 1 : 0; endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例 例例5.5. 3-85.5. 3-8譯碼器設(shè)計(jì)實(shí)例(利用賦值語(yǔ)句譯碼器設(shè)計(jì)實(shí)例(利用賦值語(yǔ)句設(shè)計(jì)組合邏輯)設(shè)計(jì)組合邏輯) module decoder(out,in); output 7:0 out; input 2:0 in; assign out = 1b1in; / /* * * * * 把最低位的把最低位的1 1左移左移 inin(根據(jù)從(根據(jù)從inin口輸入的值)位,并賦予口輸入的值)位

40、,并賦予out out * * * * */ / endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例 例例5.6. 8-35.6. 8-3編碼器的設(shè)計(jì)實(shí)例編碼器的設(shè)計(jì)實(shí)例 u 編碼器設(shè)計(jì)方案之一:編碼器設(shè)計(jì)方案之一:module encoder1(none_on,out,in); output none_on; output 2:0 out; input 7:0 in; reg 2:0 out; reg none_on; always (in) begin: local Integer i; out = 0; none_on = 1; /*returns the

41、 value of the highest bitnumber turned on*/ for( i=0; i8; i=i+1 ) begin if( ini ) begin out = i; none_on = 0; end end endendmodule 5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例module encoder2 ( none_on, out2, out1, out0, h, g, f, e, d, c, b, a); input h, g, f, e, d, c, b, a; output none_on, out2, out1, out0; wir

42、e 3:0 outvec; assign outvec= h? 4b0111 : g? 4b0110 : f? 4b0101: e? 4b0100 : d? 4b0011 :c? 4b0010 : b? 4b0001: a? 4b0000 : 4b1000; assign none_on = outvec3; assign out2 = outvec2; assign out1 = outvec1; assign out0 = outvec0;endmoduleu 編碼器設(shè)計(jì)方案之二:編碼器設(shè)計(jì)方案之二:5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例module encode

43、r3 (none_on, out2, out1, out0, h, g, f, e, d, c, b, a); input h, g, f, e, d, c, b, a; output out2, out1, out0; output none_on; reg 3:0 outvec;assign none_on,out2,out1,out0 = outvec;always ( a or b or c or d or e or f or g or h)u 編碼器設(shè)計(jì)方案之三:編碼器設(shè)計(jì)方案之三: begin if(h) outvec=4b0111; else if(g) outvec=4b011

44、0; else if(f) outvec=4b0101; else if(e) outvec=4b0100; else if(d) outvec=4b0011; else if(c) outvec=4b0010; else if(b) outvec=4b0001; else if(a) outvec=4b0000; else outvec=4b1000; endendmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例 例例5.7. 5.7. 多路器的設(shè)計(jì)實(shí)例。多路器的設(shè)計(jì)實(shí)例。 使用連續(xù)賦值、使用連續(xù)賦值、casecase語(yǔ)句或語(yǔ)句或if-elseif-else語(yǔ)句可

45、以生成多路器語(yǔ)句可以生成多路器電路,如果條件語(yǔ)句(電路,如果條件語(yǔ)句(casecase或或if-elseif-else)中分支條件是互斥)中分支條件是互斥的話,綜合器能自動(dòng)地生成并行的多路器。的話,綜合器能自動(dòng)地生成并行的多路器。n 多路器設(shè)計(jì)方案之一多路器設(shè)計(jì)方案之一: :modul emux1(out, a, b, sel); output out; input a, b, sel; assign out = sel? A : b;endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例n多路器設(shè)計(jì)方案之二: module mux2( out, a, b, sel

46、); output out; input a, b, sel; reg out; /用電平觸發(fā)的用電平觸發(fā)的alwaysalways塊來(lái)設(shè)計(jì)多路器的組合邏輯塊來(lái)設(shè)計(jì)多路器的組合邏輯 always ( a or b or sel ) begin /*檢查輸入信號(hào)檢查輸入信號(hào)sel的值,如為的值,如為1,輸出,輸出out為為a,如為如為0,輸出,輸出out為為 b.*/ case( sel ) 1b1: out = a; 1b0: out = b; default: out = bx; endcase end endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例n多路

47、器設(shè)計(jì)方案之三多路器設(shè)計(jì)方案之三: : module mux3( out, a, b, sel); output out; input a, b, sel; reg out; always ( a or b or sel ) begin if( sel ) out = a; else out = b; end endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例 例例5.8. 5.8. 奇偶校驗(yàn)位生成器設(shè)計(jì)實(shí)例奇偶校驗(yàn)位生成器設(shè)計(jì)實(shí)例module parity( even_numbits,odd_numbits,input_bus); output even_nu

48、mbits, odd_numbits; input 7:0 input_bus; assign odd_numbits = input_bus; assign even_numbits = odd_numbits;endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例 例例5.9. 5.9. 三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)實(shí)例(用連續(xù)賦三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)實(shí)例(用連續(xù)賦值語(yǔ)句建立三態(tài)門模型)值語(yǔ)句建立三態(tài)門模型)n 三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案之一三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案之一: : module trist1( out, in, enable); output out; input in

49、, enable; assign out = enable? in: bz; endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例n三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案之二三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案之二: : module trist2( out, in, enable ); output out; input in, enable; /bufif1是是 一個(gè)一個(gè) Verilog門級(jí)原語(yǔ)(門級(jí)原語(yǔ)(primitive) bufif1 mybuf1(out, in, enable); endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例n三態(tài)輸出驅(qū)動(dòng)器設(shè)

50、計(jì)方案之二三態(tài)輸出驅(qū)動(dòng)器設(shè)計(jì)方案之二: :module trist2( out, in, enable ); output out; input in, enable; /bufif1是是 一個(gè)一個(gè) Verilog門級(jí)原語(yǔ)(門級(jí)原語(yǔ)(primitive) bufif1 mybuf1(out, in, enable);endmodule5.5.1 5.5.1 組合邏輯電路設(shè)計(jì)實(shí)例組合邏輯電路設(shè)計(jì)實(shí)例 例例5.10. 5.10. 三態(tài)雙向驅(qū)動(dòng)器設(shè)計(jì)實(shí)例三態(tài)雙向驅(qū)動(dòng)器設(shè)計(jì)實(shí)例module bidir(tri_inout, out, in, en, b); inout tri_inout; outpu

51、t out; input in, en, b; assign tri_inout = en? In : bz; assign out = tri_inout b;endmodule5.5.2 5.5.2 時(shí)序邏輯電路設(shè)計(jì)實(shí)例時(shí)序邏輯電路設(shè)計(jì)實(shí)例 例例5.115.11觸發(fā)器設(shè)計(jì)實(shí)例觸發(fā)器設(shè)計(jì)實(shí)例 module dff( q, data, clk); output q; input data, clk; reg q; always ( posedge clk ) begin q = data; end endmodule5.5.2 5.5.2 時(shí)序邏輯電路設(shè)計(jì)實(shí)例時(shí)序邏輯電路設(shè)計(jì)實(shí)例 例例5.12

52、. 5.12. 電平敏感型鎖存器設(shè)計(jì)實(shí)例之一電平敏感型鎖存器設(shè)計(jì)實(shí)例之一 module latch1( q, data, clk); output q; input data, clk; assign q = clk? data : q; endmodule5.5.2 5.5.2 時(shí)序邏輯電路設(shè)計(jì)實(shí)例時(shí)序邏輯電路設(shè)計(jì)實(shí)例 例例5.13. 5.13. 帶置位和復(fù)位端的電平敏感型鎖存器帶置位和復(fù)位端的電平敏感型鎖存器設(shè)計(jì)實(shí)例之二設(shè)計(jì)實(shí)例之二 module latch2( q, data, clk, set, reset); output q; input data, clk, set, reset

53、; assign q= reset? 0 : ( set? 1:(clk? data : q ) );endmodule5.5.2 5.5.2 時(shí)序邏輯電路設(shè)計(jì)實(shí)例時(shí)序邏輯電路設(shè)計(jì)實(shí)例 例例5.14. 5.14. 電平敏感型鎖存器設(shè)計(jì)實(shí)例之三電平敏感型鎖存器設(shè)計(jì)實(shí)例之三 module latch3( q, data, clk); output q; input data, clk; reg q; always (clk or data) begin if(clk) q=data; end endmodule注意:有的綜合器會(huì)產(chǎn)生一注意:有的綜合器會(huì)產(chǎn)生一警告信息警告信息 告訴你產(chǎn)生了一告訴你產(chǎn)

54、生了一個(gè)電平敏感型鎖存器。因?yàn)閭€(gè)電平敏感型鎖存器。因?yàn)槲覀冊(cè)O(shè)計(jì)的就是一個(gè)電平敏我們?cè)O(shè)計(jì)的就是一個(gè)電平敏感型鎖存器,就不用管這個(gè)感型鎖存器,就不用管這個(gè)警告信息。警告信息。5.5.2 5.5.2 時(shí)序邏輯電路設(shè)計(jì)實(shí)例時(shí)序邏輯電路設(shè)計(jì)實(shí)例 例例5.15. 5.15. 移位寄存器設(shè)計(jì)實(shí)例移位寄存器設(shè)計(jì)實(shí)例 module shifter( din, clk, clr, dout); input din, clk, clr; output 7:0 dout; reg 7:0 dout; always (posedge clk) begin if(clr) /清零 dout = 8b0; else beg

55、in dout = dout1; /左移一位 dout0 = din; /把輸入信號(hào)放入寄存器的最低位 end end endmodule5.5.2 5.5.2 時(shí)序邏輯電路設(shè)計(jì)實(shí)例時(shí)序邏輯電路設(shè)計(jì)實(shí)例 例例5.16. 5.16. 八位計(jì)數(shù)器設(shè)計(jì)實(shí)例之一八位計(jì)數(shù)器設(shè)計(jì)實(shí)例之一 module counter1( out, cout, data, load, cin, clk); output 7:0 out; output cout; input 7:0 data; input load, cin, clk; reg 7:0 out; always (posedge clk) begin if(

56、 load ) out = data; else out = out + cin; end assign cout= & out & cin; /只有當(dāng)只有當(dāng)out7:0的所有各位都為的所有各位都為1,并且進(jìn)位并且進(jìn)位cin也為也為1時(shí)才能產(chǎn)生進(jìn)位時(shí)才能產(chǎn)生進(jìn)位cout endmodule5.5.2 5.5.2 時(shí)序邏輯電路設(shè)計(jì)實(shí)例時(shí)序邏輯電路設(shè)計(jì)實(shí)例 例例5.17. 5.17. 八位計(jì)數(shù)器設(shè)計(jì)實(shí)例之二八位計(jì)數(shù)器設(shè)計(jì)實(shí)例之二module counter2( out, cout, data, load, cin, clk); output 7:0 out; output cout; input

57、7:0 data; input load, cin, clk; reg 7:0 out; reg cout; reg 7:0 preout; /創(chuàng)建創(chuàng)建8位寄存器位寄存器 always (posedge clk) begin out = preout; end/*計(jì)算計(jì)數(shù)器和進(jìn)位的下一個(gè)狀態(tài),注意:為提高性能不希望加載影響進(jìn)位*/always ( out or data or load or cin ) begin cout, preout = out + cin; if(load) preout = data; endendmodule5.6.1 5.6.1 狀態(tài)機(jī)的異步置位與復(fù)位狀態(tài)機(jī)的異

58、步置位與復(fù)位( ( ) ) 沿關(guān)鍵詞包括沿關(guān)鍵詞包括 posedge(用(用于高電平有效的于高電平有效的set、reset或上或上升沿觸發(fā)的時(shí)鐘)和升沿觸發(fā)的時(shí)鐘)和 negedge(用于低電平有效的(用于低電平有效的set、reset或下降沿觸發(fā)的時(shí)鐘),信號(hào)可或下降沿觸發(fā)的時(shí)鐘),信號(hào)可以按任意順序列出。以按任意順序列出。1)異步、高電平有效的置位(時(shí)鐘的上升沿)異步、高電平有效的置位(時(shí)鐘的上升沿)(posedge clk or posedge set)2) 異步低電平有效的復(fù)位(時(shí)鐘的上升沿)異步低電平有效的復(fù)位(時(shí)鐘的上升沿) (posedge clk or negedge rese

59、t)3) 異步低電平有效的置位和高電平有效的復(fù)位(時(shí)鐘的上升沿)異步低電平有效的置位和高電平有效的復(fù)位(時(shí)鐘的上升沿) ( posedge clk or negedge set or posedge reset )5.6.1 5.6.1 狀態(tài)機(jī)的異步置位與復(fù)位狀態(tài)機(jī)的異步置位與復(fù)位4) 4) 帶異步高電平有效的置位與復(fù)位的帶異步高電平有效的置位與復(fù)位的alwaysalways塊樣板塊樣板always (posedge clk or posedge set or posedge reset) begin if(reset) begin /*置輸出為置輸出為0*/ end else if(set)

60、 begin /*置輸出為置輸出為1*/ end else begin /*與時(shí)鐘同步的邏輯與時(shí)鐘同步的邏輯*/ end end5.6.1 5.6.1 狀態(tài)機(jī)的異步置位與復(fù)位狀態(tài)機(jī)的異步置位與復(fù)位5) 帶異步高電平有效的置/復(fù)位端的D觸發(fā)器實(shí)例module dff1( q, qb, d, clk, set, reset ); input d, clk, set, reset; output q, qb; /聲明聲明q和和qb為為reg類型類型,因?yàn)樗枰谝驗(yàn)樗枰赼lways塊塊內(nèi)賦值內(nèi)賦值 reg q, qb; always ( posedge clk or posedge set or

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論