第8章FPGA設(shè)計(jì)技巧與設(shè)計(jì)經(jīng)驗(yàn)_第1頁(yè)
第8章FPGA設(shè)計(jì)技巧與設(shè)計(jì)經(jīng)驗(yàn)_第2頁(yè)
第8章FPGA設(shè)計(jì)技巧與設(shè)計(jì)經(jīng)驗(yàn)_第3頁(yè)
第8章FPGA設(shè)計(jì)技巧與設(shè)計(jì)經(jīng)驗(yàn)_第4頁(yè)
第8章FPGA設(shè)計(jì)技巧與設(shè)計(jì)經(jīng)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩4頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第1節(jié) 基本設(shè)計(jì)技巧乒乓操作 1 操作過(guò)程 2 從外部看,數(shù)據(jù)流沒(méi)有停頓的進(jìn)出3 用低速模塊處理高速數(shù)據(jù)流 4 實(shí)際上,用兩個(gè)緩沖模塊實(shí)現(xiàn)了串并轉(zhuǎn)換,兩個(gè)預(yù)處理模塊并行,面積換速度; 串并轉(zhuǎn)換 串并轉(zhuǎn)換 1 FPGA設(shè)計(jì)的一個(gè)重要技巧 2 數(shù)據(jù)流處理的常用手段 3 面積與速度互換思想的直接體現(xiàn) 串并轉(zhuǎn)換的實(shí)現(xiàn)方法多種多樣,根據(jù)數(shù)據(jù)的排序和數(shù)量的要求,可以選用: 1 寄存器:小設(shè)計(jì)2 RAM:數(shù)據(jù)量比較大的情況 3 狀態(tài)機(jī):復(fù)雜的串并轉(zhuǎn)換 流水線(xiàn)操作 1 流水線(xiàn)處理是高速設(shè)計(jì)中的一個(gè)常用設(shè)計(jì)手段 2 如果某個(gè)設(shè)計(jì)的處理流程分為若干步驟,而且整個(gè)數(shù)據(jù)處理是“單流向”的,即沒(méi)有反饋或者迭代運(yùn)算,前一

2、個(gè)步驟的輸出是下一個(gè)步驟的輸入,則可以考慮采用流水線(xiàn)設(shè)計(jì)方法提高系統(tǒng)的工作頻率。 3 將適當(dāng)劃分的n個(gè)操作步驟單向串連起來(lái) 4 數(shù)據(jù)流在流水線(xiàn)各個(gè)部分的處理,從時(shí)間上看是連續(xù)的 5 數(shù)據(jù)流依次流經(jīng)n個(gè)模塊,完成每個(gè)步驟的操作 6 流水線(xiàn)設(shè)計(jì)時(shí),時(shí)序要進(jìn)行合理安排,每個(gè)操作步驟的劃分要合理,仔細(xì)考慮各個(gè)步驟間的數(shù)據(jù)流量 7 如果前級(jí)操作時(shí)間恰好等于后級(jí)的操作時(shí)間,設(shè)計(jì)最為簡(jiǎn)單,前級(jí)直接輸出到后級(jí)的輸入即可 8 如果前級(jí)操作時(shí)間大于后級(jí)的操作時(shí)間,則后級(jí)會(huì)經(jīng)??臻e??梢詫?duì)前級(jí)的輸出數(shù)據(jù)適當(dāng)緩存,再輸出到后級(jí)的輸入端 如果前級(jí)操作時(shí)間小于后級(jí)的操作時(shí)間,則必須通過(guò)復(fù)制邏輯,將數(shù)據(jù)流分流和并行預(yù)處理,

