第4講 Verilog HDL高級(jí)編程技術(shù)_第1頁(yè)
第4講 Verilog HDL高級(jí)編程技術(shù)_第2頁(yè)
第4講 Verilog HDL高級(jí)編程技術(shù)_第3頁(yè)
第4講 Verilog HDL高級(jí)編程技術(shù)_第4頁(yè)
第4講 Verilog HDL高級(jí)編程技術(shù)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(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 HDL高級(jí)編程技術(shù)高級(jí)編程技術(shù)參見(jiàn)課本的第參見(jiàn)課本的第4,9,10章章v加法器設(shè)計(jì)加法器設(shè)計(jì)v乘法器設(shè)計(jì)乘法器設(shè)計(jì)v除法器的設(shè)計(jì)除法器的設(shè)計(jì)v奇數(shù)分頻與小數(shù)分頻奇數(shù)分頻與小數(shù)分頻v有限狀態(tài)機(jī)設(shè)計(jì)有限狀態(tài)機(jī)設(shè)計(jì)v基于宏功能模塊的設(shè)計(jì)基于宏功能模塊的設(shè)計(jì)v設(shè)計(jì)的可綜合性設(shè)計(jì)的可綜合性加法器設(shè)計(jì)加法器設(shè)計(jì)v加法、乘法作為基本的運(yùn)算,大量應(yīng)用在數(shù)字信加法、乘法作為基本的運(yùn)算,大量應(yīng)用在數(shù)字信號(hào)處理和數(shù)字通信的各種算法中。由于加法器、號(hào)處理和數(shù)字通信的各種算法中。由于加法器、乘法器使用頻繁,所以其速度往往影響著整個(gè)系乘法器使用頻繁,所以其速度往往影響著整個(gè)系統(tǒng)的運(yùn)行速度。如

2、果可實(shí)現(xiàn)快速加法器和快速乘統(tǒng)的運(yùn)行速度。如果可實(shí)現(xiàn)快速加法器和快速乘法器的設(shè)計(jì),則可以提高整個(gè)系統(tǒng)的速度。法器的設(shè)計(jì),則可以提高整個(gè)系統(tǒng)的速度。v加法運(yùn)算是最基本的運(yùn)算,在多少情況下,無(wú)論加法運(yùn)算是最基本的運(yùn)算,在多少情況下,無(wú)論是乘法、除法、加法還是是乘法、除法、加法還是FFT等運(yùn)算,最終都可等運(yùn)算,最終都可以分解為加法運(yùn)算來(lái)實(shí)現(xiàn)。以分解為加法運(yùn)算來(lái)實(shí)現(xiàn)。v加法運(yùn)算有:級(jí)連加法器、并行加法器、超前進(jìn)加法運(yùn)算有:級(jí)連加法器、并行加法器、超前進(jìn)位加法器、流水線加法器等位加法器、流水線加法器等v 1.級(jí)連加法器的設(shè)計(jì)見(jiàn)課本級(jí)連加法器的設(shè)計(jì)見(jiàn)課本P184-P185。 級(jí)連加法器是由級(jí)連加法器是由1位

3、全加器級(jí)連構(gòu)成的,本級(jí)的進(jìn)位輸出作為位全加器級(jí)連構(gòu)成的,本級(jí)的進(jìn)位輸出作為下一級(jí)的進(jìn)位輸入。下一級(jí)的進(jìn)位輸入。 級(jí)連加法器結(jié)構(gòu)簡(jiǎn)單,但級(jí)連加法器結(jié)構(gòu)簡(jiǎn)單,但N位級(jí)連加法運(yùn)算的延時(shí)是位級(jí)連加法運(yùn)算的延時(shí)是1位全加位全加器的器的N倍,延時(shí)主要是進(jìn)位信號(hào)級(jí)連造成倍,延時(shí)主要是進(jìn)位信號(hào)級(jí)連造成的。在需要高性能的的。在需要高性能的設(shè)計(jì)中,這種加法結(jié)構(gòu)不宜采用。設(shè)計(jì)中,這種加法結(jié)構(gòu)不宜采用。例程如下:例程如下:module full_add1(a,b,cin,sum,cout);input a,b,cin; output sum,cout; wire s1,m1,m2,m3;and (m1,a,b),(m

4、2,b,cin),(m3,a,cin);xor (s1,a,b),(sum,s1,cin);or (cout,m1,m2,m3);endmodulemodule add8(sum,cout,a,b,cin);input7:0 a,b; input cin; output7:0 sum; output cout;full_add1 f0(a0,b0,cin,sum0,cin1);full_add1 f1(a1,b1,cin1,sum1,cin2);full_add1 f2(a2,b2,cin2,sum2,cin3);full_add1 f3(a3,b3,cin3,sum3,cin4);full_

5、add1 f4(a4,b4,cin4,sum4,cin5);full_add1 f5(a5,b5,cin5,sum5,cin6);full_add1 f6(a6,b6,cin6,sum6,cin7);full_add1 f7(a7,b7,cin7,sum7,cout);endmodule v2.并行加法器:并行加法器可采用并行加法器:并行加法器可采用Verilog HDL的的加法運(yùn)算符直接描述加法運(yùn)算符直接描述,借助于,借助于EDA綜合軟件和綜合軟件和HDL描述語(yǔ)言,實(shí)現(xiàn)起來(lái)很容易,描述語(yǔ)言,實(shí)現(xiàn)起來(lái)很容易,其運(yùn)算速度快,但耗用其運(yùn)算速度快,但耗用資源多,尤其是當(dāng)加法運(yùn)算的位數(shù)較寬時(shí)資源多,尤

6、其是當(dāng)加法運(yùn)算的位數(shù)較寬時(shí),其耗用的,其耗用的資源將會(huì)較大。資源將會(huì)較大。module add_bx(cout,sum,a,b,cin);input7:0 a,b; input cin; output7:0 sum; output cout;assign cout,sum = a+b+cin;endmodulev3.流水線加法器:流水線加法器: 為保證數(shù)據(jù)吞吐率,電路設(shè)計(jì)中的一個(gè)主要問(wèn)題就為保證數(shù)據(jù)吞吐率,電路設(shè)計(jì)中的一個(gè)主要問(wèn)題就是要維持系統(tǒng)時(shí)鐘的速度處于或高于某一頻率。例如,是要維持系統(tǒng)時(shí)鐘的速度處于或高于某一頻率。例如,如果整個(gè)系統(tǒng)是一個(gè)全同步時(shí)鐘,同時(shí)又必須運(yùn)行在如果整個(gè)系統(tǒng)是一個(gè)全同

7、步時(shí)鐘,同時(shí)又必須運(yùn)行在25MHz的頻率上,那么,從任何寄存器的輸出到它的頻率上,那么,從任何寄存器的輸出到它饋給信號(hào)的寄存器輸入路徑間的最大時(shí)延必須小于饋給信號(hào)的寄存器輸入路徑間的最大時(shí)延必須小于40ns。如果通過(guò)某些復(fù)雜邏輯的延時(shí)路徑比較長(zhǎng),。如果通過(guò)某些復(fù)雜邏輯的延時(shí)路徑比較長(zhǎng),系統(tǒng)時(shí)鐘的速度就很難維持。這時(shí),就必須在組合邏系統(tǒng)時(shí)鐘的速度就很難維持。這時(shí),就必須在組合邏輯間插入觸發(fā)器,使復(fù)雜的組合邏輯形成流水線。雖輯間插入觸發(fā)器,使復(fù)雜的組合邏輯形成流水線。雖然流水線會(huì)增加器件資源的使用,但它降低了寄存器然流水線會(huì)增加器件資源的使用,但它降低了寄存器間的傳播延時(shí),保證系統(tǒng)維持高的系統(tǒng)時(shí)鐘

8、速度。間的傳播延時(shí),保證系統(tǒng)維持高的系統(tǒng)時(shí)鐘速度。 v 流水線設(shè)計(jì)的基本思想是在邏輯電路中加入若干寄存器來(lái)暫存流水線設(shè)計(jì)的基本思想是在邏輯電路中加入若干寄存器來(lái)暫存中間結(jié)果,雖然多用了一些寄存器資源,但減少了每一級(jí)組合中間結(jié)果,雖然多用了一些寄存器資源,但減少了每一級(jí)組合電路的時(shí)延,因此可提高整個(gè)電路的運(yùn)行效率。電路的時(shí)延,因此可提高整個(gè)電路的運(yùn)行效率。v 流水線設(shè)計(jì)可有效提高系統(tǒng)的工作頻率,尤其是對(duì)于流水線設(shè)計(jì)可有效提高系統(tǒng)的工作頻率,尤其是對(duì)于FPGA器器件。件。FPGA的邏輯單元中有大量的邏輯單元中有大量4到到5變量的查找表變量的查找表(LUT)以以及大量的觸發(fā)器,因此在及大量的觸發(fā)器,

9、因此在FPGA設(shè)計(jì)中采用流水線技術(shù)可以有設(shè)計(jì)中采用流水線技術(shù)可以有效提高系統(tǒng)的速度。效提高系統(tǒng)的速度。v 實(shí)際中的乘法器大多是有時(shí)鐘引腳的,以連續(xù)不斷地進(jìn)行乘法實(shí)際中的乘法器大多是有時(shí)鐘引腳的,以連續(xù)不斷地進(jìn)行乘法運(yùn)算。在有時(shí)鐘信號(hào)的乘法器中,可以采用流水線設(shè)計(jì)技術(shù),運(yùn)算。在有時(shí)鐘信號(hào)的乘法器中,可以采用流水線設(shè)計(jì)技術(shù),以提高系統(tǒng)的運(yùn)行頻率。同樣加法器也可以采用流水線設(shè)計(jì)。以提高系統(tǒng)的運(yùn)行頻率。同樣加法器也可以采用流水線設(shè)計(jì)。v 下面的例子就是一個(gè)兩個(gè)流水下面的例子就是一個(gè)兩個(gè)流水8位加法,由兩個(gè)位加法,由兩個(gè)4位加法器構(gòu)位加法器構(gòu)成,輸出存儲(chǔ)在寄存器中。成,輸出存儲(chǔ)在寄存器中。module

10、add8(cout,sum,a,b,cin,en);input7:0 a,b; input cin,en;output7:0 sum; output cout;reg7:0 sum; reg cout;reg3:0 tempa,tempb,firsts; reg firstc;always (posedge en)begin firstc,firsts=a3:0+b3:0+cin; tempa=a7:4; tempb=b7:4;endalways (posedge en)begin cout,sum7:4=tempa+tempb+firstc; sum3:0 = firsts;endendmo

11、dule乘法器設(shè)計(jì)乘法器設(shè)計(jì)v乘法器也頻繁使用在數(shù)字信號(hào)處理和數(shù)字通信的各種乘法器也頻繁使用在數(shù)字信號(hào)處理和數(shù)字通信的各種算法中,并且往往影響著整個(gè)系統(tǒng)的運(yùn)行速度,所以算法中,并且往往影響著整個(gè)系統(tǒng)的運(yùn)行速度,所以如果能實(shí)現(xiàn)快速乘法器的設(shè)計(jì),可提高整個(gè)系統(tǒng)的處如果能實(shí)現(xiàn)快速乘法器的設(shè)計(jì),可提高整個(gè)系統(tǒng)的處理速度。乘法器的設(shè)計(jì)方法主要有:并行運(yùn)算理速度。乘法器的設(shè)計(jì)方法主要有:并行運(yùn)算(純組合純組合邏輯邏輯)、移位相加、查找表、加法樹(shù)等。、移位相加、查找表、加法樹(shù)等。v1.并行乘法器:并行乘法器是純組合邏輯的乘法器,并行乘法器:并行乘法器是純組合邏輯的乘法器,完全由邏輯門(mén)實(shí)現(xiàn)。對(duì)于完全由邏輯門(mén)實(shí)

12、現(xiàn)。對(duì)于11乘法,只需乘法,只需1個(gè)與門(mén)即個(gè)與門(mén)即可實(shí)現(xiàn),可實(shí)現(xiàn),P=AB。對(duì)于。對(duì)于22乘法,根據(jù)課本乘法,根據(jù)課本P189的真值表可以得出結(jié)果表達(dá)式:的真值表可以得出結(jié)果表達(dá)式: 因此我們可以用與門(mén)、或門(mén)來(lái)實(shí)現(xiàn)。因此我們可以用與門(mén)、或門(mén)來(lái)實(shí)現(xiàn)。,011101201013bbabaapbbaap0000010110101011,bapbaabbabbabaapv 并行乘法器示例:并行乘法器示例:module mult(outcome,a,b);parameter size=8;inputsize:1 a,b; output2*size:1 coutcome;assign outcom=a*b

13、;endmodule并行乘法器隨著操作數(shù)位數(shù)加寬,耗用的資源迅速變多,如果將并行乘法器隨著操作數(shù)位數(shù)加寬,耗用的資源迅速變多,如果將上面的上面的8位并行乘法器適配到位并行乘法器適配到Cyclone系列的系列的EP1C3器件實(shí)器件實(shí)現(xiàn)的話,需耗用現(xiàn)的話,需耗用106個(gè)個(gè)LE單元。單元。而如果所用的而如果所用的FPGA器件中有嵌入式乘法器的話,則可采用嵌入器件中有嵌入式乘法器的話,則可采用嵌入式乘法器來(lái)實(shí)現(xiàn)乘法,比如將上例適配到式乘法器來(lái)實(shí)現(xiàn)乘法,比如將上例適配到Cyclone II系列的系列的EP2C5器件的話,只耗用器件的話,只耗用1個(gè)個(gè)LE單元和單元和1個(gè)個(gè)9位位*9位的嵌入式位的嵌入式乘法

14、器單元。乘法器單元。 因此,如果所用的因此,如果所用的FPGA器件中有硬件乘法器,建議用硬件乘器件中有硬件乘法器,建議用硬件乘法器來(lái)實(shí)現(xiàn)乘法操作,具有速度快,資源利用合理等優(yōu)點(diǎn)。法器來(lái)實(shí)現(xiàn)乘法操作,具有速度快,資源利用合理等優(yōu)點(diǎn)。v2.移位相加乘法器移位相加乘法器 移位相加乘法器將乘法變?yōu)榧臃▽?shí)現(xiàn),其設(shè)計(jì)思路是:乘法移位相加乘法器將乘法變?yōu)榧臃▽?shí)現(xiàn),其設(shè)計(jì)思路是:乘法通過(guò)逐次移位相加實(shí)現(xiàn),每次判斷乘數(shù)的最低位,若為通過(guò)逐次移位相加實(shí)現(xiàn),每次判斷乘數(shù)的最低位,若為1則將則將被乘數(shù)移位相加。被乘數(shù)移位相加。被乘數(shù)被乘數(shù)A 1101乘數(shù)乘數(shù)B 1011部分積部分積0 1101A左移左移 11010

