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