3、或者在前級(jí)對(duì)數(shù)據(jù)采用存儲(chǔ)、后處理方式,否則會(huì)造成后級(jí)數(shù)據(jù)溢出 數(shù)據(jù)接口的同步 1 兩種易出問(wèn)題的設(shè)計(jì)習(xí)慣-手工加入非門(mén)調(diào)整數(shù)據(jù)延遲,從而保證本級(jí)時(shí)鐘對(duì)上級(jí)數(shù)據(jù)的建立、保持時(shí)間的要求-為了有穩(wěn)定的采樣,時(shí)而用正沿打一下數(shù)據(jù),時(shí)而用負(fù)沿打一下數(shù)據(jù),以調(diào)整數(shù)據(jù)的采樣位置 2 問(wèn)題-一旦芯片更新?lián)Q代,或者移植到其它器件系列的芯片上,采樣實(shí)現(xiàn)必須重新設(shè)計(jì)-這兩種做法造成電路實(shí)現(xiàn)的時(shí)序余量不夠,一旦外界條件變換(比如溫度升高),采樣時(shí)序就有可能紊亂,造成電路不能完成預(yù)定的功能 3 如果輸入數(shù)據(jù)的節(jié)拍和本系統(tǒng)處理時(shí)鐘同頻,可以直接用本系統(tǒng)的主時(shí)鐘對(duì)輸入數(shù)據(jù)寄存器采樣,完成輸入數(shù)據(jù)的同步化 如果輸入數(shù)據(jù)的節(jié)拍

4、和本系統(tǒng)處理時(shí)鐘同頻,可以直接用本系統(tǒng)的主時(shí)鐘對(duì)輸入數(shù)據(jù)寄存器采樣,完成輸入數(shù)據(jù)的同步化 4 為了避免異步時(shí)鐘域產(chǎn)生錯(cuò)誤的采樣數(shù)據(jù),一般使用RAM、FIFO緩存的方法完成異步時(shí)鐘域的數(shù)據(jù)轉(zhuǎn)換。在輸入端口使用上級(jí)時(shí)鐘寫(xiě)數(shù)據(jù),在輸出端口使用本級(jí)時(shí)鐘讀數(shù)據(jù),就非第2節(jié) FPGA設(shè)計(jì)思考硬件描述語(yǔ)言的層次含義 HDL是目前數(shù)字ASIC、FPGA、CPLD等最重要的一種設(shè)計(jì)輸入方式: 1 利于自頂向下的設(shè)計(jì) 2 利于模塊劃分與復(fù)用 3 可移植性好、通用性好 4 與工藝無(wú)關(guān)等 常用的概念層次 系統(tǒng)級(jí) 功能模塊級(jí) 行為級(jí) 寄存器轉(zhuǎn)移級(jí) 門(mén)級(jí) Coding Style 1 使用高層次HDL進(jìn)行硬件設(shè)計(jì),所帶來(lái)

5、的問(wèn)題是設(shè)計(jì)者的設(shè)計(jì)思考與實(shí)際電路結(jié)構(gòu)是脫節(jié)的; 2 實(shí)際設(shè)計(jì)中,由于每個(gè)設(shè)計(jì)者對(duì)語(yǔ)言規(guī)則、電路行為的理解不同,編程風(fēng)格不同,往往對(duì)同樣的系統(tǒng)功能,描述的方式是不一樣的。所綜合出來(lái)的電路結(jié)構(gòu)更是大相逕庭; 即使最后綜合出來(lái)的電路都能實(shí)現(xiàn)相同的邏輯功能,其復(fù)雜程度和延時(shí)特性都會(huì)有較大差別; 與設(shè)計(jì)層次有關(guān); 3 與綜合工具相關(guān);-揮綜合工具的最大潛能-不同綜合工具對(duì)一些語(yǔ)法細(xì)節(jié)的解釋略有不同。 4 與器件的硬件結(jié)構(gòu)相關(guān)-充分、合理的使用硬件資源 分層次的模塊化設(shè)計(jì) 1 結(jié)構(gòu)層次化編碼是模塊化設(shè)計(jì)思想的一種體現(xiàn)。目前大型設(shè)計(jì)中必須采用結(jié)構(gòu)層次化編碼風(fēng)格,以提高代碼的可讀性,易于模塊劃分,易于分工協(xié)