15、部分積部分積1 100111A左移左移 000000部分積部分積2 100111A左移左移 1101000積積 10001111v 對(duì)于乘數(shù)中的第對(duì)于乘數(shù)中的第i位,若為位,若為1,則,則將被乘數(shù)左移將被乘數(shù)左移i位,并加到上次的位,并加到上次的部分積結(jié)果上。部分積結(jié)果上。(若為若為0可以看作可以看作只移位不相加。只移位不相加。)v 也可以依次判斷乘數(shù)也可以依次判斷乘數(shù)B的最低有的最低有效位是否為效位是否為1,若為,若為1則則P=P+A(部分積(部分積P在剛開(kāi)始時(shí)要清在剛開(kāi)始時(shí)要清0),),然后將被乘數(shù)然后將被乘數(shù)A左移左移1位,乘數(shù)位,乘數(shù)B右移右移1位位(并用并用0填補(bǔ)高位填補(bǔ)高位);當(dāng)被

16、當(dāng)被乘數(shù)全部變?yōu)槌藬?shù)全部變?yōu)?后,乘法運(yùn)算完后,乘法運(yùn)算完成。成。 注:如果注:如果B的最低有效位為的最低有效位為0時(shí),只需接著移位,不要相加時(shí),只需接著移位,不要相加v移位相加乘法器是一種相對(duì)節(jié)省資源的設(shè)計(jì)方法,移位相加乘法器是一種相對(duì)節(jié)省資源的設(shè)計(jì)方法,為了實(shí)現(xiàn)為了實(shí)現(xiàn)nn乘法,需要一個(gè)乘法,需要一個(gè)2n位的左移寄存器位的左移寄存器(存放部分積),一個(gè)(存放部分積),一個(gè)n位的右移寄存器(可用除數(shù)位的右移寄存器(可用除數(shù)寄存器代替),一個(gè)寄存器代替),一個(gè)2n位加法器(被加數(shù)為部分積位加法器(被加數(shù)為部分積和被乘數(shù),所以還需要一個(gè)被乘數(shù)寄存器),再加和被乘數(shù),所以還需要一個(gè)被乘數(shù)寄存器),

