第4講 Verilog HDL高級編程技術(shù)_第1頁
第4講 Verilog HDL高級編程技術(shù)_第2頁
第4講 Verilog HDL高級編程技術(shù)_第3頁
第4講 Verilog HDL高級編程技術(shù)_第4頁
第4講 Verilog HDL高級編程技術(shù)_第5頁
已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第四講第四講 Verilog HDL高級編程技術(shù)高級編程技術(shù)參見課本的第參見課本的第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ù)字信號處理和數(shù)字通信的各種算法中。由于加法器、號處理和數(shù)字通信的各種算法中。由于加法器、乘法器使用頻繁,所以其速度往往影響著整個系乘法器使用頻繁,所以其速度往往影響著整個系統(tǒng)的運(yùn)行速度。如

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

3、全加器級連構(gòu)成的,本級的進(jìn)位輸出作為位全加器級連構(gòu)成的,本級的進(jìn)位輸出作為下一級的進(jìn)位輸入。下一級的進(jìn)位輸入。 級連加法器結(jié)構(gòu)簡單,但級連加法器結(jié)構(gòu)簡單,但N位級連加法運(yùn)算的延時是位級連加法運(yùn)算的延時是1位全加位全加器的器的N倍,延時主要是進(jìn)位信號級連造成倍,延時主要是進(jìn)位信號級連造成的。在需要高性能的的。在需要高性能的設(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描述語言,實(shí)現(xiàn)起來很容易,描述語言,實(shí)現(xiàn)起來很容易,其運(yùn)算速度快,但耗用其運(yùn)算速度快,但耗用資源多,尤其是當(dāng)加法運(yùn)算的位數(shù)較寬時資源多,尤

6、其是當(dāng)加法運(yùn)算的位數(shù)較寬時,其耗用的,其耗用的資源將會較大。資源將會較大。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ì)中的一個主要問題就為保證數(shù)據(jù)吞吐率,電路設(shè)計(jì)中的一個主要問題就是要維持系統(tǒng)時鐘的速度處于或高于某一頻率。例如,是要維持系統(tǒng)時鐘的速度處于或高于某一頻率。例如,如果整個系統(tǒng)是一個全同步時鐘,同時又必須運(yùn)行在如果整個系統(tǒng)是一個全同

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

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

9、因此在FPGA設(shè)計(jì)中采用流水線技術(shù)可以有設(shè)計(jì)中采用流水線技術(shù)可以有效提高系統(tǒng)的速度。效提高系統(tǒng)的速度。v 實(shí)際中的乘法器大多是有時鐘引腳的,以連續(xù)不斷地進(jìn)行乘法實(shí)際中的乘法器大多是有時鐘引腳的,以連續(xù)不斷地進(jìn)行乘法運(yùn)算。在有時鐘信號的乘法器中,可以采用流水線設(shè)計(jì)技術(shù),運(yùn)算。在有時鐘信號的乘法器中,可以采用流水線設(shè)計(jì)技術(shù),以提高系統(tǒng)的運(yùn)行頻率。同樣加法器也可以采用流水線設(shè)計(jì)。以提高系統(tǒng)的運(yùn)行頻率。同樣加法器也可以采用流水線設(shè)計(jì)。v 下面的例子就是一個兩個流水下面的例子就是一個兩個流水8位加法,由兩個位加法,由兩個4位加法器構(gòu)位加法器構(gòu)成,輸出存儲在寄存器中。成,輸出存儲在寄存器中。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ù)字信號處理和數(shù)字通信的各種乘法器也頻繁使用在數(shù)字信號處理和數(shù)字通信的各種算法中,并且往往影響著整個系統(tǒng)的運(yùn)行速度,所以算法中,并且往往影響著整個系統(tǒng)的運(yùn)行速度,所以如果能實(shí)現(xiàn)快速乘法器的設(shè)計(jì),可提高整個系統(tǒng)的處如果能實(shí)現(xiàn)快速乘法器的設(shè)計(jì),可提高整個系統(tǒng)的處理速度。乘法器的設(shè)計(jì)方法主要有:并行運(yùn)算理速度。乘法器的設(shè)計(jì)方法主要有:并行運(yùn)算(純組合純組合邏輯邏輯)、移位相加、查找表、加法樹等。、移位相加、查找表、加法樹等。v1.并行乘法器:并行乘法器是純組合邏輯的乘法器,并行乘法器:并行乘法器是純組合邏輯的乘法器,完全由邏輯門實(shí)現(xiàn)。對于完全由邏輯門實(shí)