6、作,易于設(shè)計(jì)仿真測(cè)試激勵(lì); 2 最基本的結(jié)構(gòu)化層次由一個(gè)頂層模塊和若干個(gè)子模塊構(gòu)成,每個(gè)子模塊根據(jù)需要還可以包含自己的子模塊。 3 結(jié)構(gòu)的層次不宜太深; 4 頂層模塊僅包含對(duì)所有模塊的組織和調(diào)用; 5 所有I/O信號(hào)的描述在頂層模塊完成; 6 子模塊之間可以有接口;不要建立子模塊之間跨層次的接口; 7 子模塊的合理劃分很重要,應(yīng)該綜合考慮子模塊的功能、結(jié)構(gòu)、時(shí)序、復(fù)雜度等多方面因素。 模塊劃分的技巧 1 結(jié)構(gòu)層次化設(shè)計(jì)方法的第一個(gè)要點(diǎn)就是模塊劃分,模塊劃分非常重要,關(guān)系到能否最大程度上發(fā)揮項(xiàng)目成員協(xié)同設(shè)計(jì)的能力,更重要的是它直接決定著設(shè)計(jì)的綜合、實(shí)現(xiàn)的耗時(shí)與效率。2 模塊劃分的基本原則如下:-

7、對(duì)每個(gè)同步時(shí)序設(shè)計(jì)的子模塊的輸出使用寄存器,有利于綜合工具對(duì)邏輯進(jìn)行優(yōu)化;-關(guān)的邏輯或可以復(fù)用的邏輯劃分在同一模塊內(nèi); -將不同優(yōu)化目標(biāo)的邏輯分開(kāi);-將松約束的邏輯歸到同一模塊;-將存儲(chǔ)邏輯獨(dú)立劃分成模塊;-合適的模塊規(guī)模。 盡量避免使用鎖存器 1 寄存器:時(shí)鐘沿敏感,利用時(shí)鐘沿確定數(shù)據(jù)傳輸?shù)捷敵龅臅r(shí)刻; 2 鎖存器:電平敏感,只要時(shí)鐘是高電平(或低電平),就允許數(shù)據(jù)從輸入傳輸?shù)捷敵觥?3 鎖存器會(huì)造成設(shè)計(jì)和時(shí)序驗(yàn)證中的各種困難。-鎖存器對(duì)輸入數(shù)據(jù)的毛刺非常敏感,會(huì)將其傳送到輸出-軟件無(wú)法確定使用鎖存器的設(shè)計(jì)人員的設(shè)計(jì)意圖;-其他設(shè)計(jì)者不容易進(jìn)行設(shè)計(jì)移植和代碼重用。 4 FPGA擁有大量的寄存

8、器,基于鎖存器的設(shè)計(jì)比基于寄存器的設(shè)計(jì)要占用更多的邏輯資源,性能降低。 5 如果堅(jiān)持用鎖存器設(shè)計(jì)必須保證輸入信號(hào)絕對(duì)沒(méi)有毛刺,且滿(mǎn)足保持時(shí)間。6 同步時(shí)序設(shè)計(jì)應(yīng)該盡量避免使用鎖存器Latch; 7 綜合出鎖存器的主要原因:-不完全的條件判斷語(yǔ)句;-設(shè)計(jì)中有組合邏輯的反饋環(huán)路等異步邏輯。 8 防止產(chǎn)生不必要鎖存器的措施:-用完整的ifelse語(yǔ)句;-檢查設(shè)計(jì)中是否含有組合邏輯反饋環(huán)路;-為每個(gè)輸入條件,設(shè)計(jì)輸出操作,對(duì)case語(yǔ)句設(shè)置default操作,在狀態(tài)機(jī)中最好有一個(gè)default的狀態(tài)轉(zhuǎn)移,每個(gè)狀態(tài)最好有一個(gè)default的操作;-在使用case語(yǔ)句時(shí),附加“full case”約束,以