17、再加少量的控制邏輯即可實(shí)現(xiàn)。尤其是當(dāng)操作數(shù)位寬增少量的控制邏輯即可實(shí)現(xiàn)。尤其是當(dāng)操作數(shù)位寬增加時(shí),移位相加乘法器耗用的邏輯資源不會(huì)像并行加時(shí),移位相加乘法器耗用的邏輯資源不會(huì)像并行乘法器那樣急劇增加。乘法器那樣急劇增加。v注:是先移位后相加注:是先移位后相加v移位相加乘法示例(移位相加乘法示例(0 x18600 * CNT16D3:0)Result20:17 = 4b0000; /部分積的高位先清零部分積的高位先清零mult16:0 = 17h186a0; /1000* 100 = 0 x186a0Result16:0 = CNT16D0 ? mult16:0 : 0;for(i = 1; i

18、 = 3; i = i + 1)begin if(CNT16Di=1) Result20:0=Result20:0+(mult16:0i);end注意:注意:for循環(huán)計(jì)算是在一個(gè)時(shí)鐘周期內(nèi)完成的。循環(huán)計(jì)算是在一個(gè)時(shí)鐘周期內(nèi)完成的。 v 或者程序改為或者程序改為(不能被綜合不能被綜合):Result20:0 = 21b0; /部分積先清零部分積先清零mult16:0 = 17h186a0; /被乘數(shù)被乘數(shù)while(CNT16D3:0 != 4b0) /注意注意while循環(huán)不能被綜合循環(huán)不能被綜合begin if(CNT16D0=1) begin Result20:0=Result20:01

19、; Result20:0=Result20:0+ mult16:0; end else begin Result20:0=Result20:01;endv 為何不能將為何不能將while(CNT16D3:0 != 4b0) 改成改成for循環(huán)然后判斷循環(huán)然后判斷CNT16D3:0 = 4b0時(shí)用時(shí)用break語(yǔ)語(yǔ)句跳出?句跳出?v 答答:因?yàn)橐驗(yàn)閂erilog中沒(méi)有中沒(méi)有break語(yǔ)句。語(yǔ)句。Verilog的的for循循環(huán)綜合后是硬件的重復(fù),而環(huán)綜合后是硬件的重復(fù),而C語(yǔ)言的語(yǔ)言的for是過(guò)程的重復(fù)。是過(guò)程的重復(fù)。所以說(shuō)在所以說(shuō)在Verilog中沒(méi)有中沒(méi)有break 。v3.查找表乘法器查找表

20、乘法器 查找表乘法器將乘積直接放在存儲(chǔ)器中,將操作查找表乘法器將乘積直接放在存儲(chǔ)器中,將操作數(shù)數(shù)(乘數(shù)和被乘數(shù)乘數(shù)和被乘數(shù))作為地址訪問(wèn)存儲(chǔ)器,得到的輸作為地址訪問(wèn)存儲(chǔ)器,得到的輸出數(shù)據(jù)就是乘法運(yùn)算的結(jié)果。查找表方式的乘法器出數(shù)據(jù)就是乘法運(yùn)算的結(jié)果。查找表方式的乘法器速度只局限于所使用存儲(chǔ)器的存取速度。速度只局限于所使用存儲(chǔ)器的存取速度。 但由于查找表的規(guī)模隨著操作數(shù)位數(shù)的增加而迅但由于查找表的規(guī)模隨著操作數(shù)位數(shù)的增加而迅速增大,因此如果用于實(shí)現(xiàn)位數(shù)寬的乘法操作,需速增大,因此如果用于實(shí)現(xiàn)位數(shù)寬的乘法操作,需要要FPGA器件具有較大的片內(nèi)存儲(chǔ)器模塊。比如,器件具有較大的片內(nèi)存儲(chǔ)器模塊。比如,要

21、實(shí)現(xiàn)要實(shí)現(xiàn)8*8乘法器的地址位寬為乘法器的地址位寬為16位,字長(zhǎng)為位,字長(zhǎng)為16位(可能性為:位(可能性為:28*28=256*256),即存儲(chǔ)器),即存儲(chǔ)器大小為大小為1048576(1M)比特,用這么大的存儲(chǔ)器來(lái)比特,用這么大的存儲(chǔ)器來(lái)實(shí)現(xiàn)實(shí)現(xiàn)8*8乘法運(yùn)算,顯然是不經(jīng)濟(jì)的。乘法運(yùn)算,顯然是不經(jīng)濟(jì)的。v3.除法器設(shè)計(jì):多數(shù)工具對(duì)除法(除法器設(shè)計(jì):多數(shù)工具對(duì)除法(/)和求模)和求模(%)有有限制。如對(duì)除法操作,只有當(dāng)除數(shù)是常數(shù),且是限制。如對(duì)除法操作,只有當(dāng)除數(shù)是常數(shù),且是2的的指數(shù)時(shí)才支持。指數(shù)時(shí)才支持。v兩個(gè)無(wú)符號(hào)數(shù)相除的時(shí)序算法是要從被除數(shù)中重復(fù)地兩個(gè)無(wú)符號(hào)數(shù)相除的時(shí)序算法是要從被除數(shù)

22、中重復(fù)地減去除法,直到已檢測(cè)到余數(shù)小于除數(shù)。可以通過(guò)累減去除法,直到已檢測(cè)到余數(shù)小于除數(shù)??梢酝ㄟ^(guò)累計(jì)減法運(yùn)算的次數(shù)而得到商;余數(shù)的最終值是減法運(yùn)計(jì)減法運(yùn)算的次數(shù)而得到商;余數(shù)的最終值是減法運(yùn)算序列結(jié)束時(shí)被除數(shù)中的剩余值。算序列結(jié)束時(shí)被除數(shù)中的剩余值。v兩個(gè)有符號(hào)數(shù)相除的最簡(jiǎn)單方法是先將兩數(shù)相除,然兩個(gè)有符號(hào)數(shù)相除的最簡(jiǎn)單方法是先將兩數(shù)相除,然后調(diào)整結(jié)果的符號(hào)。其他方法則都比較復(fù)雜。后調(diào)整結(jié)果的符號(hào)。其他方法則都比較復(fù)雜。v 除法器的設(shè)計(jì)方法:除法器的設(shè)計(jì)方法:1. 一種是直接采用一種是直接采用Verilog的除法指令,如:的除法指令,如:k = 127 / i;(注意此種方法有綜合工具的限制

23、)(注意此種方法有綜合工具的限制)2. 另一種是采用移位減法來(lái)實(shí)現(xiàn)除法運(yùn)算(先移位另一種是采用移位減法來(lái)實(shí)現(xiàn)除法運(yùn)算(先移位后減);后減);3. 再一種是采用基于除法器宏功能模塊的設(shè)計(jì)。再一種是采用基于除法器宏功能模塊的設(shè)計(jì)。4. 還有一種是將整數(shù)除法轉(zhuǎn)換為小數(shù)乘法的方法實(shí)還有一種是將整數(shù)除法轉(zhuǎn)換為小數(shù)乘法的方法實(shí)現(xiàn)。(此時(shí)除數(shù)應(yīng)為常數(shù))現(xiàn)。(此時(shí)除數(shù)應(yīng)為常數(shù))v移位減法式除法器設(shè)計(jì):移位減法式除法器設(shè)計(jì):v除數(shù)應(yīng)大于被除數(shù)的高部分除數(shù)應(yīng)大于被除數(shù)的高部分 (否則不能保證商位為否則不能保證商位為1) ;在通用程序的編寫(xiě)中,可以通過(guò)在被除數(shù)前面補(bǔ)在通用程序的編寫(xiě)中,可以通過(guò)在被除數(shù)前面補(bǔ)0來(lái)來(lái)實(shí)