12、現(xiàn)。對于11乘法,只需乘法,只需1個與門即個與門即可實(shí)現(xiàn),可實(shí)現(xiàn),P=AB。對于。對于22乘法,根據(jù)課本乘法,根據(jù)課本P189的真值表可以得出結(jié)果表達(dá)式:的真值表可以得出結(jié)果表達(dá)式: 因此我們可以用與門、或門來實(shí)現(xiàn)。因此我們可以用與門、或門來實(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個個LE單元。單元。而如果所用的而如果所用的FPGA器件中有嵌入式乘法器的話,則可采用嵌入器件中有嵌入式乘法器的話,則可采用嵌入式乘法器來實(shí)現(xiàn)乘法,比如將上例適配到式乘法器來實(shí)現(xiàn)乘法,比如將上例適配到Cyclone II系列的系列的EP2C5器件的話,只耗用器件的話,只耗用1個個LE單元和單元和1個個9位位*9位的嵌入式位的嵌入式乘法

14、器單元。乘法器單元。 因此,如果所用的因此,如果所用的FPGA器件中有硬件乘法器,建議用硬件乘器件中有硬件乘法器,建議用硬件乘法器來實(shí)現(xiàn)乘法操作,具有速度快,資源利用合理等優(yōu)點(diǎn)。法器來實(shí)現(xiàn)乘法操作,具有速度快,資源利用合理等優(yōu)點(diǎn)。v2.移位相加乘法器移位相加乘法器 移位相加乘法器將乘法變?yōu)榧臃▽?shí)現(xiàn),其設(shè)計(jì)思路是:乘法移位相加乘法器將乘法變?yōu)榧臃▽?shí)現(xiàn),其設(shè)計(jì)思路是:乘法通過逐次移位相加實(shí)現(xiàn),每次判斷乘數(shù)的最低位,若為通過逐次移位相加實(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 對于乘數(shù)中的第對于乘數(shù)中的第i位,若為位,若為1,則,則將被乘數(shù)左移將被乘數(shù)左移i位,并加到上次的位,并加到上次的部分積結(jié)果上。部分積結(jié)果上。(若為若為0可以看作可以看作只移位不相加。只移位不相加。)v 也可以依次判斷乘數(shù)也可以依次判斷乘數(shù)B的最低有的最低有效位是否為效位是否為1,若為,若為1則則P=P+A(部分積(部分積P在剛開始時要清在剛開始時要清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時,只需接著移位,不要相加時,只需接著移位,不要相加v移位相加乘法器是一種相對節(jié)省資源的設(shè)計(jì)方法,移位相加乘法器是一種相對節(jié)省資源的設(shè)計(jì)方法,為了實(shí)現(xiàn)為了實(shí)現(xiàn)nn乘法,需要一個乘法,需要一個2n位的左移寄存器位的左移寄存器(存放部分積),一個(存放部分積),一個n位的右移寄存器(可用除數(shù)位的右移寄存器(可用除數(shù)寄存器代替),一個寄存器代替),一個2n位加法器(被加數(shù)為部分積位加法器(被加數(shù)為部分積和被乘數(shù),所以還需要一個被乘數(shù)寄存器),再加和被乘數(shù),所以還需要一個被乘數(shù)寄存器),

17、再加少量的控制邏輯即可實(shí)現(xiàn)。尤其是當(dāng)操作數(shù)位寬增少量的控制邏輯即可實(shí)現(xiàn)。尤其是當(dāng)操作數(shù)位寬增加時,移位相加乘法器耗用的邏輯資源不會像并行加時,移位相加乘法器耗用的邏輯資源不會像并行乘法器那樣急劇增加。乘法器那樣急劇增加。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ì)算是在一個時鐘周期內(nèi)完成的。循環(huán)計(jì)算是在一個時鐘周期內(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時用時用break語語句跳出?句跳出?v 答答:因?yàn)橐驗(yàn)閂erilog中沒有中沒有break語句。語句。Verilog的的for循循環(huán)綜合后是硬件的重復(fù),而環(huán)綜合后是硬件的重復(fù),而C語言的語言的for是過程的重復(fù)。是過程的重復(fù)。所以說在所以說在Verilog中沒有中沒有break 。v3.查找表乘法器查找表

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

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

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

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

24、現(xiàn)。實(shí)現(xiàn)。v運(yùn)算時先將運(yùn)算時先將 被除數(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ù)位寬)個個0,構(gòu)成新的被除數(shù),這時的循,構(gòu)成新的被除數(shù),這時的循環(huán)次數(shù)也就等于(原來被除數(shù)的位環(huán)次數(shù)也就等于(原來被除數(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ù)乘法,可以通過整數(shù)除法也可以轉(zhuǎn)化為小數(shù)乘法,可以通過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ù)相加減 的形式表示出來,該編碼與傳統(tǒng)的二進(jìn)制編碼不同,它使用的形式表示出

28、來,該編碼與傳統(tǒng)的二進(jìn)制編碼不同,它使用3個值來表個值來表 示數(shù)字,即示數(shù)字,即0,1,-1,其中,其中-1常寫為常寫為 。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)閯傞_始的小數(shù)乘以了因?yàn)閯傞_始的小數(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)一個字節(jié)右移位),因?yàn)楫?dāng)一個字節(jié)右移8位后就什位后就什么都沒有,只剩下么都沒有,只剩下0了。了。sd) 11000. 0(sd)1101.00101100(奇數(shù)分頻與小數(shù)分頻奇數(shù)分頻與小數(shù)分頻v1.奇數(shù)分頻奇數(shù)分頻 在實(shí)際應(yīng)用中,我們經(jīng)常會遇到這樣的問題,需要在實(shí)際應(yīng)用中,我們經(jīng)常會遇到這樣的問題,需要進(jìn)行奇數(shù)次分頻,同時又要得到占空比是進(jìn)行奇數(shù)次分頻,同時又要得到占空比是50%的方的方波波形。如果是偶數(shù)次分頻的話,得到占空比是波波形。如果是偶數(shù)次分頻的話,得到占空比是50%的方波并不困難,比如進(jìn)行的方波并不困難,比如進(jìn)行2N次分頻,只需在次分頻

31、,只需在計(jì)數(shù)到計(jì)數(shù)到N-1(從從0開始開始)時,波形翻轉(zhuǎn)即可;或者在最時,波形翻轉(zhuǎn)即可;或者在最后一級加一個后一級加一個2分頻器也可實(shí)現(xiàn)。如果是奇數(shù)次分頻分頻器也可實(shí)現(xiàn)。如果是奇數(shù)次分頻的話,可采用如下方法:用兩個計(jì)數(shù)器,一個由輸入的話,可采用如下方法:用兩個計(jì)數(shù)器,一個由輸入時鐘上升沿觸發(fā),一個由輸入時鐘下降沿觸發(fā),最后時鐘上升沿觸發(fā),一個由輸入時鐘下降沿觸發(fā),最后將兩個計(jì)數(shù)器的輸出相或,即可得到占空比為將兩個計(jì)數(shù)器的輸出相或,即可得到占空比為50%的方波波形。的方波波形。 下面的示例就實(shí)現(xiàn)了對輸入時鐘下面的示例就實(shí)現(xiàn)了對輸入時鐘CLK的的7分頻,同分頻,同時得到了占空比為時得到了占空比為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; /兩個計(jì)數(shù)器的輸出相或兩個計(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è)有一個設(shè)有一個5MHz的時鐘信號,但需要得到的時鐘信號,但需要得到2MHz的時鐘,分的時鐘,分頻比為頻比為2.5,此時可采用半整數(shù)分頻器。其設(shè)計(jì)思想為:要實(shí),

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

35、輸出異或的結(jié)果。XOR輸入時鐘 clkin2分頻模N計(jì)數(shù)器clk2clk1輸出時鐘 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)常會遇到小數(shù)分頻。實(shí)現(xiàn)小在實(shí)