9、便將其綜合為完全的條件case語(yǔ)句; -仔細(xì)檢查綜合軟件的綜合報(bào)告,目前大多數(shù)綜合軟件對(duì)綜合出的鎖存器會(huì)報(bào)告“warning”。異步時(shí)鐘域之間的數(shù)據(jù)交換第3節(jié) FPGA其他技巧優(yōu)化時(shí)序 1 可以使用pipelining、retiming、register balancing等時(shí)序優(yōu)化方法; 2 對(duì)設(shè)計(jì)中較長(zhǎng)的組合邏輯路徑進(jìn)行分割和平衡,在一定程度上提高設(shè)計(jì)的工作頻率; 3 目前綜合軟件能夠根據(jù)用戶(hù)的參數(shù)配置,自動(dòng)運(yùn)用這些技術(shù)。 模塊復(fù)用與資源共享 1 舉例:補(bǔ)碼平方和 module resource_share (data_in, square); input 7:0 data_in; /輸入

10、是補(bǔ)碼 output 15:0 square; wire 7:0 data_bar; assign data_bar = data_in + 1; assign square = (data_in7)? (data_bar*data_bar):(data_in*data_in); endmodule 舉例:補(bǔ)碼平方和module resource_share (data_in, square); input 7:0 data_in; /輸入是補(bǔ)碼 output 15:0 square; wire 7:0 data_temp; assign data_temp = (data_in7)? (da

11、ta_in + 1) : data_in; assign square = data_temp*data_temp; endmodule 1 本例使用Synplify Pro7.2進(jìn)行綜合,關(guān)閉了“resource sharing”等所有優(yōu)化選項(xiàng); 2 不同的綜合軟件,同一軟件的不同版本、不同的優(yōu)化參數(shù)設(shè)置、不同的目標(biāo)器件等因素都可能造成不同的綜合結(jié)果; 3 目前很多綜合軟件都有“resource sharing”或類(lèi)似的優(yōu)化選項(xiàng),軟件在邏輯功能不變的情況下進(jìn)行資源共享。上例中,如果打開(kāi)Synplify的“resource sharing”選項(xiàng),則綜合結(jié)果與第二種代碼描述的綜合結(jié)果完全一致;

12、4 不能因?yàn)榫C合軟件的優(yōu)化能力增強(qiáng),而片面的依靠它,還是要養(yǎng)成好的coding style。 -綜合工具的優(yōu)化能力還是有限的;-依靠綜合工具的優(yōu)化能力并不可靠。 邏輯復(fù)制 1 邏輯復(fù)制是通過(guò)增加面積而改善時(shí)序條件的優(yōu)化方法; 2 如果某個(gè)信號(hào)需要驅(qū)動(dòng)后級(jí)的很多單元,為了增加這個(gè)信號(hào)的驅(qū)動(dòng)能力,就可以復(fù)制生成這個(gè)信號(hào)的邏輯,使多路同頻同相的信號(hào)驅(qū)動(dòng)后續(xù)電路; 3 可見(jiàn),邏輯復(fù)制與資源共享,仍然體現(xiàn)了速度和面積的平衡問(wèn)題。一個(gè)側(cè)重于速度目標(biāo),一個(gè)側(cè)重于面積目標(biāo)。 邏輯復(fù)制: sign data_out = (sel)? (a+b) : (c+d); 資源共享: wire temp1, temp2;