24、現(xiàn)。實(shí)現(xiàn)。v運(yùn)算時(shí)先將運(yùn)算時(shí)先將 被除數(shù)(被除數(shù)( 商商+余數(shù))一起左移余數(shù))一起左移1位,然后位,然后用被除數(shù)的高部分減去除數(shù);用被除數(shù)的高部分減去除數(shù);v判斷前面的減法是否夠減:夠減,則商加判斷前面的減法是否夠減:夠減,則商加1,減法結(jié),減法結(jié)果保存為新的余數(shù);果保存為新的余數(shù); 不夠減,則商不加不夠減,則商不加1,減法結(jié)果也不要保存;,減法結(jié)果也不要保存;v 循環(huán)次數(shù)的確定:根據(jù)被除數(shù)位寬循環(huán)次數(shù)的確定:根據(jù)被除數(shù)位寬-除數(shù)位寬確定,因?yàn)橐莆粶p法到除數(shù)位寬確定,因?yàn)橐莆粶p法到最后被除數(shù)由余數(shù)最后被除數(shù)由余數(shù)+商給代替,而商給代替,而余數(shù)總是和除數(shù)的位寬相同,剩下余數(shù)總是和除數(shù)的位寬相同,

25、剩下的就是商的寬度(也就是需要循環(huán)的就是商的寬度(也就是需要循環(huán)的次數(shù))。的次數(shù))。v 如果保證程序的通用性的話(即被如果保證程序的通用性的話(即被除數(shù)的高位部分小于或等于除數(shù)),除數(shù)的高位部分小于或等于除數(shù)),一般在被除數(shù)前面一般在被除數(shù)前面+(除數(shù)位寬)(除數(shù)位寬)個(gè)個(gè)0,構(gòu)成新的被除數(shù),這時(shí)的循,構(gòu)成新的被除數(shù),這時(shí)的循環(huán)次數(shù)也就等于(原來(lái)被除數(shù)的位環(huán)次數(shù)也就等于(原來(lái)被除數(shù)的位寬數(shù))。寬數(shù))。100 | 00010100010100- 100 0101000- 100 1010000- 100 0010001- 101 0100010移位相減移位相減移位相減移位相減商要加商要加1010

26、0010移位相減移位相減移位相減移位相減余數(shù)余數(shù)+商商00101000101000v移位減法實(shí)現(xiàn)除法示例移位減法實(shí)現(xiàn)除法示例(被除數(shù)(被除數(shù)21+11=32位,除數(shù)位,除數(shù)11位)位) C = 0; F0 = 0; Result31:21 = 11d0; for(i = 0; i 21; i = i + 1) /確定循環(huán)次數(shù)確定循環(huán)次數(shù) begin C = Result31; /保存移出的最高位保存移出的最高位 Result31:0 = Result31:0 = CNT11bD10:0) begin F0 = 1; Result31:21 = Result31:21 - CNT11bD10:0

27、; end else F0 = 0; if(C | F0) Result0 = 1; /商加商加1 end 思考:如果要把此除法變?yōu)榱魉€方式應(yīng)該如何設(shè)計(jì)程序?思考:如果要把此除法變?yōu)榱魉€方式應(yīng)該如何設(shè)計(jì)程序? 整數(shù)除法整數(shù)除法-小數(shù)乘法小數(shù)乘法v 整數(shù)除法也可以轉(zhuǎn)化為小數(shù)乘法,可以通過(guò)整數(shù)除法也可以轉(zhuǎn)化為小數(shù)乘法,可以通過(guò)SD編碼方式轉(zhuǎn)化為移位加減編碼方式轉(zhuǎn)化為移位加減法實(shí)現(xiàn)。如:法實(shí)現(xiàn)。如:x/278=x*0.0036vSD編碼(編碼(Signed Digit Numbers)是將十進(jìn)制數(shù)用數(shù)相加減)是將十進(jìn)制數(shù)用數(shù)相加減 的形式表示出來(lái),該編碼與傳統(tǒng)的二進(jìn)制編碼不同,它使用的形式表示出

28、來(lái),該編碼與傳統(tǒng)的二進(jìn)制編碼不同,它使用3個(gè)值來(lái)表個(gè)值來(lái)表 示數(shù)字,即示數(shù)字,即0,1,-1,其中,其中-1常寫(xiě)為常寫(xiě)為 。v 如為整數(shù):如為整數(shù):271032104101101000002100212 (下標(biāo)表示進(jìn)制)(下標(biāo)表示進(jìn)制)v 如為小數(shù)(將小數(shù)先乘以如為小數(shù)(將小數(shù)先乘以128):):t1 =128*0.8500=108.800=128-16-4+0.5+0.25+0.0625 = t2 = 128*0.0036=0.46080.50.03125 1SD101100sd)1101.00101100(sd) 11000. 0(v t1 = v v t2 = v 得到:得到:x1 *

29、t1 - x2 * t2 = (x17) (x1 2)2) v (x12) + x17,x17:1+x17,x7,x17:2v + x17,x7, x17,x7,x17:4 x27,x27:1 v x27, x27, x27, x27, x27, x27, x27:5v 得到結(jié)果后,再將結(jié)果右移得到結(jié)果后,再將結(jié)果右移7位位(因?yàn)閯傞_(kāi)始的小數(shù)乘以了因?yàn)閯傞_(kāi)始的小數(shù)乘以了128)。v 注:乘以注:乘以128的目的是把的目的是把SD碼的小數(shù)部分轉(zhuǎn)化為小于碼的小數(shù)部分轉(zhuǎn)化為小于8位(最位(最大大7位)的二進(jìn)制小數(shù),這樣計(jì)算結(jié)果的右移位數(shù)就可以控制位)的二進(jìn)制小數(shù),這樣計(jì)算結(jié)果的右移位數(shù)就可以控制在在