37、際應(yīng)用中,還經(jīng)常會遇到小數(shù)分頻。實(shí)現(xiàn)小數(shù)分頻可采用兩種方法:數(shù)分頻可采用兩種方法:v一種是用數(shù)字鎖相環(huán)實(shí)現(xiàn),先利用鎖相環(huán)電路將輸入一種是用數(shù)字鎖相環(huán)實(shí)現(xiàn),先利用鎖相環(huán)電路將輸入時鐘倍頻,然后再利用分頻器對新產(chǎn)生的高頻信號進(jìn)時鐘倍頻,然后再利用分頻器對新產(chǎn)生的高頻信號進(jìn)行分頻得到需要的時鐘頻率。比如要實(shí)現(xiàn)行分頻得到需要的時鐘頻率。比如要實(shí)現(xiàn)5.7分頻,分頻,可以先將輸入的時鐘可以先將輸入的時鐘10倍頻,然后再將倍頻后的時倍頻,然后再將倍頻后的時鐘鐘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ì)兩個不同分頻比的整數(shù)分頻器,然后通過控制兩設(shè)計(jì)兩個不同分頻比的整數(shù)分頻器,然后通過控制兩種分頻比出現(xiàn)的不同次數(shù)來獲得所需要的小數(shù)分頻值,種分頻比出現(xiàn)的不同次數(shù)來獲得所需要的小數(shù)分頻值,從而實(shí)現(xiàn)從而實(shí)現(xiàn)平均意義上的小數(shù)分頻平均意義上的小數(shù)分頻。下例就是實(shí)現(xiàn)的一個分頻系數(shù)為下例就是實(shí)現(xiàn)的一個分頻系數(shù)為8.1的小數(shù)分頻器,通過計(jì)數(shù)器先做的小數(shù)分頻器,通過計(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è)計(jì)數(shù)