13、 assign temp1 = (sel)? (a) : (c); assign temp2 = (sel)? (b) : (d); assign data_out = temp1 + temp2; 香農(nóng)擴(kuò)展 1 香農(nóng)擴(kuò)展(布爾邏輯擴(kuò)展)也是一種通過(guò)邏輯復(fù)制、增加面積、提高速度的時(shí)序優(yōu)化方法; 2 是卡諾邏輯化簡(jiǎn)的反向操作。 3 通過(guò)增加多路選擇器,縮短了某個(gè)優(yōu)先級(jí)高、但組合路徑長(zhǎng)的信號(hào)的路徑時(shí)延,從而提高該關(guān)鍵路徑的工作頻率。 4 優(yōu)化目標(biāo)決定是否使用這種時(shí)序優(yōu)化手段。 信號(hào)敏感表 1 信號(hào)敏感表:VHDL的process后、Verilog的always后的信號(hào)列表,模塊的啟動(dòng)由信號(hào)敏感表中

14、的信號(hào)來(lái)觸發(fā)。 2 時(shí)序邏輯:在信號(hào)敏感表寫(xiě)明時(shí)鐘信號(hào)的正負(fù)觸發(fā)沿即可; 3 組合邏輯:-將進(jìn)程中使用到的所有輸入信號(hào)和條件判斷信號(hào)都列在信號(hào)敏感表中;-不完整的信號(hào)敏感表會(huì)造成前仿真結(jié)果和綜合、實(shí)現(xiàn)后仿真結(jié)果不一致; -不同的綜合工具處理方法不一樣。一般綜合軟件的默認(rèn)做法是,將處理進(jìn)程中用到的所有輸入和條件判斷信號(hào)都默認(rèn)添加到綜合結(jié)果的信號(hào)敏感表中,并對(duì)原設(shè)計(jì)敏感表中遺漏的信號(hào)給出警告信息。 復(fù)位邏輯 1 復(fù)位方式:-與設(shè)計(jì)內(nèi)容有關(guān);-與目標(biāo)器件的底層硬件結(jié)構(gòu)密切相關(guān)。 2 異步復(fù)位 vs.同步復(fù)位:-如果信號(hào)敏感表中含有復(fù)位信號(hào)的正沿或負(fù)沿觸發(fā),則屬于異步復(fù)位邏輯;-一般來(lái)說(shuō),采用同步復(fù)位

15、邏輯的設(shè)計(jì)工作頻率較高;-使用異步復(fù)位邏輯的設(shè)計(jì)較簡(jiǎn)單; 3 對(duì)于全局復(fù)位邏輯,不同廠商的器件的推薦設(shè)計(jì)不同:-對(duì)于CPLD,一般推薦使用異步的全局復(fù)位邏輯;-Xilinx的新型FPGA器件不推薦使用全局復(fù)位邏輯;-Lattice的多數(shù)FPGA器件推薦使用全局復(fù)位資源 。 有限狀態(tài)機(jī)(FSM)設(shè)計(jì) 1 有限狀態(tài)機(jī)是重要的邏輯設(shè)計(jì)方法,通過(guò)狀態(tài)轉(zhuǎn)移圖可以將復(fù)雜的控制時(shí)序分解為狀態(tài)之間的轉(zhuǎn)換關(guān)系。 2 狀態(tài)機(jī)類(lèi)型:-Moore型:狀態(tài)機(jī)的輸出僅是當(dāng)前狀態(tài)的函數(shù),且僅在時(shí)鐘跳變時(shí)發(fā)生變化;-Mealy型:狀態(tài)機(jī)的輸出是當(dāng)前狀態(tài)和當(dāng)前輸入的函數(shù),任何輸入信號(hào)的變化都可能引起輸出信號(hào)的變化,不與時(shí)鐘同步