30、7位之內(nèi)(最多右移位之內(nèi)(最多右移7位),因?yàn)楫?dāng)一個(gè)字節(jié)右移位),因?yàn)楫?dāng)一個(gè)字節(jié)右移8位后就什位后就什么都沒(méi)有,只剩下么都沒(méi)有,只剩下0了。了。sd) 11000. 0(sd)1101.00101100(奇數(shù)分頻與小數(shù)分頻奇數(shù)分頻與小數(shù)分頻v1.奇數(shù)分頻奇數(shù)分頻 在實(shí)際應(yīng)用中,我們經(jīng)常會(huì)遇到這樣的問(wèn)題,需要在實(shí)際應(yīng)用中,我們經(jīng)常會(huì)遇到這樣的問(wèn)題,需要進(jìn)行奇數(shù)次分頻,同時(shí)又要得到占空比是進(jìn)行奇數(shù)次分頻,同時(shí)又要得到占空比是50%的方的方波波形。如果是偶數(shù)次分頻的話,得到占空比是波波形。如果是偶數(shù)次分頻的話,得到占空比是50%的方波并不困難,比如進(jìn)行的方波并不困難,比如進(jìn)行2N次分頻,只需在次分頻

31、,只需在計(jì)數(shù)到計(jì)數(shù)到N-1(從從0開(kāi)始開(kāi)始)時(shí),波形翻轉(zhuǎn)即可;或者在最時(shí),波形翻轉(zhuǎn)即可;或者在最后一級(jí)加一個(gè)后一級(jí)加一個(gè)2分頻器也可實(shí)現(xiàn)。如果是奇數(shù)次分頻分頻器也可實(shí)現(xiàn)。如果是奇數(shù)次分頻的話,可采用如下方法:用兩個(gè)計(jì)數(shù)器,一個(gè)由輸入的話,可采用如下方法:用兩個(gè)計(jì)數(shù)器,一個(gè)由輸入時(shí)鐘上升沿觸發(fā),一個(gè)由輸入時(shí)鐘下降沿觸發(fā),最后時(shí)鐘上升沿觸發(fā),一個(gè)由輸入時(shí)鐘下降沿觸發(fā),最后將兩個(gè)計(jì)數(shù)器的輸出相或,即可得到占空比為將兩個(gè)計(jì)數(shù)器的輸出相或,即可得到占空比為50%的方波波形。的方波波形。 下面的示例就實(shí)現(xiàn)了對(duì)輸入時(shí)鐘下面的示例就實(shí)現(xiàn)了對(duì)輸入時(shí)鐘CLK的的7分頻,同分頻,同時(shí)得到了占空比為時(shí)得到了占空比為5

32、0%的方波。的方波。module count7(rst,clk,cout);input clk,rst; output cout; reg2:0 m,n; wire cout; reg cnt1,cnt2;assign cout=cnt1|cnt2; /兩個(gè)計(jì)數(shù)器的輸出相或兩個(gè)計(jì)數(shù)器的輸出相或always (posedge clk)begin if(!rst) begin cnt1=0; m=0; end else if(rst) begin if(m=6) begin m=0; end else m=m+1; if(m=2) cnt1=cnt1; else if(m=5) cnt1=cnt1

33、; endendalways (negedge clk)begin if(!rst) begin cnt2=0; n=0; end else if(rst) begin if(n=6) begin n=0; end else n=n+1; if(n=2) cnt2=cnt2; else if(n=5) cnt2=cnt2; endendendmodule模模7奇數(shù)分頻器功能仿真波形圖奇數(shù)分頻器功能仿真波形圖v 2.半整數(shù)分頻半整數(shù)分頻 設(shè)有一個(gè)設(shè)有一個(gè)5MHz的時(shí)鐘信號(hào),但需要得到的時(shí)鐘信號(hào),但需要得到2MHz的時(shí)鐘,分的時(shí)鐘,分頻比為頻比為2.5,此時(shí)可采用半整數(shù)分頻器。其設(shè)計(jì)思想為:要實(shí),

34、此時(shí)可采用半整數(shù)分頻器。其設(shè)計(jì)思想為:要實(shí)現(xiàn)現(xiàn)2.5分頻,可先設(shè)計(jì)一個(gè)模分頻,可先設(shè)計(jì)一個(gè)模3分頻器,再設(shè)計(jì)一個(gè)脈沖扣除分頻器,再設(shè)計(jì)一個(gè)脈沖扣除電路,加在模電路,加在模3計(jì)數(shù)器之后,每來(lái)計(jì)數(shù)器之后,每來(lái)3個(gè)脈沖就扣除半個(gè)脈沖,個(gè)脈沖就扣除半個(gè)脈沖,即可實(shí)現(xiàn)分頻系數(shù)為即可實(shí)現(xiàn)分頻系數(shù)為2.5的半整數(shù)分頻。采用類似的方法可實(shí)的半整數(shù)分頻。采用類似的方法可實(shí)現(xiàn)任意半整數(shù)分頻。下圖所示為半整數(shù)分頻器原理圖。通過(guò)異現(xiàn)任意半整數(shù)分頻。下圖所示為半整數(shù)分頻器原理圖。通過(guò)異或門(mén)和或門(mén)和2分頻模塊組成脈沖扣除電路,脈沖扣除正是輸入頻率分頻模塊組成脈沖扣除電路,脈沖扣除正是輸入頻率與與2分頻輸出異或的結(jié)果。分頻

35、輸出異或的結(jié)果。XOR輸入時(shí)鐘 clkin2分頻模N計(jì)數(shù)器clk2clk1輸出時(shí)鐘 clkout下面是采用上述原理設(shè)計(jì)的下面是采用上述原理設(shè)計(jì)的5.5分頻的程序。分頻的程序。module fdiv5_5(clkin,clr,clkout);input clkin,clr; output clkout; reg clkout,clk1; wire clk2; integer cnt;xor xor1(clk2,clkin,clk1); /異或異或always (posedge clkout or negedge clr) /2分頻器分頻器begin if(!clr) begin clk1=1b0

36、; end else clk1=clk1;endalways (posedge clk2 or negedge clr) /模模5分頻器分頻器begin if(!clr) begin cnt=0; clkout=1b0; end else if(cnt=5) /更改更改cnt的值,即可實(shí)現(xiàn)不同模的半整數(shù)分頻,比如的值,即可實(shí)現(xiàn)不同模的半整數(shù)分頻,比如6.5,7.5等等 begin cnt=0; clkout=1b1; end else begin cnt=cnt+1; clkout=1b0; endendendmodule v3.小數(shù)分頻小數(shù)分頻 在實(shí)際應(yīng)用中,還經(jīng)常會(huì)遇到小數(shù)分頻。實(shí)現(xiàn)小在實(shí)

37、際應(yīng)用中,還經(jīng)常會(huì)遇到小數(shù)分頻。實(shí)現(xiàn)小數(shù)分頻可采用兩種方法:數(shù)分頻可采用兩種方法:v一種是用數(shù)字鎖相環(huán)實(shí)現(xiàn),先利用鎖相環(huán)電路將輸入一種是用數(shù)字鎖相環(huán)實(shí)現(xiàn),先利用鎖相環(huán)電路將輸入時(shí)鐘倍頻,然后再利用分頻器對(duì)新產(chǎn)生的高頻信號(hào)進(jìn)時(shí)鐘倍頻,然后再利用分頻器對(duì)新產(chǎn)生的高頻信號(hào)進(jìn)行分頻得到需要的時(shí)鐘頻率。比如要實(shí)現(xiàn)行分頻得到需要的時(shí)鐘頻率。比如要實(shí)現(xiàn)5.7分頻,分頻,可以先將輸入的時(shí)鐘可以先將輸入的時(shí)鐘10倍頻,然后再將倍頻后的時(shí)倍頻,然后再將倍頻后的時(shí)鐘鐘57分頻,這樣即可精確實(shí)現(xiàn)分頻,這樣即可精確實(shí)現(xiàn)5.7的小數(shù)分頻。這的小數(shù)分頻。這種方法的好處是可以做到精確分頻,但是需要器件內(nèi)種方法的好處是可以做到

38、精確分頻,但是需要器件內(nèi)包含鎖相環(huán)電路包含鎖相環(huán)電路PLL。v還有一種方法可大致實(shí)現(xiàn)小數(shù)分頻(不精確),即先還有一種方法可大致實(shí)現(xiàn)小數(shù)分頻(不精確),即先設(shè)計(jì)兩個(gè)不同分頻比的整數(shù)分頻器,然后通過(guò)控制兩設(shè)計(jì)兩個(gè)不同分頻比的整數(shù)分頻器,然后通過(guò)控制兩種分頻比出現(xiàn)的不同次數(shù)來(lái)獲得所需要的小數(shù)分頻值,種分頻比出現(xiàn)的不同次數(shù)來(lái)獲得所需要的小數(shù)分頻值,從而實(shí)現(xiàn)從而實(shí)現(xiàn)平均意義上的小數(shù)分頻平均意義上的小數(shù)分頻。下例就是實(shí)現(xiàn)的一個(gè)分頻系數(shù)為下例就是實(shí)現(xiàn)的一個(gè)分頻系數(shù)為8.1的小數(shù)分頻器,通過(guò)計(jì)數(shù)器先做的小數(shù)分頻器,通過(guò)計(jì)數(shù)器先做9次次8分頻,分頻,再做一次再做一次9分頻,這樣總的分頻值分頻,這樣總的分頻值(1

39、0次分頻的平均值次分頻的平均值)為為: N=(8*9+9*1)/(9+1)=8.1module fdiv8_1(clkin,rst,clkout);input clkin,rst; output clkout; reg clkout;reg3:0 cnt1,cnt2;always (posedge clkin or negedge rst)begin if(!rst) begin cnt1=0; cnt2=0; clkout=0; end else if(cnt19)/9次次8分頻分頻 begin if(cnt27) begin cnt2=cnt2+1; clkout=0; end else

40、begin cnt2=0; cnt1=cnt1+1; clkout=1; end end else begin/1次次9分頻分頻 if(cnt28) begin cnt2=cnt2+1; clkout=0; end else begin cnt2=0; cnt1=0; clkout=1; end endendendmodule8.1小數(shù)分頻功能仿真波形小數(shù)分頻功能仿真波形思考:如果分頻系數(shù)為思考:如果分頻系數(shù)為 7.2 應(yīng)該怎么做?應(yīng)該怎么做?有限狀態(tài)機(jī)設(shè)計(jì)有限狀態(tài)機(jī)設(shè)計(jì)v有限狀態(tài)機(jī)有限狀態(tài)機(jī)(Finite State Machine, FSM)是一種是一種很重要的時(shí)序邏輯電路,尤其適合設(shè)計(jì)數(shù)

41、字系統(tǒng)的控很重要的時(shí)序邏輯電路,尤其適合設(shè)計(jì)數(shù)字系統(tǒng)的控制模塊,是許多數(shù)字電路的核心部件。有限狀態(tài)機(jī)的制模塊,是許多數(shù)字電路的核心部件。有限狀態(tài)機(jī)的標(biāo)準(zhǔn)模型主要由三部分組成:一是次態(tài)組合邏輯電路,標(biāo)準(zhǔn)模型主要由三部分組成:一是次態(tài)組合邏輯電路,二是由狀態(tài)觸發(fā)器構(gòu)成的現(xiàn)態(tài)時(shí)序邏輯電路,三是輸二是由狀態(tài)觸發(fā)器構(gòu)成的現(xiàn)態(tài)時(shí)序邏輯電路,三是輸出組合邏輯電路。出組合邏輯電路。v根據(jù)電路的輸出信號(hào)是否與電路的輸入有關(guān),有限狀根據(jù)電路的輸出信號(hào)是否與電路的輸入有關(guān),有限狀態(tài)機(jī)可分為兩種類型:一類是態(tài)機(jī)可分為兩種類型:一類是Mealy(米莉米莉)型狀態(tài)機(jī),型狀態(tài)機(jī),其輸出信號(hào)不僅與電路的當(dāng)前狀態(tài)有關(guān),還與電路

42、的其輸出信號(hào)不僅與電路的當(dāng)前狀態(tài)有關(guān),還與電路的輸入有關(guān);另一類是輸入有關(guān);另一類是Moore(摩爾摩爾)型狀態(tài)機(jī),其輸出型狀態(tài)機(jī),其輸出狀態(tài)僅與電路的當(dāng)前狀態(tài)有關(guān),與電路的輸入無(wú)關(guān)。狀態(tài)僅與電路的當(dāng)前狀態(tài)有關(guān),與電路的輸入無(wú)關(guān)。v 狀態(tài)機(jī)一般都應(yīng)設(shè)計(jì)為同步方式,并由一個(gè)時(shí)鐘信號(hào)來(lái)觸發(fā)。實(shí)用的狀態(tài)機(jī)一般都應(yīng)設(shè)計(jì)為同步方式,并由一個(gè)時(shí)鐘信號(hào)來(lái)觸發(fā)。實(shí)用的狀態(tài)機(jī)都應(yīng)該設(shè)計(jì)為由唯一時(shí)鐘邊沿觸發(fā)的同步運(yùn)行方式。狀態(tài)機(jī)都應(yīng)該設(shè)計(jì)為由唯一時(shí)鐘邊沿觸發(fā)的同步運(yùn)行方式。組合邏輯狀態(tài)寄存器組合邏輯Mealy型Moore型時(shí)鐘輸入狀態(tài)轉(zhuǎn)移圖的繪制(檢測(cè)序列狀態(tài)轉(zhuǎn)移圖的繪制(檢測(cè)序列110)s00/01/0s10/

43、0s21/01/0s30/10/01/0s0:0 s1:1 s2:11 s3:110起始狀態(tài)狀態(tài)轉(zhuǎn)移圖的繪制(檢測(cè)序列狀態(tài)轉(zhuǎn)移圖的繪制(檢測(cè)序列0101)s00/0s11/0s0:0 s1:01 s2:010 s3:1(無(wú)效狀態(tài)無(wú)效狀態(tài)) s4:0101s20/0s31/00/0s41/11/01/00/00/00/0起始狀態(tài)如何進(jìn)行狀態(tài)機(jī)編程如何進(jìn)行狀態(tài)機(jī)編程v對(duì)于對(duì)于Mealy型型FSM電路來(lái)說(shuō),由于電路的輸出除了與電路的現(xiàn)電路來(lái)說(shuō),由于電路的輸出除了與電路的現(xiàn)態(tài)有關(guān)外,還與電路的輸入信號(hào)有關(guān),如果輸入信號(hào)的變化不能態(tài)有關(guān)外,還與電路的輸入信號(hào)有關(guān),如果輸入信號(hào)的變化不能及時(shí)被檢測(cè),而要等

44、待時(shí)鐘有效沿到來(lái)時(shí)才進(jìn)行檢測(cè)的話,則電及時(shí)被檢測(cè),而要等待時(shí)鐘有效沿到來(lái)時(shí)才進(jìn)行檢測(cè)的話,則電路的輸出很可能是錯(cuò)誤的(例如在上次時(shí)鐘有效沿和本次時(shí)鐘有路的輸出很可能是錯(cuò)誤的(例如在上次時(shí)鐘有效沿和本次時(shí)鐘有效沿之間往自動(dòng)售貨機(jī)里快速投入一枚硬幣)。所以在設(shè)計(jì)效沿之間往自動(dòng)售貨機(jī)里快速投入一枚硬幣)。所以在設(shè)計(jì)FSM電路時(shí),建議采用兩個(gè)電路時(shí),建議采用兩個(gè)always塊或者三個(gè)塊或者三個(gè)always塊的方法進(jìn)行描塊的方法進(jìn)行描述。也就是說(shuō),若時(shí)鐘周期相對(duì)過(guò)長(zhǎng),則會(huì)漏掉輸入信號(hào)。即與述。也就是說(shuō),若時(shí)鐘周期相對(duì)過(guò)長(zhǎng),則會(huì)漏掉輸入信號(hào)。即與輸入信號(hào)有關(guān)的硬件描述語(yǔ)言采用組合邏輯形式。輸入信號(hào)有關(guān)的硬

45、件描述語(yǔ)言采用組合邏輯形式。v狀態(tài)編碼的定義:狀態(tài)編碼的定義:parameter方式(一般采用該方式)和方式(一般采用該方式)和define方式。方式。v狀態(tài)轉(zhuǎn)換的描述:一般使用狀態(tài)轉(zhuǎn)換的描述:一般使用case、casez和和casex語(yǔ)句來(lái)描述語(yǔ)句來(lái)描述狀態(tài)之間的轉(zhuǎn)換,用狀態(tài)之間的轉(zhuǎn)換,用case語(yǔ)句表述比用語(yǔ)句表述比用if-else語(yǔ)句更清晰明了。語(yǔ)句更清晰明了。此外在此外在case語(yǔ)句的最后,不要忘了加上語(yǔ)句的最后,不要忘了加上default分支語(yǔ)句,以避免分支語(yǔ)句,以避免鎖存器的產(chǎn)生。鎖存器的產(chǎn)生。用兩個(gè)用兩個(gè)always塊描述電路塊描述電路(檢測(cè)序列檢測(cè)序列110)module pu

46、sle(data,clk,nclr,out);input data,clk,nclr; output out; reg out;reg2:0 current_state,next_state;parameter1:0 s0=0,s1=1,s2=2,s3=3;always (posedge clk) /the state registerbegin if(!nclr) current_state=s0; else current_state=next_state;end/the combination logic,assign the next_statealways (current_stat

47、e or data)begin case(current_state) s0: begin out=0; next_state=(data=1)?s1:s0; end s1: begin out=0; next_state=(data=1)?s2:s0; end s2: if(data=1) begin out=0; next_state=s2; end else begin out=1; next_state=s3; end s3: begin out=0; next_state=(data=1)?s1:s0; end endcaseendendmodule用三個(gè)用三個(gè)always塊描述電路

48、塊描述電路(檢測(cè)序列檢測(cè)序列110)module pusle(data,clk,nclr,out);input data,clk,nclr; output out; reg out;reg2:0 current_state,next_state;parameter1:0 s0=0,s1=1,s2=2,s3=3;always (posedge clk) /the state registerbegin if(!nclr) current_state=s0; else current_state10),引起邏輯),引起邏輯錯(cuò)誤。錯(cuò)誤。v 格雷編碼相鄰狀態(tài)每次只有一個(gè)比特位產(chǎn)生變格雷編碼相鄰狀態(tài)每次

49、只有一個(gè)比特位產(chǎn)生變化(化(00、01、11、10),減少了瞬變次數(shù),),減少了瞬變次數(shù),也減少了產(chǎn)生毛刺和一些暫態(tài)的可能。也減少了產(chǎn)生毛刺和一些暫態(tài)的可能。 一位熱碼編碼即采用一位熱碼編碼即采用n位(或位(或n個(gè)觸發(fā)器)來(lái)編碼個(gè)觸發(fā)器)來(lái)編碼n個(gè)狀態(tài)的狀態(tài)機(jī)(如個(gè)狀態(tài)的狀態(tài)機(jī)(如1000、0100、0010、0001)。這樣雖然多用了觸發(fā)器)。這樣雖然多用了觸發(fā)器 ,但可以有效節(jié)省和簡(jiǎn)化組合電路。,但可以有效節(jié)省和簡(jiǎn)化組合電路。對(duì)于寄存器數(shù)量多而門(mén)邏輯相對(duì)缺乏的對(duì)于寄存器數(shù)量多而門(mén)邏輯相對(duì)缺乏的FPGA器件來(lái)器件來(lái)說(shuō),采用該方式可以有效提高電路的速度和可靠性,說(shuō),采用該方式可以有效提高電路的

50、速度和可靠性,也有利于提高器件資源的利用率。因此,對(duì)于也有利于提高器件資源的利用率。因此,對(duì)于FPGA器件建議采用該編碼方式。器件建議采用該編碼方式。v采用一位熱碼編碼后,會(huì)出現(xiàn)一些多余的狀態(tài),即一采用一位熱碼編碼后,會(huì)出現(xiàn)一些多余的狀態(tài),即一些無(wú)效的狀態(tài)。因此,如果用些無(wú)效的狀態(tài)。因此,如果用case語(yǔ)句來(lái)描述的話,語(yǔ)句來(lái)描述的話,需要增加需要增加default分支項(xiàng),以便在這些狀態(tài)下能自動(dòng)分支項(xiàng),以便在這些狀態(tài)下能自動(dòng)回到起始狀態(tài)。回到起始狀態(tài)。v 對(duì)于對(duì)于Mealy型型FSM電路來(lái)說(shuō),即使?fàn)顟B(tài)變化采用格雷碼或一電路來(lái)說(shuō),即使?fàn)顟B(tài)變化采用格雷碼或一位熱碼編碼輸出方式也不能保證輸出穩(wěn)定。因?yàn)?/p>