41、字系統(tǒng)的控很重要的時序邏輯電路,尤其適合設(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)時序邏輯電路,三是輸二是由狀態(tài)觸發(fā)器構(gòu)成的現(xiàn)態(tài)時序邏輯電路,三是輸出組合邏輯電路。出組合邏輯電路。v根據(jù)電路的輸出信號是否與電路的輸入有關(guān),有限狀根據(jù)電路的輸出信號是否與電路的輸入有關(guān),有限狀態(tài)機(jī)可分為兩種類型:一類是態(tài)機(jī)可分為兩種類型:一類是Mealy(米莉米莉)型狀態(tài)機(jī),型狀態(tài)機(jī),其輸出信號不僅與電路的當(dāng)前狀態(tài)有關(guān),還與電路

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

43、0s21/01/0s30/10/01/0s0:0 s1:1 s2:11 s3:110起始狀態(tài)狀態(tài)轉(zhuǎn)移圖的繪制(檢測序列狀態(tài)轉(zhuǎn)移圖的繪制(檢測序列0101)s00/0s11/0s0:0 s1:01 s2:010 s3:1(無效狀態(tài)無效狀態(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對于對于Mealy型型FSM電路來說,由于電路的輸出除了與電路的現(xiàn)電路來說,由于電路的輸出除了與電路的現(xiàn)態(tài)有關(guān)外,還與電路的輸入信號有關(guān),如果輸入信號的變化不能態(tài)有關(guān)外,還與電路的輸入信號有關(guān),如果輸入信號的變化不能及時被檢測,而要等

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

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

48、塊描述電路(檢測序列檢測序列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),引起邏輯),引起邏輯錯誤。錯誤。v 格雷編碼相鄰狀態(tài)每次只有一個比特位產(chǎn)生變格雷編碼相鄰狀態(tài)每次

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

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

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

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

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

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

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

56、儲器,因?yàn)榫C合工具會用flip-flop實(shí)現(xiàn)。實(shí)現(xiàn)。不是所有的綜合工具都能很好地從工藝庫里挑選擇大的單元或宏單元,這需要用戶不是所有的綜合工具都能很好地從工藝庫里挑選擇大的單元或宏單元,這需要用戶人工實(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é)果,只要你有足夠的時間。綜合工具不保證產(chǎn)生最小結(jié)果。通常綜合結(jié)果不如人工結(jié)果,只要你有足夠的時間。 綜合工具不能勝任的工作綜合工具不能勝任的工作 不要引入不必要的不要引入不必

57、要的latch 敏感表要完整敏感表要完整 非結(jié)構(gòu)化的非結(jié)構(gòu)化的for循環(huán)循環(huán) 資源共享資源共享其它要注意的問題其它要注意的問題 條件分支不完全的條件語句(條件分支不完全的條件語句(if和和case語句)將會產(chǎn)生鎖存器語句)將會產(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á)式會使綜合工具花很多時間優(yōu)化這些冗余邏輯?;谋磉_(dá)式會使綜合工具花很多時間優(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)只有在同一個條件語句只有在同一個條件語句(if和和case)不同的分支中的算術(shù)操作才會共享。不同的分支中的算術(shù)操作才會共享。條件操作符條件操作符 ?: 中的算術(shù)操作不共享。中的算術(shù)操作不共享。if (cond) z = a + b;else z = c +

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

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論