fpga學(xué)徒一枚,會持續(xù)分享FPGA學(xué)習(xí)周報(bào),也歡迎各位小伙伴指正
學(xué)習(xí)內(nèi)容
1.面積優(yōu)化
1.1面積優(yōu)化:
就是在實(shí)現(xiàn)預(yù)定功能的情況下,使用更小的面積。通過優(yōu)化,可以使設(shè)計(jì)能夠運(yùn)行在資源較少的平臺上,節(jié)約成本,也可以為其他設(shè)計(jì)提供面積資源。
1.2邏輯優(yōu)化
使用優(yōu)化后的邏輯進(jìn)行設(shè)計(jì),可以明顯減少資源的占用
1.3卷起流水管道
卷起流水管道與展開循環(huán)來提高吞吐量以實(shí)現(xiàn)最大性能的操作相反。當(dāng)需要展開循環(huán)來創(chuàng)建管道時(shí),我們需要更多的資源來保存中間值和負(fù)值需要并行運(yùn)算的計(jì)算結(jié)構(gòu),從而增加了面積。相反,當(dāng)我們想要最小化設(shè)計(jì)的面積時(shí),我們必要反過來執(zhí)行這些操作,卷起流水管道可以重用邏輯資源。
1.4基于控制的邏輯重用
共享邏輯資源通常需要特殊的控制電路來確定哪些元素被輸入到特定的結(jié)構(gòu)中。在上一節(jié)中,我們描述了一個(gè)乘法器,它只是移動(dòng)每個(gè)寄存器的位,其中每個(gè)寄存器總是專用于正在運(yùn)行的加法器的特定輸入。這有一個(gè)自然的數(shù)據(jù)流,可以很好地進(jìn)行邏輯重用。在其他應(yīng)用程序中,資源的輸入通常有更復(fù)雜的變化,并且可能需要某些控制來重用邏輯。
2.速度優(yōu)化
2.1速度有三種基本定義:
2.1.1流量(吞吐量): 定義為每個(gè)時(shí)鐘周期處理的數(shù)據(jù)量。流量的通常度量是每秒的位數(shù)。(b/s)
2.1.2時(shí)滯: 定義為數(shù)據(jù)輸入與處理的數(shù)據(jù)輸出之間的時(shí)間。時(shí)滯的一般度量是時(shí)間或時(shí)鐘周期。
2.1.3時(shí)序:是指順序元件之間的邏輯延遲。當(dāng)我們說設(shè)計(jì)不“滿足時(shí)序”時(shí),我們的意思是關(guān)鍵路徑的延遲,即觸發(fā)器之間的最大延遲(由組合延遲、時(shí)鐘到輸出延遲、路由延遲、設(shè)置時(shí)序、時(shí)鐘偏差等組成)大于目標(biāo)時(shí)鐘周期。時(shí)序的標(biāo)準(zhǔn)度量是時(shí)鐘周期和頻率。
2.2高吞吐量
高吞吐量設(shè)計(jì)關(guān)注的是穩(wěn)定的數(shù)據(jù)速率,但不太關(guān)注任何特定數(shù)據(jù)塊在設(shè)計(jì)中傳播所需的時(shí)間(延遲)。
高吞吐量設(shè)計(jì)的想法和福特大批量生產(chǎn)汽車的想法是一樣的:一條裝配線。在處理數(shù)據(jù)的數(shù)字設(shè)計(jì)領(lǐng)域,我們用一個(gè)更抽象的術(shù)語來指代它:管道(流水線)。
流水線設(shè)計(jì)在概念上非常類似于裝配線,因?yàn)樵牧匣驍?shù)據(jù)輸入進(jìn)入前端,經(jīng)過各種操作和處理階段,然后作為成品或數(shù)據(jù)輸出退出。流水線設(shè)計(jì)的美妙之處在于,新數(shù)據(jù)可以在之前的數(shù)據(jù)完成之前開始處理,就像汽車在裝配線上被處理一樣。管道幾乎用于所有非常高性能的設(shè)備,并且各種特定架構(gòu)是無限的。
2.3低延時(shí)
低延遲設(shè)計(jì)是通過最小化中間處理延遲,盡可能快地將數(shù)據(jù)從輸入傳遞到輸出,但可能會降低設(shè)計(jì)中的吞吐量或最大時(shí)鐘速度。
2.4時(shí)序
時(shí)序是指設(shè)計(jì)的時(shí)鐘速度。設(shè)計(jì)中任意兩個(gè)元件之間的最大延遲將決定最大時(shí)鐘速度。時(shí)序越好,表示可以運(yùn)行更大的時(shí)鐘頻率。
2.5改善時(shí)序1:添加寄存器層級
時(shí)序改進(jìn)的第一個(gè)策略是向關(guān)鍵路徑添加寄存器的中間層。這種技術(shù)應(yīng)該用于高度流水線化的設(shè)計(jì)中,其中額外的時(shí)鐘周期延遲不會違反設(shè)計(jì)規(guī)范,并且整體功能不會受到進(jìn)一步添加寄存器的影響。
2.6改善時(shí)序2:并行架構(gòu)
時(shí)序改進(jìn)的第二個(gè)策略是重新組織關(guān)鍵路徑,以便并行實(shí)現(xiàn)邏輯結(jié)構(gòu)。只要串行邏輯求值的函數(shù)可以分解 成并行求值,就應(yīng)該使用這種技術(shù)。
2.7改善時(shí)序3:展平邏輯結(jié)構(gòu)
時(shí)序改進(jìn)的第三個(gè)策略是展平邏輯結(jié)構(gòu)。這與前面定義的并行結(jié)構(gòu)的概念密切相關(guān),但特別適用于優(yōu)先級編碼的邏輯。通常情況下,合成和布局工具足夠聰明,可以復(fù)制邏輯以減少扇出,但它們無法分解以串行方式編碼的邏輯結(jié)構(gòu)。
2.8改善時(shí)序4:寄存器平衡
第四種策略稱為寄存器平衡。從概念上講,其思想是在寄存器之間均勻地重新分配邏輯,以最小化任意兩個(gè)寄存器之間的最壞情況延遲。只要關(guān)鍵路徑和相鄰路徑之間的邏輯高度不平衡,就應(yīng)該使用這種技術(shù)。由于時(shí)鐘速度僅受最壞情況路徑的限制,因此可能只需要一個(gè)小的更改就可以成功地重新平衡關(guān)鍵邏輯。
2.9改善時(shí)序5:重新排序的路徑
第五種策略是重新排序數(shù)據(jù)流中的路徑,以最小化關(guān)鍵路徑。每當(dāng)多個(gè)路徑與關(guān)鍵路徑組合時(shí),都應(yīng)該使用此技術(shù),并且可以對組合路徑進(jìn)行重新排序,以便將關(guān)鍵路徑移動(dòng)到更靠近目標(biāo)寄存器的位置。使用這種策略,我們將只關(guān)心任意給定寄存器集之間的邏輯路徑。
2.10總結(jié)
- 高吞吐量架構(gòu)是指一種設(shè)計(jì)可以最大限度地提高每秒可以處理的比特?cái)?shù)。
- 展開迭代循環(huán)可以增加吞吐量。
- 展開迭代循環(huán)的代價(jià)是面積成比例地增加。
- 低延遲架構(gòu)是將模塊輸入到輸出的延遲最小化的架構(gòu)。
- 可以通過移除管道寄存器來減少延遲。
- 刪除管道寄存器的代價(jià)是增加了寄存器之間的組合延遲,時(shí)序變差。
- 時(shí)序是指設(shè)計(jì)的時(shí)鐘速度。
- 當(dāng)任意兩個(gè)順序元件之間的最大延遲小于最小時(shí)鐘周期時(shí),設(shè)計(jì)滿足時(shí)序要求。
- 增加寄存器層通過將關(guān)鍵路徑劃分為兩個(gè)延遲較小的路徑來改善時(shí)序。
- 將一個(gè)邏輯函數(shù)分成若干個(gè)可以并行計(jì)算的較小函數(shù),可以減少到子結(jié)構(gòu)中最長的路徑延遲。
- 通過刪除不需要的優(yōu)先級編碼,邏輯結(jié)構(gòu)變得扁平,并且減少了路徑延遲。
- 寄存器平衡通過將組合邏輯從關(guān)鍵路徑移動(dòng)到相鄰路徑來改善時(shí)序。
- 可以通過重新排序與關(guān)鍵路徑組合的路徑來改進(jìn)時(shí)序,以便將一些關(guān)鍵路徑邏輯放置在更靠近目標(biāo)寄存器的地方
3.功耗優(yōu)化與其他優(yōu)化
3.1時(shí)鐘控制
降低同步數(shù)字電路動(dòng)態(tài)功耗的最有效、應(yīng)用最廣泛的技術(shù)是在數(shù)據(jù)流的特定階段動(dòng)態(tài)禁用不需要激活的特定區(qū)域的時(shí)鐘。由于FPGA中的大多數(shù)動(dòng)態(tài)功耗與系統(tǒng)時(shí)鐘的切換直接相關(guān),因此在設(shè)計(jì)的非活動(dòng)區(qū)域暫時(shí)停止時(shí)鐘是最小化此類功耗的最直接方法。推薦的實(shí)現(xiàn)方法是使用觸發(fā)器上的時(shí)鐘使能引腳或使用全局時(shí)鐘多路復(fù)用器(在Xilinx設(shè)備中,這是BUFGMUX元件)。
3.2時(shí)鐘偏斜
如果通過邏輯延遲(dL)小于時(shí)鐘線延遲(dC) ,則可能發(fā)生第二個(gè)觸發(fā)器傳播的信號將在時(shí)鐘采樣之前到達(dá)第三級的情況。當(dāng)時(shí)鐘采樣沿到達(dá)時(shí),數(shù)據(jù)可能已經(jīng)丟失,這種情況將導(dǎo)致電路的災(zāi)難性故障,因此在進(jìn)行時(shí)序分析時(shí)必須考慮時(shí)鐘偏差。同樣重要的是要注意,時(shí)鐘傾斜與時(shí)鐘速度無關(guān)。
3.3約束偏斜
3.4控制輸入
3.4.1浮動(dòng)輸入:是欠驅(qū)動(dòng)輸入,無法知道它的欠驅(qū)動(dòng)程度,輸入信號未確定或處于高阻態(tài)的情況,這將對功耗產(chǎn)生災(zāi)難性的影響。更糟糕的是,這不會是一個(gè)可重復(fù)出現(xiàn)的問題。永遠(yuǎn)不要讓FPGA輸入緩沖區(qū)浮動(dòng)。
3.4.2浮動(dòng)輸入可能導(dǎo)致以下問題:
功耗增加:由于晶體管進(jìn)入飽和區(qū)并耗散少量電流,浮動(dòng)輸入信號可能導(dǎo)致不必要的功耗增加。
電路不穩(wěn)定性:浮動(dòng)輸入可能導(dǎo)致電路的不穩(wěn)定性,因?yàn)檩斎胄盘柕?a class="article-link" target="_blank" href="/baike/1465710.html">電平無法確定,可能會引入噪聲和干擾,影響電路的正確功能。
3.4.3在Verilog中,可以通過以下幾種方法來避免出現(xiàn)浮動(dòng)輸入:
初始化輸入信號:在設(shè)計(jì)中,為每個(gè)輸入信號提供一個(gè)默認(rèn)的初始值。這樣,在系統(tǒng)啟動(dòng)或信號未被顯式賦值時(shí),輸入信號將具有一個(gè)確定的初始值,而不是浮動(dòng)的狀態(tài)。
使用三態(tài)邏輯:如果某個(gè)信號需要在多個(gè)模塊之間進(jìn)行共享,并且可能有多個(gè)驅(qū)動(dòng)器,可以使用三態(tài)邏輯來避免浮動(dòng)輸入。三態(tài)邏輯使用一個(gè)控制信號來控制信號的驅(qū)動(dòng)器是否處于高阻態(tài)(浮動(dòng)狀態(tài))。
避免未使用的信號:在設(shè)計(jì)中,盡量避免定義未使用的信號。未使用的信號可能會導(dǎo)致未初始化或浮動(dòng)的狀態(tài)。
使用合適的時(shí)序約束:時(shí)序約束對于確保信號的穩(wěn)定性非常重要。通過正確設(shè)置時(shí)序約束,可以確保信號在時(shí)鐘邊沿到達(dá)之前具有足夠的時(shí)間來穩(wěn)定,從而避免浮動(dòng)輸入。
3.5總結(jié)
- 時(shí)鐘使能觸發(fā)器輸入或全局時(shí)鐘多路選擇器等時(shí)鐘控制資源應(yīng)該在其有效的場合代替直接時(shí)鐘選通來利用。
- 時(shí)鐘選通是減少動(dòng)態(tài)功耗直接手段,但是在實(shí)現(xiàn)和時(shí)序分析中產(chǎn)生困難。
- 對 FPGA設(shè)計(jì)者,選通時(shí)鐘引入新的時(shí)鐘區(qū)域,并將產(chǎn)生困難。
- 在 FPGA 中管理不好時(shí)鐘偏移可能引起突發(fā)的故障。
- 時(shí)鐘選通會引起保持的沖突,可能不被實(shí)現(xiàn)工具校正。
- 避免出現(xiàn)輸入浮動(dòng)。
- 動(dòng)態(tài)功耗隨著電壓的平方減弱,但是降低電壓對性能有負(fù)面的影響。
- 雙沿觸發(fā)的觸發(fā)器應(yīng)該只在他們被提供作為基本元件時(shí)才利用。
- 使用更簡單或更高效的邏輯表達(dá)式、減少信號的扇出、使用更小或更快的邏輯單元、減少互連長度和擁塞等方法來降低功耗。
4.ddr3
4.1 DDR3概述
DDR3全稱double-data-rate 3 synchronous dynamic RAM,即第三代雙倍速率同步動(dòng)態(tài)隨機(jī)存儲器。 所謂同步,是指DDR3數(shù)據(jù)的讀取寫入是按時(shí)鐘同步的;所謂動(dòng)態(tài),是指DDR3中的數(shù)據(jù)掉電無法保存,且需要周期性的刷新,才能保持?jǐn)?shù)據(jù);所謂隨機(jī)存取,即可以隨機(jī)操作任一地址的數(shù)據(jù);所謂double-data-rate,即時(shí)鐘的上升沿和下降沿都發(fā)生數(shù)據(jù)傳輸。
4.2 DDR3功能框圖
4.3時(shí)鐘頻率與帶寬
core freq: 核心頻率,用于DDR內(nèi)部cell(存儲單元)的時(shí)鐘;
clock freq:時(shí)鐘頻率,用于DDR的IO buffer的時(shí)鐘,同時(shí)也是IO接口時(shí)鐘,是通過核心頻率倍頻(4)倍得到的;
data rate: 數(shù)據(jù)速率,單根數(shù)據(jù)線的數(shù)據(jù)傳送次數(shù);
bandwidth:芯片帶寬,數(shù)據(jù)速率*芯片的數(shù)據(jù)位寬;
4.4突發(fā)長度(Burst Length,BL)
由于DDR3的預(yù)取為8bit,所以突發(fā)傳輸周期(Burst Length,BL)也固定為8,而對于DDR2和早期的DDR架構(gòu)系統(tǒng),BL=4也是常用的,DDR3為此增加了一個(gè)4bit Burst Chop(突發(fā)突變)模式,屆時(shí)可通過地址線A12來控制這一突發(fā)模式。
4.5 MIG IP 核結(jié)構(gòu)框圖
4.6 MIG IP 核信號定義
4.7寫命令時(shí)序
單次讀寫一個(gè)地址的數(shù)據(jù)
4.8背靠背寫數(shù)據(jù)時(shí)序
非背靠背讀數(shù)據(jù)時(shí)序
背靠背讀數(shù)據(jù)時(shí)序
4.9時(shí)鐘
系統(tǒng)時(shí)鐘:MIG IP 核工作時(shí)鐘,一般命名為 sys_clk。
參考時(shí)鐘:MIG IP 的參考時(shí)鐘,必須為 200M,命名為 ref_clk DDR3 芯片工作的時(shí)鐘:由 FPGA 輸入到 DDR3 芯片,為差分時(shí)鐘
用戶端時(shí)鐘:MIG IP 核輸出給用戶端的時(shí)鐘,命名為 ui_clk
4.10帶寬計(jì)算
①FPGA 寫入數(shù)據(jù)到 DDR3 芯片的帶寬為: 800M × 2 × 16bit
②用戶端寫入數(shù)據(jù)到 MIG IP 核的帶寬為:200M ×用戶端數(shù)據(jù)位寬,因?yàn)?800M × 2 × 16bit = 200M ×用戶端數(shù)據(jù)位寬,所以用戶端數(shù)據(jù)位寬為 128bit
4.11系統(tǒng)時(shí)鐘 system clock 關(guān)于 No Buffer、Single-Ended、Differential 怎么 選擇?
系統(tǒng)時(shí)鐘由內(nèi)部時(shí)鐘產(chǎn)生,比如經(jīng)過 PLL 后產(chǎn)生的 200M 時(shí)鐘,選擇 No buffer。 系統(tǒng)時(shí)鐘由 FPGA 外部晶振產(chǎn)生,輸入到 FPGA 的管腳,再輸入到 MIG IP 核,選擇 Single-Ended 或者 Differential。外部晶振產(chǎn)生的時(shí)鐘為單端時(shí)鐘,選擇 Single-Ended;外部晶振產(chǎn)生的時(shí)鐘為差分時(shí)鐘,選擇 Differential; No Buffer 是什么意思? No Buffer 就是 MIG IP 核內(nèi)部沒有例化 IBUF 原語
二.課后練習(xí)
1.實(shí)驗(yàn)任務(wù)是先向DDR3的存儲器中寫入1024個(gè)數(shù)據(jù),寫完之后再從存儲器中讀取相同地址的數(shù)據(jù),若初始化成功,則LED0常亮,否則LED0閃爍;讀取的值全部正確則LED1燈常亮,否則LED1燈閃爍。
三.學(xué)習(xí)中遇到的問題
1.對基于控制的邏輯重用不熟悉.
2.對ddr3的結(jié)構(gòu)功能及使用都不清晰,不能正確使用ddr3IP核。
3.對于BROM的數(shù)據(jù)傳給BRAM不清楚具體模塊。
四.學(xué)習(xí)中解決的問題
1.學(xué)習(xí)了解面積優(yōu)化,速度優(yōu)化,功耗優(yōu)化。
2.了解ddr3的基本結(jié)構(gòu)功能。