51、一般位熱碼編碼輸出方式也不能保證輸出穩(wěn)定。因?yàn)橐话鉓ealy型型FSM電路的最后一級(jí)是采用輸入信號(hào)和當(dāng)前狀態(tài)組成組合電路的最后一級(jí)是采用輸入信號(hào)和當(dāng)前狀態(tài)組成組合邏輯電路的方式,而組合邏輯電路不可避免的產(chǎn)生競(jìng)爭(zhēng)冒險(xiǎn)邏輯電路的方式,而組合邏輯電路不可避免的產(chǎn)生競(jìng)爭(zhēng)冒險(xiǎn)(如果輸入信號(hào)是兩位以上)。這時(shí)有一種方法可以很好地消(如果輸入信號(hào)是兩位以上)。這時(shí)有一種方法可以很好地消除這種輸出結(jié)果不穩(wěn)定現(xiàn)象:就是在最后的輸出端再加一級(jí)鐘除這種輸出結(jié)果不穩(wěn)定現(xiàn)象:就是在最后的輸出端再加一級(jí)鐘控寄存器,就可以不受組合邏輯輸出競(jìng)爭(zhēng)冒險(xiǎn)的影響??丶拇嫫鳎涂梢圆皇芙M合邏輯輸出競(jìng)爭(zhēng)冒險(xiǎn)的影響。 組合邏輯狀態(tài)寄存器組