16、。 3 狀態(tài)機(jī)的編碼:-二進(jìn)制編碼 vs. One-Hot編碼 -例:4個(gè)狀態(tài) -二進(jìn)制編碼:00, 01, 10, 11(或格雷碼等) -One-Hot編碼:0001, 0010, 0100, 1000-二進(jìn)制編碼使用較少的觸發(fā)器和較多的組合邏輯;適用于CPLD和小型狀態(tài)機(jī)設(shè)計(jì); -One-Hot編碼使用較多的觸發(fā)器和較少的組合邏輯;適用于FPGA和大型狀態(tài)機(jī)設(shè)計(jì);-可通過(guò)設(shè)置綜合軟件的選項(xiàng)來(lái)選擇狀態(tài)機(jī)編碼; 4 有限狀態(tài)機(jī)設(shè)計(jì)的方法有兩大類(lèi):-將狀態(tài)轉(zhuǎn)移和狀態(tài)操作和判斷寫(xiě)在一個(gè)模塊里;-將狀態(tài)轉(zhuǎn)移寫(xiě)成一個(gè)單獨(dú)的模塊,將狀態(tài)的操作和判斷寫(xiě)到另一個(gè)模塊中; 5 其中后者是比較好的設(shè)計(jì)方式。-便

17、于閱讀、理解、維護(hù);-狀態(tài)轉(zhuǎn)移是用寄存器實(shí)現(xiàn)的,是同步時(shí)序部分;狀態(tài)的判斷是組合邏輯; -利于綜合工具優(yōu)化代碼; -利于用戶(hù)添加時(shí)序約束; -利于布局布線(xiàn)軟件對(duì)設(shè)計(jì)的實(shí)現(xiàn)。 6 個(gè)健壯的狀態(tài)機(jī)應(yīng)該具備初始化狀態(tài)和默認(rèn)狀態(tài)(缺省狀態(tài));-當(dāng)芯片加電或復(fù)位后,狀態(tài)機(jī)應(yīng)該能夠自動(dòng)將所有判斷條件復(fù)位,并進(jìn)入初始化狀態(tài);-狀態(tài)機(jī)應(yīng)該有一個(gè)默認(rèn)狀態(tài),當(dāng)轉(zhuǎn)移條件不滿(mǎn)足或狀態(tài)發(fā)生突變時(shí),保證邏輯不會(huì)陷入死循環(huán)。這就要求盡量使用完備的條件判斷語(yǔ)句。 -VHDL中,使用case語(yǔ)句時(shí),要用when others建立默認(rèn)狀態(tài),使用ifthenelse語(yǔ)句時(shí),用else指定默認(rèn)狀態(tài); -Verilog中,使用case

18、語(yǔ)句時(shí),要用default建立默認(rèn)狀態(tài),使用ifelse語(yǔ)句時(shí)也要完備。 7 指定默認(rèn)的輸出值:-能夠防止無(wú)意生成的鎖存器;-輸出經(jīng)過(guò)一個(gè)寄存器,以獲得更好的時(shí)序環(huán)境; 8 狀態(tài)機(jī)輸出邏輯復(fù)用-如果在狀態(tài)機(jī)中有多個(gè)狀態(tài)都會(huì)執(zhí)行某項(xiàng)操作,則可以在狀態(tài)機(jī)外部定義這個(gè)操作的具體內(nèi)容,在狀態(tài)機(jī)中僅僅調(diào)用這個(gè)操作即可。-相當(dāng)于前面提到的資源共享。 9 HDL設(shè)計(jì)源代碼-作為好的源代碼,應(yīng)該包含文件頭和修訂列表(以獲得修改情況)。另外,每一個(gè)重要的操作和定義后都要加上注釋。-文件頭包含以下內(nèi)容: -模塊名 -文件名 -需要的庫(kù) -模塊描述 -使用的仿真器-其運(yùn)行平臺(tái)和版本 -使用的綜合工具,其運(yùn)行平臺(tái)和版本 -作者 修訂列表包含以下內(nèi)容:-修訂版本號(hào) -改動(dòng)的時(shí)間-修訂者-改動(dòng)的詳細(xì)描述 例:文件頭 - Module : MAC (Multiply Accumulate Unit) - File : mac.vhd - Library : ieee,. - Description : It is a general Purpose Multiply Accumulate Unit - Simulator : Modelsim 5.2 / Windows 95 - Synthesizer : Synplify / Windows95 - Author / Designer : Hari

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論