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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

9、便將其綜合為完全的條件case語句; -仔細(xì)檢查綜合軟件的綜合報告,目前大多數(shù)綜合軟件對綜合出的鎖存器會報告“warning”。異步時鐘域之間的數(shù)據(jù)交換第3節(jié) FPGA其他技巧優(yōu)化時序 1 可以使用pipelining、retiming、register balancing等時序優(yōu)化方法; 2 對設(shè)計中較長的組合邏輯路徑進(jìn)行分割和平衡,在一定程度上提高設(shè)計的工作頻率; 3 目前綜合軟件能夠根據(jù)用戶的參數(shù)配置,自動運(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)化選項; 2 不同的綜合軟件,同一軟件的不同版本、不同的優(yōu)化參數(shù)設(shè)置、不同的目標(biāo)器件等因素都可能造成不同的綜合結(jié)果; 3 目前很多綜合軟件都有“resource sharing”或類似的優(yōu)化選項,軟件在邏輯功能不變的情況下進(jìn)行資源共享。上例中,如果打開Synplify的“resource sharing”選項,則綜合結(jié)果與第二種代碼描述的綜合結(jié)果完全一致;

12、4 不能因為綜合軟件的優(yōu)化能力增強(qiáng),而片面的依靠它,還是要養(yǎng)成好的coding style。 -綜合工具的優(yōu)化能力還是有限的;-依靠綜合工具的優(yōu)化能力并不可靠。 邏輯復(fù)制 1 邏輯復(fù)制是通過增加面積而改善時序條件的優(yōu)化方法; 2 如果某個信號需要驅(qū)動后級的很多單元,為了增加這個信號的驅(qū)動能力,就可以復(fù)制生成這個信號的邏輯,使多路同頻同相的信號驅(qū)動后續(xù)電路; 3 可見,邏輯復(fù)制與資源共享,仍然體現(xiàn)了速度和面積的平衡問題。一個側(cè)重于速度目標(biāo),一個側(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ò)展)也是一種通過邏輯復(fù)制、增加面積、提高速度的時序優(yōu)化方法; 2 是卡諾邏輯化簡的反向操作。 3 通過增加多路選擇器,縮短了某個優(yōu)先級高、但組合路徑長的信號的路徑時延,從而提高該關(guān)鍵路徑的工作頻率。 4 優(yōu)化目標(biāo)決定是否使用這種時序優(yōu)化手段。 信號敏感表 1 信號敏感表:VHDL的process后、Verilog的always后的信號列表,模塊的啟動由信號敏感表中

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

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

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

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

18、語句時,要用default建立默認(rèn)狀態(tài),使用ifelse語句時也要完備。 7 指定默認(rèn)的輸出值:-能夠防止無意生成的鎖存器;-輸出經(jīng)過一個寄存器,以獲得更好的時序環(huán)境; 8 狀態(tài)機(jī)輸出邏輯復(fù)用-如果在狀態(tài)機(jī)中有多個狀態(tài)都會執(zhí)行某項操作,則可以在狀態(tài)機(jī)外部定義這個操作的具體內(nèi)容,在狀態(tài)機(jī)中僅僅調(diào)用這個操作即可。-相當(dāng)于前面提到的資源共享。 9 HDL設(shè)計源代碼-作為好的源代碼,應(yīng)該包含文件頭和修訂列表(以獲得修改情況)。另外,每一個重要的操作和定義后都要加上注釋。-文件頭包含以下內(nèi)容: -模塊名 -文件名 -需要的庫 -模塊描述 -使用的仿真器-其運(yùn)行平臺和版本 -使用的綜合工具,其運(yùn)行平臺和版本 -作者 修訂列表包含以下內(nèi)容:-修訂版本號 -改動的時間-修訂者-改動的詳細(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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

提交評論