52、合邏輯Mealy型Moore型時(shí)鐘輸入輸出緩沖寄存器基于宏功能模塊的設(shè)計(jì)基于宏功能模塊的設(shè)計(jì)v Quartus II為設(shè)計(jì)者提供了豐富的宏功能模塊庫(kù),采用宏功為設(shè)計(jì)者提供了豐富的宏功能模塊庫(kù),采用宏功能模塊完成設(shè)計(jì)可極大提高電路設(shè)計(jì)的效率和可靠性。能模塊完成設(shè)計(jì)可極大提高電路設(shè)計(jì)的效率和可靠性。v Quartus II軟件自帶的宏模塊庫(kù)主要有三個(gè),分別是軟件自帶的宏模塊庫(kù)主要有三個(gè),分別是Megafunctions庫(kù)、庫(kù)、Maxplus2庫(kù)和庫(kù)和Primitives庫(kù)。庫(kù)。v Megafunctions庫(kù)是參數(shù)化模塊庫(kù)(庫(kù)是參數(shù)化模塊庫(kù)(Library of Parametrized Modu

53、les, LPM),庫(kù)中是一些經(jīng)過(guò)驗(yàn)證),庫(kù)中是一些經(jīng)過(guò)驗(yàn)證的功能模塊,用戶可以根據(jù)自己的需要設(shè)定模塊的端口的功能模塊,用戶可以根據(jù)自己的需要設(shè)定模塊的端口(Ports)和參數(shù)和參數(shù)(Parameters),即可完成模塊的定制。,即可完成模塊的定制。v 按照按照Megafunctions庫(kù)中模塊的功能,將其分為算術(shù)運(yùn)算庫(kù)中模塊的功能,將其分為算術(shù)運(yùn)算模塊庫(kù)模塊庫(kù)(arithmetic)、邏輯門(mén)庫(kù)、邏輯門(mén)庫(kù)(gates)、存儲(chǔ)器庫(kù)、存儲(chǔ)器庫(kù)(storage)和和IO模塊庫(kù)模塊庫(kù)(I/O)四個(gè)子庫(kù)。四個(gè)子庫(kù)。v 有乘法器模塊、除法器模塊、計(jì)數(shù)器模塊、常數(shù)模塊、鎖相環(huán)有乘法器模塊、除法器模塊、計(jì)數(shù)器

54、模塊、常數(shù)模塊、鎖相環(huán)模塊、存儲(chǔ)器模塊等。模塊、存儲(chǔ)器模塊等。時(shí)鐘樹(shù)時(shí)鐘樹(shù)復(fù)雜的時(shí)鐘方案復(fù)雜的時(shí)鐘方案組合邏輯反饋循環(huán)和脈沖發(fā)生器組合邏輯反饋循環(huán)和脈沖發(fā)生器存儲(chǔ)器,存儲(chǔ)器,IO專用宏單元專用宏單元總做得和你一樣好總做得和你一樣好 綜合工具不能勝任的工作設(shè)計(jì)的可綜合性設(shè)計(jì)的可綜合性綜合工具善于優(yōu)化組合邏輯。但設(shè)計(jì)中有很大一部分不是組合邏輯。綜合工具善于優(yōu)化組合邏輯。但設(shè)計(jì)中有很大一部分不是組合邏輯。例如,時(shí)鐘樹(shù)。時(shí)鐘樹(shù)是全局的、芯片范圍的問(wèn)題。在沒(méi)有版圖布局信息的情況下,例如,時(shí)鐘樹(shù)。時(shí)鐘樹(shù)是全局的、芯片范圍的問(wèn)題。在沒(méi)有版圖布局信息的情況下,要給出較優(yōu)的結(jié)果,綜合工具對(duì)塊的大小有一定的限制。

55、要給出較優(yōu)的結(jié)果,綜合工具對(duì)塊的大小有一定的限制。綜合工具不能很好地處理復(fù)雜時(shí)鐘。通常,只允許要綜合的塊含有一個(gè)時(shí)鐘。但設(shè)綜合工具不能很好地處理復(fù)雜時(shí)鐘。通常,只允許要綜合的塊含有一個(gè)時(shí)鐘。但設(shè)計(jì)中經(jīng)常使用兩相時(shí)鐘或在雙沿時(shí)鐘。計(jì)中經(jīng)常使用兩相時(shí)鐘或在雙沿時(shí)鐘。綜合工具不易實(shí)現(xiàn)脈沖產(chǎn)生邏輯,如單個(gè)脈沖,或結(jié)果依賴于反饋路徑延遲的組合綜合工具不易實(shí)現(xiàn)脈沖產(chǎn)生邏輯,如單個(gè)脈沖,或結(jié)果依賴于反饋路徑延遲的組合反饋邏輯。對(duì)這種情況,插入延遲元件使一個(gè)信號(hào)推遲到達(dá)的效果并不好。反饋邏輯。對(duì)這種情況,插入延遲元件使一個(gè)信號(hào)推遲到達(dá)的效果并不好。不能用綜合產(chǎn)生大塊存儲(chǔ)器,因?yàn)榫C合工具會(huì)用不能用綜合產(chǎn)生大塊存

56、儲(chǔ)器,因?yàn)榫C合工具會(huì)用flip-flop實(shí)現(xiàn)。實(shí)現(xiàn)。不是所有的綜合工具都能很好地從工藝庫(kù)里挑選擇大的單元或宏單元,這需要用戶不是所有的綜合工具都能很好地從工藝庫(kù)里挑選擇大的單元或宏單元,這需要用戶人工實(shí)例化。一些宏單元,例如大的結(jié)構(gòu)規(guī)則的數(shù)據(jù)通路元件,最好使用生產(chǎn)商提人工實(shí)例化。一些宏單元,例如大的結(jié)構(gòu)規(guī)則的數(shù)據(jù)通路元件,最好使用生產(chǎn)商提供的硅編譯器產(chǎn)生。供的硅編譯器產(chǎn)生。綜合工具不保證產(chǎn)生最小結(jié)果。通常綜合結(jié)果不如人工結(jié)果,只要你有足夠的時(shí)間。綜合工具不保證產(chǎn)生最小結(jié)果。通常綜合結(jié)果不如人工結(jié)果,只要你有足夠的時(shí)間。 綜合工具不能勝任的工作綜合工具不能勝任的工作 不要引入不必要的不要引入不必

57、要的latch 敏感表要完整敏感表要完整 非結(jié)構(gòu)化的非結(jié)構(gòu)化的for循環(huán)循環(huán) 資源共享資源共享其它要注意的問(wèn)題其它要注意的問(wèn)題 條件分支不完全的條件語(yǔ)句(條件分支不完全的條件語(yǔ)句(if和和case語(yǔ)句)將會(huì)產(chǎn)生鎖存器語(yǔ)句)將會(huì)產(chǎn)生鎖存器always (cond_1) begin if (cond_1) data_out = data_in;endalways (sel or a or b or c or d) begin case (sel) 2b00: a = b; 2b01: a = c; 2b10: a = d; endcase end不要產(chǎn)生不需要的不要產(chǎn)生不需要的latch不完整的的

58、敏感表將引起綜合后網(wǎng)表的仿真結(jié)果與以前的不一致。不完整的的敏感表將引起綜合后網(wǎng)表的仿真結(jié)果與以前的不一致。always (d or clr) if (clr) q = 1b0; else if (e) q = d;always (d or clr or e) if (clr) q = 1b0; else if (e) q = d;敏感表要完整敏感表要完整綜合工具處理循環(huán)的方法是將循環(huán)內(nèi)的結(jié)構(gòu)重復(fù)。在循環(huán)中包含不變綜合工具處理循環(huán)的方法是將循環(huán)內(nèi)的結(jié)構(gòu)重復(fù)。在循環(huán)中包含不變化的表達(dá)式會(huì)使綜合工具花很多時(shí)間優(yōu)化這些冗余邏輯?;谋磉_(dá)式會(huì)使綜合工具花很多時(shí)間優(yōu)化這些冗余邏輯。for( I =0; i

59、4; i=i+1) begin sig1 = sig2; - unchanging statement data_outI = data_inI;endsig1 = sig2; - unchanging statementfor( I =0; i4; i=i+1) data_outI = data_inI;非結(jié)構(gòu)化的非結(jié)構(gòu)化的for循環(huán)循環(huán)只有在同一個(gè)條件語(yǔ)句只有在同一個(gè)條件語(yǔ)句(if和和case)不同的分支中的算術(shù)操作才會(huì)共享。不同的分支中的算術(shù)操作才會(huì)共享。條件操作符條件操作符 ?: 中的算術(shù)操作不共享。中的算術(shù)操作不共享。if (cond) z = a + b;else z = c +

60、d;Z = (cond) ? (a + b) : (c + d);資源共享資源共享利用括號(hào)分割邏輯。利用括號(hào)分割邏輯。z = a + b + c + d;Z = (a + b) + (c + d);+ab+c+zd+ab+cd+z括號(hào)的作用括號(hào)的作用在進(jìn)行可綜合的數(shù)字系統(tǒng)設(shè)計(jì)時(shí),應(yīng)特別注意以下一些要點(diǎn):在進(jìn)行可綜合的數(shù)字系統(tǒng)設(shè)計(jì)時(shí),應(yīng)特別注意以下一些要點(diǎn):v 1).不使用初始化語(yǔ)句;不使用帶有延時(shí)的描述;不使用循環(huán)次數(shù)不確定的循不使用初始化語(yǔ)句;不使用帶有延時(shí)的描述;不使用循環(huán)次數(shù)不確定的循環(huán)語(yǔ)句,如環(huán)語(yǔ)句,如forever,while等。等。v 2 ).應(yīng)盡量采用同步方式設(shè)計(jì)電路。應(yīng)盡量采用

溫馨提示

  • 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)論