基于FPGA多通道采樣系統(tǒng)設(shè)計(jì)資料
基于FPGA多通道采樣系統(tǒng)設(shè)計(jì)資料,基于,fpga,通道,采樣系統(tǒng),設(shè)計(jì),資料
畢業(yè)設(shè)計(jì)(英文)資料翻譯
院 (系) :
專 業(yè):
學(xué)生姓名:
學(xué) 號(hào):
年 月 日
高速FPGA器件的頂層設(shè)計(jì)
鳴謝
在開始這份報(bào)告之前,我想感謝下面這些人,他們幫助我完成了這個(gè)項(xiàng)目,沒有他們的幫助,我是不可能完成這個(gè)項(xiàng)目。
我要感謝我的主管韋力·拉克教授,他在整個(gè)項(xiàng)目進(jìn)行中給了我很多的建議和鼓勵(lì),他還告訴我也面對在項(xiàng)目中遇到的困難。
我要感謝楊教授,他讓我運(yùn)用他的硬件運(yùn)算法則。他還給我說明的例子源文件好讓了解他的理論。我還要謝謝他卓越的多媒體的教程。這些多媒體教程包括了很多讓我明白圖像進(jìn)程原理的概念。
我還要感謝阿·塔夫和雪瑞。他們是兩個(gè)PH·D的研究生,他們在項(xiàng)目執(zhí)行和應(yīng)用上幫了我很多。
摘要
在這個(gè)項(xiàng)目中,我發(fā)現(xiàn)了一個(gè)高質(zhì)量硬件設(shè)計(jì)的體系方法,有了這個(gè)方法,我成功地在高速硬件上運(yùn)行了一個(gè)經(jīng)典的凝膠圖像算法。在這份報(bào)告中,我還會(huì)提到一個(gè)新器件,這種新硬件可以通過重新排列代碼來自動(dòng)完成高質(zhì)量的硬件優(yōu)化。這樣它可以運(yùn)行在最小的時(shí)鐘周期中。這份報(bào)告分為5個(gè)章節(jié)
第一節(jié)是介紹:主要包括背景和所有相關(guān)的工作,還有一些我在這個(gè)項(xiàng)目上投資。
第二節(jié)是優(yōu)化:在這一節(jié)中,我將著重描述用于優(yōu)化的新器件。我還將論證一些器件可以自動(dòng)優(yōu)化的過程。
第三節(jié)是硬件拓展:在這節(jié)中,我將歸納幾步改變一個(gè)軟件,然后下載到硬件中。這些包括許多能改進(jìn)性能或者保存硬件資源的器件。
第四節(jié)是范例分析:凝膠圖像過程。在這節(jié)中,我將用凝膠圖像過程作為一個(gè)例子來說明在第二節(jié)中討論的硬件的資源和性能的影響。我還會(huì)比較兩種器件和軟件的應(yīng)用的性能,軟件的版本是:Pilchard 和 RC1000
第五節(jié)是結(jié)論,包括評估成就和期望的特性工作
網(wǎng)上也有這篇論文。網(wǎng)址:http://www.doc.ic.ac.uk/~mcn99/project/report.pdf
第一節(jié):說明
自從Handel-C[5].a類C硬件語言的出現(xiàn),一個(gè)完全的頂層的FPGA設(shè)計(jì)方法就被認(rèn)識(shí)到。然而許多開發(fā)者當(dāng)他們要設(shè)計(jì)高速運(yùn)行的硬件的時(shí)候仍然停留在底層的語言上,比如VHDL這是因?yàn)殚_發(fā)者在底層的方法有許多實(shí)際電路的控制方法。但底層的設(shè)計(jì)在FPGA芯片規(guī)模逐漸變大的時(shí)候可能會(huì)達(dá)到極限。開發(fā)人員將不能用底層的設(shè)計(jì)來開發(fā)包括幾十億個(gè)門的高速電路。這個(gè)時(shí)候頂層的設(shè)計(jì)就可以達(dá)到要求了。這個(gè)項(xiàng)目的目的就是介紹一套系統(tǒng)的方法來設(shè)計(jì)頂層的高速硬件性能。
1.1背景和相關(guān)工作
在這節(jié)中,我將介紹一些材料來方便讀者了解這篇論文中的一些概念。
1.1.1 現(xiàn)場可編程門陣列(FPGAs)[1]
像許多的可變成邏輯器件(PLDs)一樣,FPGA是一塊可編程的硬件,然而, PLDs的資源消耗和時(shí)間延時(shí)限制了其大小。而FPGA可以很輕易在一塊集成芯片上設(shè)計(jì)一個(gè)有幾百萬個(gè)門的電路。FPGA的可再編程特性允許開發(fā)人員用比使用一塊VLSI芯片更少的開發(fā)時(shí)間和更少的開發(fā)成本來設(shè)計(jì)。值得一提的是FPGA以每年兩倍容量的發(fā)展。因?yàn)樽钚碌男酒嫌袔装偃f個(gè)門,所以FPGA是開發(fā)復(fù)雜應(yīng)用的系統(tǒng)理想開發(fā)平臺(tái)。因此我在開發(fā)它的應(yīng)用。
Pilchard [2]
Pilchard是一個(gè)基于現(xiàn)場可編程門陣列(FPGA)的可配置的計(jì)算平臺(tái),它可以插在一臺(tái)標(biāo)準(zhǔn)的個(gè)人電腦的133MHZ同步的動(dòng)態(tài)RAM和雙向存儲(chǔ)器模塊(DIMMS)的插槽中。相比于傳統(tǒng)的利用PCI接口的FPGA器件,由于DIMM接口的寬帶寬和低延時(shí),Pilchard允許數(shù)據(jù)在更短的時(shí)間傳出電腦或者傳入電腦。然而由于DIMM接口原本不是設(shè)計(jì)為I/O接口的,所以需要額外的控制信號(hào)來表示數(shù)據(jù)讀寫過程的開始和結(jié)束。因此,由于Pilchard的發(fā)展和運(yùn)用,頂層的性能設(shè)計(jì)方法好過底層的結(jié)構(gòu)設(shè)計(jì)。這就證明了為什么一個(gè)用高性能的FPGA的頂層設(shè)計(jì)的系統(tǒng)方法是很有必要的。
RC1000 [3]
RC1000是一個(gè)專為可配置的計(jì)算應(yīng)用的32的PCI卡,它以庫的形式全支持的程序包在適合這設(shè)備的電路設(shè)計(jì),它在連在FPGA或者主CPU的板子還有4個(gè)SRAM(每個(gè)2M字節(jié)),這塊板子可以配置成可以運(yùn)行在4000KHZ到100MHZ的頻率中。這個(gè)器件在很多方面是不同于Pilchard的,在這份報(bào)告中,我將表明發(fā)展在這項(xiàng)目內(nèi)一般介紹,并且可能在應(yīng)用開發(fā)在不同設(shè)備上適用。
1.1. 4 VHDL [4]
VHDL是一門在當(dāng)今市場上最好的可編程邏輯器件設(shè)計(jì)語言,VHDL的頂層設(shè)計(jì)取決于他能讓設(shè)計(jì)者很快得將大型電路設(shè)計(jì)出來然后放到市場上。它可以用庫文件保存起來,以便以后的再應(yīng)用,由于VHDL是一門標(biāo)準(zhǔn)語言(IEEE標(biāo)準(zhǔn) 1076)。VHDL能像其他獨(dú)立器件設(shè)計(jì)一樣提供方便的代碼來同步和仿真,VHDL還很容易將一個(gè)可編程邏輯轉(zhuǎn)化為一個(gè)ASIC功能 。這門語言的缺點(diǎn)是還不夠高級,開發(fā)人員必須掌握組件的硬件特性。因此,我決定用另外一門更高級的硬件語言----i.e.Handel-C。
1.1.5 Handel-C [5]
Handel-C是一門類似于C語言的編程語言,它可以用于將硬件圖像通過編程下載到FPGA或者ASICs中,Handel-C為了支持很少的硬件優(yōu)化而加入了一些在C中沒有的額外的特性。其中一個(gè)是這門語言支持指定每個(gè)信號(hào)的寬度,這樣優(yōu)化可以用Handel-C編譯的額外資源來完成優(yōu)化。Handel-C編譯的目的是為了能直接用xnf或者edif格式通過編程下載到硬件器件中。Handel-C好過VHDL的是它不需要開發(fā)人員掌握太多底層硬件知識(shí),而VHDL必須要求掌握。它是一門完全的頂層設(shè)計(jì)語言!圖一顯示我采用的轉(zhuǎn)換Handel-C程序到硬件中,盡管每一步都需要很多工具,但用戶不需要了解硬件的細(xì)節(jié),因?yàn)橛脩糁恍枰c(diǎn)幾個(gè)按紐就可以轉(zhuǎn)換文件到下一步,就像這樣。
圖1.1 Handel-C的設(shè)計(jì)流程
Handel-C編程
硬件
比特流
EDIF網(wǎng)格文件
編譯 布局和布線 下載
1.1.6 Handel-C語言的擴(kuò)展 [7]
一個(gè)PH.D的學(xué)生李東尤發(fā)明了一門支持硬件和軟件的語言,他的方法是把C和Handel-C綁在一起,在這門語言中,用戶可以指定哪個(gè)部分用于軟件,哪個(gè)部分用于硬件。在這個(gè)項(xiàng)目中,他還開發(fā)了很多友好的用語FPGA器件和主機(jī)的通信接口,然而支持這門語言的器件還相當(dāng)有限,這就是我為什么不選擇這門語言的原因。
1.2 主要成就
·我已開發(fā)出一種簡單而有效的優(yōu)化方法,這種方法可以重新排列代碼,這樣可以運(yùn)行在最小時(shí)鐘周期。
·我已開發(fā)出針對高速器件設(shè)計(jì)出一個(gè)體系的頂層硬件設(shè)計(jì)流程
·我實(shí)現(xiàn)在硬件運(yùn)行復(fù)雜的2D凝膠圖像過程
第二章 優(yōu)化
在這章中,我將論述很多的方法來優(yōu)化頂層代碼,優(yōu)化是我們開發(fā)和運(yùn)用的主要部分,類似于由于有限的CPU資源而運(yùn)行的PC軟件。這一章的主要目標(biāo)放在怎樣自動(dòng)優(yōu)化這些進(jìn)程,我們還將討論一些相等進(jìn)程,以便衡量優(yōu)化后速度到底提高了多少
2.1 性能優(yōu)化
這是在開發(fā)潛能類似于程序在相同時(shí)鐘周期運(yùn)行在不相矛盾的操作來獲得速度上的增加,在通常的運(yùn)用中,十幾或者幾百個(gè)操作在電腦上并行運(yùn)行,然而電腦因?yàn)橛布Y源的有限是不能并行操作的。但是設(shè)計(jì)特殊的能并行操作的硬件是有可能的。重要是速度能達(dá)到。這就是為什么FPGA的應(yīng)用有時(shí)候比相應(yīng)運(yùn)行在低時(shí)鐘的FPGA的軟件(當(dāng)然我們也需要考慮到物價(jià)指數(shù),但是PC機(jī)的CPU仍然可以快速獨(dú)立地運(yùn)行)。這有我們可以運(yùn)用的技術(shù)。
2.1.1 平衡每條路徑的延遲
平衡每條路徑的延遲是很重要,因?yàn)橛布臅r(shí)鐘最快也就是最長延時(shí)的那條路徑。因此因?yàn)槿绻心骋粭l路徑上延時(shí)十分嚴(yán)重,當(dāng)其他的路徑能夠以非常高的速度運(yùn)行的時(shí)候那么我們就浪費(fèi)資源。通過平衡延時(shí)能確保并行優(yōu)化是最理想的。一條路徑的延時(shí)定義為:
= + (2.1)
這里的是一條路徑的總延時(shí);
是邏輯延時(shí);
是線路上的延時(shí)
因此,為了減少延時(shí)就是減少和的其中一個(gè)或者兩個(gè)都減少,這里有兩步主要步驟
·化復(fù)雜的操作為簡單的操作
·用一些預(yù)定義的組件和布線約束
化復(fù)雜的操作
首先,最簡單的步驟是把復(fù)雜的步驟分成學(xué)多簡單的操作,這個(gè)步驟有效得減少了每一步的邏輯操作,因此減少了等式2.1中。在軟件編程中,復(fù)雜操作通常比相同結(jié)構(gòu)的簡單操作運(yùn)行要快甚至更快,這是因?yàn)榫幾g器會(huì)為我們優(yōu)化結(jié)構(gòu)操作。而硬件中,一個(gè)復(fù)雜的操作就意味著要用很長的時(shí)間來完成,而簡單操作就不需要很長的時(shí)間。圖2.1表明了把一個(gè)復(fù)雜的操作分成許多簡單的操作。在這個(gè)例子中,我們可以看出有時(shí)候額外的寄存器
我們可以看出為了使操作足夠簡單,通過額外的寄存器把中間計(jì)算結(jié)果存起來是很有必要的。
圖2.1:復(fù)雜操作的分解
簡單操作
int temp;
temp=c*d; temp+=b; a+=tem p;
復(fù)雜操作a+= b+ c*d
預(yù)定義布置和布線組件
如果第一種方法不能滿足用戶要求或者時(shí)序上的限制不能滿足,我們可以用FPGA芯片開發(fā)者提供的延時(shí)分析,來找出延時(shí)最長的一條線路。例如,我們可以用Xinlinx ISE Foundation 4的延時(shí)分析來分析Xinlinx公司的FPGA芯片,在找到最長的線路后,我們就知道哪個(gè)操作運(yùn)行太慢了。這個(gè)時(shí)候,我們就應(yīng)該試試這兩種方法來提高運(yùn)行速度。第一種方法是自己嘗試寫一個(gè)限制文件明確地布局和布線,這樣相比于一些不是很好的自動(dòng)布局和布線的工具可以提高工作效率。然后我們可以在布局和布線之前把這些限制文件包括到進(jìn)程中。然而這種方法需要開發(fā)人員有相當(dāng)多FPGA芯片知識(shí),這包括關(guān)于芯片支持的一些能減少延時(shí)的原始組件和布局布線之間的關(guān)系等方面的知識(shí)。第二種方法相比來說簡單一些,就是用一些預(yù)定義好的元器件來布局和布線,這些都是芯片開發(fā)人員做好的,簡單來說就是芯片開發(fā)人員已做好了,你只是調(diào)用就行了。就Xinlinx來說,他有一個(gè)叫做代碼生成器的編程軟件,他就像上面說的一樣可以直接調(diào)用的。Handel-C菜單中指定了怎樣把這些組件包括到Handel-C編程菜單中,然而用戶需特別注意這些組件的輸入和輸出的時(shí)序。由于Handel-C語言的局限性,輸入信號(hào)要晚一個(gè)周期進(jìn)入組件,這一步會(huì)減少等式2.1中,因?yàn)檫壿媺K的較佳的布局和信號(hào)的布線會(huì)使延時(shí)明顯得減少。
進(jìn)程自動(dòng)的可能性
以上,我們討論了兩種方法來達(dá)到這一步,這一步是很難實(shí)現(xiàn)自動(dòng),因?yàn)楹茈y定義哪個(gè)操作是復(fù)雜的哪個(gè)不是,這取決于我們用到的器件和芯片還有程序的功能。我們需要一個(gè)嚴(yán)格時(shí)序限制的器件。一個(gè)16位的乘法器相比于其他不能運(yùn)行在高速的器件來說可以認(rèn)為是一個(gè)復(fù)雜的器件。當(dāng)一個(gè)操作不能運(yùn)行在高速環(huán)境上,再去把這個(gè)操作再去分成一些可以運(yùn)行在高速的分操作簡直是浪費(fèi)。然而我們可以再借用李的觀點(diǎn)來把這些操作實(shí)現(xiàn)自動(dòng)化。當(dāng)編譯源文件的時(shí)候,我們可以包含我們要用的器件信息和時(shí)序限制,器件庫包含有每個(gè)邏輯單元的延時(shí)時(shí)間。它還包括FPGA開發(fā)工具怎樣對信號(hào)布線的信息。這樣編譯器可以估計(jì)每路的, ,,然后和限制的時(shí)序延時(shí)比較,如果不能達(dá)到,編譯器會(huì)用上面提到的第二種方法來平衡每路的延時(shí),直到符合限制條件。
2.1.2 基本的并行操作
這是實(shí)際的性能優(yōu)化的最簡單的第一步,下面的操作可以使進(jìn)程自動(dòng)化。連續(xù)掃描程序,盡量把更多的操作聯(lián)合在一個(gè)時(shí)鐘周期中,直到違背了資料相依的條件,然后在下一時(shí)鐘周期重復(fù)這樣的操作。因?yàn)槲覀円呀?jīng)討論怎樣在更盡快的部分內(nèi)發(fā)現(xiàn)數(shù)據(jù)從屬性,這個(gè)過程可能被自動(dòng)做。圖2.2是一個(gè)簡單的例子,我們看到如果沒有并行操作,將需要8個(gè)時(shí)鐘周期來完成8個(gè)操作,然而如果用并行操作,只需要2個(gè)時(shí)鐘周期就可以完成這些操作。
A=1; 操作1 Par{
B=2; 操作2 A=1; 操作1
C=3; 操作3 B=2; 操作2
D=4; 操作4 C=3; 操作3
A=A+1; 操作5 D=4; 操作4
B=B+2; 操作6 }
C=C+3; 操作7 Par{
D=D+4; 操作8 A=A+1; 操作5
操作5是依賴與操作1的, B=B+2; 操作6
但并不依賴操作1,操作2 C=C+3; 操作7
操作3,操作4之間,就像 D=D+4; 操作8
在操作5,操作 6,操作7 }
操作8之間一樣。
2.1.3 重新排列代碼順序
有時(shí)候,一個(gè)程序可以有高度的并行性,但操作執(zhí)行的順序的方法在上面提到的。例如,圖2.3中的代碼是跟圖2.2中的代碼功能是一樣的,但如果我們用基本的并行操作,將需要4個(gè)時(shí)鐘周期來完成這個(gè)操作,而不是2個(gè)時(shí)鐘周期。
我們有是可以通過重新排列代碼的順序,這樣程序可以運(yùn)行盡可能少的時(shí)鐘周期,例如上面代碼可以改成圖2.2一樣的順序,這樣我們又可以用“基本平行”方法。由于這些進(jìn)程可以被編譯器自動(dòng)進(jìn)行,編譯器將需要有相當(dāng)多編程的知識(shí)和原因,我已研究出一個(gè)方法來實(shí)現(xiàn)這些進(jìn)程的自動(dòng)化。
1.首先,選擇一部分代碼開始, 最好在局部循環(huán)中。
2.用變量名作為索引和標(biāo)簽來建一個(gè)空表,標(biāo)簽的格式是var:n,其中var是一個(gè)變量的名稱,n是指定的操作順序的個(gè)數(shù)。
3.連續(xù)掃描代碼,對每一個(gè)變量的任務(wù)(任一修正/設(shè)定初值), 在下面被列出的規(guī)則之后分配標(biāo)簽到操作:
第一步:查詢表格,找到標(biāo)注的變量的標(biāo)簽
第二步(a)如果沒有發(fā)現(xiàn)入口,變量就是先前定義,把這個(gè)程序入口加入表格,內(nèi)容(標(biāo)簽)指定為as:形式。
第三步(a1)如果變量是一個(gè)常量或者是一個(gè)從外部輸入的信號(hào)量。指定其標(biāo)簽為VARname:1,這里的VARname是定義的變量名。
第三步(a2)如果變量的值取決于其他的變量,從表格中取出這些變量的標(biāo)簽,定義這些變量的標(biāo)簽從我們?nèi)〉米畲蟮拇涡蚣?得到。例如,如果 a=b + e,如果b是d:3,e是e:4,這樣a的標(biāo)簽應(yīng)該是e:5
第二步(b)如果有程序入口,變量就是在前面已經(jīng)定義的,直接取得這些變量的標(biāo)簽。
第三步(b)更新在第三步(a1)和第三步(a2)中改變了的變量標(biāo)簽,但是由于一個(gè)變化當(dāng)發(fā)現(xiàn)最大的次序標(biāo)簽的時(shí)候,我們應(yīng)該包括比較的它本身的標(biāo)簽。 舉例來說, 如果a = b+c 而c和b的標(biāo)簽是和上面的相同的,但是a的標(biāo)簽已存在表格中,值為a:5,這樣新的標(biāo)簽將會(huì)是a:6.注意在做比較的時(shí)候,我們要視常數(shù)的次序?yàn)?。
第四步:用我們剛才指定的標(biāo)簽把這些操作連接起來。
4.將所用的操作做了標(biāo)簽后,我們就要調(diào)整操作了,把有相同次序的操作放到一起。
5.現(xiàn)在,“基本平行”方法將會(huì)回到運(yùn)行最少周期的程序代碼上了。相同次序的將會(huì)放到一個(gè)塊中。
6.重復(fù)從第二步開始的各個(gè)步驟,直到整個(gè)程序都被轉(zhuǎn)換。
這個(gè)方法的可行性是把所有的操作放到最近的一個(gè)時(shí)鐘周期執(zhí)行,這樣,經(jīng)過修改后的代碼只用最少的時(shí)鐘周期就可以執(zhí)行完成了。很顯然這種方法可以很容易實(shí)現(xiàn)自動(dòng)化,通過聯(lián)合這種方法和前面的“基本平行”的方法,一個(gè)令人驚訝的效率很高的并行工作工具被發(fā)展!
圖2.4顯示出這種方法怎樣工作的例子
圖2.3 未優(yōu)化代碼
A=1; 周期1 Par{
B=2; 周期2 A=1; 周期1
C=3; 周期3 A=A+1;
D=4; 周期4 }
A=A+1; 周期5 Par{
B=B+2; 周期6 B=1; 周期2
C=C+3; 周期7 B=B+2;
D=D+4; 周期8 }
Par{ 周期3
C=3;
C=C+3;
}
Par{ 周期4
D=4;
D=D+4;}
圖2.4重新排列代碼的步驟
2.1.4 增加寄存器來儲(chǔ)存中間結(jié)果
僅僅通過重新排列代碼有時(shí)候是不夠的,如果我們發(fā)現(xiàn)有許多針對一個(gè)變量的操作,而其他的變量只有幾步的操作,這樣就會(huì)出現(xiàn)在前面幾個(gè)時(shí)鐘周期有很多的操作,而到了后面的時(shí)鐘周期卻沒有了幾步操作。這樣,我們能平衡每個(gè)時(shí)鐘周期的操作呢?可能解決這個(gè)問題的辦法就是增加寄存器來儲(chǔ)存中間結(jié)果,而且這樣可以在很短的時(shí)間計(jì)算中間變量的值,由于這需要很的理論和邏輯單元,而且這項(xiàng)操作很復(fù)雜,所以可以很難實(shí)現(xiàn)自動(dòng)化操作。圖2.5是這種方法的一個(gè)例子,我們可以看到在修改代碼之前需要3個(gè)時(shí)鐘周期在修改程序后只需要2個(gè)時(shí)鐘周期。
圖2.5 用存儲(chǔ)器來儲(chǔ)存中間變量
2.1.5 流水線操作
流水線操作是在一個(gè)操作中有多任務(wù)的時(shí)候一種執(zhí)行方法,亨利絲和帕得森在他們的書第三節(jié)是這樣介紹這個(gè)流水線操作的具體方法:
流水線操作就像是一個(gè)裝配線,在一個(gè)自動(dòng)裝配線上有許多步驟,每個(gè)步驟完成一個(gè)裝備小汽車的操作,盡管在不同的小汽車上,但每個(gè)步驟都是并行作業(yè)的。
理想狀況下,我們可以在每個(gè)時(shí)鐘周期后來執(zhí)行下一個(gè)操作,這樣,流水線操作就是滿負(fù)載的,生產(chǎn)量在每個(gè)時(shí)鐘周期將會(huì)是一項(xiàng)任務(wù)不論它花多少時(shí)鐘周期來完成這項(xiàng)操作,因此,當(dāng)一個(gè)任務(wù)需要100個(gè)時(shí)鐘周期來完成,而且你有足夠多的任務(wù)來讓生產(chǎn)線一滿負(fù)荷,這樣將花大約100倍的時(shí)間來完成所有的任務(wù),但速度決定不會(huì)達(dá)到100,因?yàn)椋?
·流水線需要額外的控制邏輯,因此需要增加成本。
·流水線需要額外的寄存器來儲(chǔ)存中間變量,因此增加延時(shí)。
此外,開發(fā)人員要知道操作不會(huì)在很段的時(shí)間就完成了,因此流水線操作是一個(gè)理想的相同的計(jì)算大數(shù)據(jù)操作。
這有當(dāng)我們用流水線操作的時(shí)候必須注意到的幾點(diǎn):
·當(dāng)沒有足夠硬件資源來處理交錯(cuò)的任務(wù)的時(shí)候,哈澤德式結(jié)構(gòu)就會(huì)發(fā)生。例如,我們不能在一個(gè)時(shí)鐘周期來多次來讀一個(gè)RAM里的數(shù)據(jù)。解決的方法是在流水線操作中確保有足夠多的硬件資源。
·因?yàn)槟阌玫募拇嫫鲀?chǔ)存的中間變量的值在每個(gè)周期可能會(huì)改變,所以寄存器中數(shù)據(jù)會(huì)丟失,除非你有足夠多寄存器來儲(chǔ)存中間變量。這樣,如果在一個(gè)流水線的一個(gè)狀態(tài)在很多狀態(tài)以后才用到,這樣我們就需要增加額外的寄存器來儲(chǔ)存和傳遞中間變量的值,這樣任務(wù)進(jìn)入一個(gè)新的狀態(tài)的時(shí)候,任務(wù)想要讀數(shù)據(jù)的數(shù)據(jù)就有數(shù)據(jù)可以讀。
·當(dāng)操作需要數(shù)據(jù)沒有準(zhǔn)備好,哈澤德式數(shù)據(jù)就會(huì)產(chǎn)生。當(dāng)進(jìn)入一個(gè)新的流水線操作的時(shí)候我們需要很小心設(shè)計(jì)流水線操作,以防止哈澤德式數(shù)據(jù)的產(chǎn)生。
圖2.6是一個(gè)把Handle-C程序轉(zhuǎn)換成流水線操作的例子,運(yùn)行的結(jié)果是數(shù)據(jù)輸入5階次方。 圖2.7顯示出上面例子的效果。
圖2.6 轉(zhuǎn)換為流水線操作
圖2.7流水線的效果
2.2 空間優(yōu)化
空間優(yōu)化跟時(shí)間優(yōu)化完全不同,時(shí)間優(yōu)化通常是在同時(shí)用更多資源執(zhí)行更多的操作來獲得高速操作,而空間優(yōu)化關(guān)心是這樣用最少的資源來完成操作。這在FPGA設(shè)計(jì)中相當(dāng)重要,因?yàn)槲覀冇玫馁Y源越少,我們可以在片子上有更多的操作。我們現(xiàn)在就來討論一些空間優(yōu)化的方法。
2.2.1 變量的最佳寬度
記住在4.1標(biāo)準(zhǔn)寬度中變量的轉(zhuǎn)化方向,事實(shí)上,如果我知道一個(gè)我們要用的值的上限和下限范圍,我們就會(huì)發(fā)現(xiàn)有些位在大多數(shù)情況是用不到的。例如:一個(gè)0-1024的變量就不需要用32位,11位的整型就足夠了。一個(gè)位數(shù)少的就只需要小的寄存器來儲(chǔ)存了。位數(shù)低的比位數(shù)高的相同操作需要更少的邏輯門,等式2.1中提到,是的一個(gè)組成部分,因此,這種優(yōu)化不僅節(jié)省了很多資源,還減少了,從而減少了。
皇家學(xué)院的學(xué)生阿·塔夫正在研究這個(gè)項(xiàng)目[8]。這個(gè)項(xiàng)目主要的目標(biāo)是通過限定浮點(diǎn)型變量的最佳寬度來自動(dòng)資源優(yōu)化。他的方法是仿真足夠多的數(shù)據(jù),然后通過統(tǒng)計(jì)學(xué)的原理來找出變量的最佳寬度。
2.2.2 組件的再運(yùn)用
如果相同寬度的不同操作數(shù)的相同操作在不同的時(shí)鐘周期中要運(yùn)行多次,我們就可以建立一個(gè)可以應(yīng)用于不同操作數(shù)組件。這種方法不影響電路的延時(shí),但節(jié)省了復(fù)制組件的門!為了能更多的運(yùn)用這些組件,我們甚至可以放棄限制條件,這樣短操作數(shù)的操作可以運(yùn)用這寫共享組件。這是因?yàn)殚L操作很短操作是一樣的??赡苡幸蓡柺?,由于用了并需要多很多邏輯單元會(huì)增加電路的延時(shí)。是的,原則上,我們可以用足夠的邏輯單元就會(huì)操作變快,然而FPGA器件并不支持不同操作不同時(shí)鐘,時(shí)鐘的頻率時(shí)最長那條路徑來決定,因此,共享組件對程序的影響不會(huì)很大。
在Handel-C中,共享表達(dá)式可以很容易定義共享組件,圖2.8是這樣的一個(gè)簡單例子,想要了解更詳細(xì)的信息,參考Handel-C的用戶指南和DK1設(shè)計(jì)步驟是很有用的。
圖2.8 Handel-C中的共享表達(dá)式
2.3 評估
如果我們不知道估計(jì)結(jié)果,這樣就無法知道優(yōu)化是否達(dá)到效果,因此,在這節(jié)中,我們將討論有關(guān)估計(jì)的相關(guān)手法。我將給出一些等式,這樣,開發(fā)人員就可以對操作做出判斷。是否值得在硬件中編程?如果結(jié)果達(dá)不到預(yù)期結(jié)果,器件再高級點(diǎn)是否可以值得這樣做,或者可以想到能達(dá)到更高速度的其他方法。這些都是我們這節(jié)要回答的問題。
2.3.1 等式
=+ + (2.2)
現(xiàn)在我們將介紹一些其他的等式來幫助我們估計(jì)結(jié)果。
假設(shè)硬件在執(zhí)行的過程中不需要經(jīng)常配置,這樣0因此,等式變?yōu)椋?
= + (2.3)
可以通過下面等式得:
=n*t (2.4)
這里的n時(shí)鐘的個(gè)數(shù),n是時(shí)鐘的延時(shí)
T可以通過下面等式確定:
t=1/c (2.5)
這里c是時(shí)鐘頻率
因此
=n/c (2.6)
n可以在電路編譯后的仿真中得到,c可以從延時(shí)報(bào)告中得到。
同理我們可以得到
=w/b (2.7)
這里的w是每項(xiàng)操作主機(jī)和FPGA芯片需要交換的字節(jié)數(shù),b是器件和PC機(jī)通信的接口的帶寬。
把連在一起得:
=w/b+n/c (2.8)
從這個(gè)等式中,我們可以看到優(yōu)化并不是只是減少時(shí)鐘的個(gè)數(shù)和提高時(shí)鐘的頻率,我們還要考慮到通信的數(shù)據(jù)量,有時(shí)候,高速并不因?yàn)槟隳芎芸靷鬟f數(shù)據(jù),而是因?yàn)楹芎脗鬟f數(shù)據(jù)的方法。例如:如果我們能很輕松處理數(shù)據(jù)以便數(shù)據(jù)在n操作只能被讀一次,然后每個(gè)操作中w等于o+i/n,這里o是輸出到主機(jī)的數(shù)據(jù)量,而i是從主機(jī)輸出的數(shù)據(jù)量。
2.3 等式的推理
我們知道軟件的,所以我們就可以知道期間是否可以達(dá)到我們想要的速度。如果不知道,我們將試著去推出來。
1. 首先,w/b是比大一點(diǎn)嗎?如果是,不管硬件運(yùn)行多快,對整體的速度的提高一點(diǎn)用處都沒有,因?yàn)榇蟛糠值臅r(shí)間都用來傳遞數(shù)據(jù),除非你利用一個(gè)高帶寬的通信接口,這樣就不值得在硬件上執(zhí)行這個(gè)程序了。
2. 假設(shè)c不變,w/b相對與相當(dāng)?shù)男?。例如:時(shí)鐘的頻率是不變的,計(jì)算n需要達(dá)到這個(gè)速度,這樣我們就應(yīng)該考慮更多的并行處理方法來達(dá)到這個(gè)周期數(shù)
3. 如果你覺得不好處理n,那么就假設(shè)n是定值,這樣計(jì)算c是否可以提高速度,然后考慮當(dāng)前的方法是否可以運(yùn)行在這樣的速度上,如果你用更高級的芯片是否可以提高速度。或者你是否期望你能運(yùn)行的速度的芯片進(jìn)入市場。
4. 是否你的方法有局限性,例如:如果你讀同時(shí)存儲(chǔ)器中一個(gè)地址,可能你的方法能以10倍的速度運(yùn)行。
5. 最后,你的程序是否可以在硬件的其他可以開發(fā)的并行執(zhí)行的位置執(zhí)行。
2.4 小結(jié)
在這章中,我討論了很多優(yōu)化操作,我介紹了通過重新排列代碼來使你的的程序能并行執(zhí)行在最段的周期中,在后面,我介紹了優(yōu)化操作中很重要的一個(gè)計(jì)算等式,在等式中,我們了解到操作的執(zhí)行速度不僅跟FPGA芯片運(yùn)行速度和你能減少多少個(gè)時(shí)鐘周期,還跟怎樣減少FPGA芯片跟主機(jī)通信的資源有關(guān)。
第三章:系統(tǒng)的頂層硬件設(shè)計(jì)
在這章中,我將介紹這樣把軟件編程轉(zhuǎn)換到硬件的一般的5個(gè)步驟,我將在后面的幾個(gè)小節(jié)中具體介紹這5個(gè)步驟。
3.1 設(shè)計(jì)步驟
Handel-C中,開發(fā)人員把軟件編程轉(zhuǎn)換為硬件電路的一般步驟如圖3.1所示。如下所示:
1. 第一步是編程分析,編程分析通常是確定程序中哪塊要轉(zhuǎn)換為硬件。這步是很重要的,因?yàn)檫@步?jīng)Q定了操作的最后結(jié)果,基本方法是找出一個(gè)程序哪一個(gè)部分重復(fù)執(zhí)行,因此這個(gè)部分的速度將很明顯影響整個(gè)電路的速度。
2. 第二步是直接轉(zhuǎn)換,這一步是直接把軟件編程不優(yōu)化直接轉(zhuǎn)化到硬件電路中,這樣是為了確保硬件執(zhí)行結(jié)果能跟軟件一樣。
3. 第三步是平衡延時(shí),這是為了平衡硬件每個(gè)部分的延時(shí),這一步很重要,因?yàn)橛布臅r(shí)鐘延時(shí)會(huì)是每個(gè)通路的最長的那個(gè)延時(shí),因此,如果某一個(gè)通路的延時(shí)比其他的都要長,這就意味著我們浪費(fèi)很多資源,因?yàn)槠渌耐凡荒苓\(yùn)行在更高的速度。
4. 第四步是優(yōu)化,一次運(yùn)用一種優(yōu)化算法是很重要的。應(yīng)用優(yōu)化算法后,我們就要看程序是否達(dá)到要求,如果沒有達(dá)到,就回到第三不,如果達(dá)到了,就繼續(xù)下面的第五步。
5. 最后一步是估算,就是估計(jì)程序的硬件電路的實(shí)際結(jié)果,然后對下面的問題做一個(gè)結(jié)論。硬件是否提高了程序的運(yùn)行速度?如果沒有,在哪一塊能,我們可以用其他的方法來執(zhí)行這個(gè)程序嗎?…等。
我們可以看到最后3個(gè)步驟事實(shí)是我們前面討論的優(yōu)化,剩下的我們將在這章中討論。
圖3.1 硬件開發(fā)步驟
第一步:程序分析。確定程序哪個(gè)部分需要轉(zhuǎn)換
第二步:把軟件不優(yōu)化直接轉(zhuǎn)化為硬件
第三步:平衡每路的延時(shí)
第四步:優(yōu)化,每次應(yīng)用一個(gè)優(yōu)化算法,檢查是否符合條件要求,如果不符合,回來第三步
第五步:估計(jì)實(shí)際結(jié)果,寫結(jié)論
3.2 編程分析
在這一節(jié)中,我們將討論硬件頂層設(shè)計(jì)的第一步。程序分析是最五個(gè)步驟中最重要的一步,以為如果在硬件上選擇了錯(cuò)誤的部分,那么對程序的影響將不會(huì)很明顯或者可以忽略。
3.2.1 程序分析的四個(gè)指導(dǎo)原則
我研究出程序分析的四個(gè)指導(dǎo)原則,開發(fā)人員并不需要必須征尋,但可以給開發(fā)人員知道程序的哪個(gè)部分可以轉(zhuǎn)換。
原則1:選擇重復(fù)執(zhí)行的部分
原因很明顯,如果我們選擇在硬件中很少運(yùn)行的部分,盡管這個(gè)部分可以高速運(yùn)行,但對實(shí)際程序的運(yùn)行并不起很大的作用,因?yàn)樗谟布泻苌賵?zhí)行。我們最好選擇在有限的硬件中執(zhí)行程序的內(nèi)循環(huán)。然而,因?yàn)榧夹g(shù)的提高,今天,隨著FPGA芯片的越來越大,集成的百萬個(gè)門和實(shí)時(shí)的在線配置,把整個(gè)程序都寫到硬件中都是有可能的。
原則2:選擇數(shù)據(jù)依賴性小的模塊
在硬件執(zhí)行的那部分程序是不能太依賴數(shù)據(jù),F(xiàn)PGA芯片一般是比PC機(jī)的CPU要慢一點(diǎn),這就為什么需要外加邏輯電路來配置FPGA器件。因此程序的并行操作才可以到達(dá)高速。太依賴數(shù)據(jù)將會(huì)減少并行的操作,因?yàn)檫@塊的數(shù)據(jù)取決于其他塊的數(shù)據(jù)將會(huì)影響程序的并行操作。
原則3:選擇通信少的模塊
硬件執(zhí)行時(shí)間是
= + + (3.1)
這里的表示總的執(zhí)行時(shí)間
表示重新配置的時(shí)間
表示主機(jī)和FPGA芯片傳遞數(shù)據(jù)的時(shí)間
表示實(shí)際的數(shù)據(jù)執(zhí)行時(shí)間
從等式3.1可以看到,完成所有硬件操作的時(shí)間不但取決于數(shù)據(jù)執(zhí)行時(shí)間,而且還包括了FPGA芯片配置時(shí)間(),傳遞初始數(shù)據(jù)和從FPGA芯片中讀數(shù)據(jù)的時(shí)間(),如果我們不需要實(shí)時(shí)重新配置FPGA芯片,在我們第一次配置器件的時(shí)候,?就是零,然而每次執(zhí)行程序的時(shí)候,就不會(huì)是零,總共的時(shí)間取決于主機(jī)和器件交換的數(shù)據(jù)量很交換的頻率。如果有大量的數(shù)據(jù)要傳送,當(dāng)Tcomm占Texec的大部分的時(shí)候,高速運(yùn)行可能就達(dá)不到。然而在某些情況下是有辦法來解決這個(gè)問題的。例如,如果在順序執(zhí)行的時(shí)候,大部分的數(shù)據(jù)是一樣的,我們在第一次操作后就把這些數(shù)據(jù)留在FPGA芯片中,這樣順序執(zhí)行的Tcomm包括在傳遞不同數(shù)據(jù)的時(shí)間中。
原則4:如果可以,盡量避免浮點(diǎn)型的計(jì)算
眾所周知,PC機(jī)比FPGA芯片能更好得計(jì)算浮點(diǎn)型數(shù)據(jù),由于專用的CPU和很好并行硬件設(shè)計(jì),所以推薦有CPU來處理浮點(diǎn)型數(shù)據(jù),盡管FPGA有支持浮點(diǎn)型數(shù)據(jù)計(jì)算的庫,但它不能像運(yùn)行整形數(shù)據(jù)計(jì)算那樣快,然而,現(xiàn)在有很多商業(yè)界,學(xué)術(shù)界都在研究這個(gè)操作,所以我可以預(yù)見這個(gè)原則過不了多久就用不上了。盡管這樣,我還是要推薦避免浮點(diǎn)型數(shù)據(jù)操作,如果開發(fā)人員碰到浮點(diǎn)型的計(jì)算,應(yīng)該試著考慮可否用整形數(shù)據(jù)計(jì)算來代替浮點(diǎn)型的計(jì)算。
所有的硬件開發(fā)操作中,這些操作是最難實(shí)現(xiàn)自動(dòng)完成的。因?yàn)檫@涉及到考慮程序到底是做什么的,因此很難找到一個(gè)實(shí)現(xiàn)自動(dòng)的規(guī)則,然而,可以從現(xiàn)在的編譯器借鑒一些方法來使這一步簡單點(diǎn),例如:亨利絲和帕得森研究的編譯器的方法,從而發(fā)現(xiàn)數(shù)據(jù)依賴而且很有可能可以除去這中依賴性。
3.3直接轉(zhuǎn)換
在這節(jié)中,我們將看到開發(fā)過程的第二步。就是把軟件編程直接轉(zhuǎn)化成硬件語言,這一步不涉及任何優(yōu)化,把優(yōu)化留在后面是因?yàn)槲覀儽仨毚_保硬件編程能和軟件編程有同樣的結(jié)果,這樣可以方便調(diào)試,如果我們把優(yōu)化放在前面,這樣如果有錯(cuò)誤有發(fā)生時(shí),我們就很難調(diào)試程序,因?yàn)槲覀儾恢绬栴}出在哪一步。
這個(gè)部分是很直接,因?yàn)镠andel-C是一門頂層設(shè)計(jì)語言。僅僅需要加一些代碼來讓主機(jī)和FPGA器件之間通信,這部分代碼要符合等式3.1中通信用時(shí)(),它的工作之一是從主機(jī)取出和裝入進(jìn)程需要的數(shù)據(jù),另一個(gè)工作是把FPGA器件處理后的數(shù)據(jù)傳回主機(jī)。上面提到,這一步很重要。找到一個(gè)能每項(xiàng)操作傳送最少數(shù)據(jù)方法是很重要的,一種可行的方法是把盡量多可以再用的數(shù)據(jù)用FPGA的RAM儲(chǔ)存起來。另外一種方法是把數(shù)據(jù)分割成若干部分以便FPGA芯片能儲(chǔ)存起來,反復(fù)利用這些數(shù)據(jù),直到它被清除出器件。通信的編碼很難實(shí)現(xiàn)自動(dòng)完成,因?yàn)椴煌男酒椭鳈C(jī)通信的方式不同。然而,去年,一個(gè)卓越的工學(xué)士李東尤提出可以解決這個(gè)問題的方案。他開發(fā)出一種新的語言,這種語言把軟件編程和硬件語言統(tǒng)一在一起。有了這個(gè)軟件,用戶可以定義哪些部分由硬件完成,哪些部分由軟件完成。指定器件后,他的編譯器通過器件庫自動(dòng)生成通信代碼,因此,如果要編譯器支持一個(gè)新的器件,用戶可以很簡單把它寫進(jìn)庫里。這種方法可以使一般的開發(fā)人員不必花太多的時(shí)間在寫器件的通信代碼。
3.4 小結(jié)
在這個(gè)章節(jié)中,我們討論了高速FPGA芯片的頂層設(shè)計(jì)的一般步驟,在第二部分,我還提到了怎樣解決通信中的最少數(shù)據(jù)量的問題。
第四章:例程分析:2-D凝膠圖像處理
在這章里,我們將討論在第二章提到的現(xiàn)實(shí)生活中的應(yīng)用。我們將以2-D凝膠圖像的處理作為例子來說明第二章中提到的開發(fā)步驟。我們還將比較流水線操作和RC1000操作的性能,遺憾的是,由于一些困難,我還沒研究出2-D凝膠圖像的處理的流水線操作,這在后面的章節(jié)將會(huì)細(xì)細(xì)討論。
4.1 2-D凝膠圖像處理
2-D凝膠圖像處理是一個(gè)用研究的技術(shù),它的目的是在不同時(shí)間將兩張圖像來匹配凝膠模型,然而,因?yàn)椴煌笮〉膱D像很難對準(zhǔn),所以很難正確和有效的匹配模型,最近S.Vesser博士,M.J.Dunn博士和 G. Z.Yang博士的一片論文中提到一個(gè)新奇的技術(shù),這種技術(shù)是基于圖像強(qiáng)度分配比選擇圖像特性佳的原則。方法是使用凝膠圖像處理一個(gè)多解析度表示法而且開發(fā)事實(shí)最佳的匹配的近似值能被從低解析度圖像有效率地吸取。
在這一步,最重要是找出程序執(zhí)行次數(shù)最多的內(nèi)循環(huán),否則對程序的影響不會(huì)很明顯,所以我們必須掌握這種方法工作的算法。下面是用于編程的簡短算法。
第一步:設(shè)定層為第0層;
第二步:設(shè)定解析度為5來模糊圖像I1,I2 ;
第三步:嚴(yán)格優(yōu)化轉(zhuǎn)換參數(shù)t為;
第四步:如果l小于5,繼續(xù)下面第五步,否則結(jié)束;
第五步:細(xì)化t
第六步:如果沒有完成所有的t矩陣ai,j;ai+1,j;ai,j+1;ai+1,就執(zhí)行第七步,否則執(zhí)行第八步;
第七步:將控制點(diǎn)ci,j;ci+1,j;ci,j+1;ci+1,j+1最佳化是由使用 BFGS 取
f(c)=corr(l1, tc(I2))的最大值得到,然后回到第六步;
第八步:增加設(shè)計(jì)層次l
第九步:設(shè)定解析度為5+l來模糊圖像I1,I2,然后回到第四步;
基本上,運(yùn)算法則的主意是把兩個(gè)輸入圖像 (I1,I2) 分為特定數(shù)目的區(qū)塊(柵極)。當(dāng)圖像2(I2) 的柵極形狀被控制點(diǎn)(ci,j; ci+1,j; ci,j+1; ci+1,j+1)決定的時(shí)候, 圖像1(I1) 的柵極在外形上總是尖銳的.一個(gè)目標(biāo)圖像(tc(I2)) 是通過轉(zhuǎn)換對I1的對應(yīng)I2中尖銳的柵極圖素,這樣是為了符合I1中的矩形像素。阻止控制點(diǎn)的操作和相似性就可以在 I1 和Tc(I2)之間被計(jì)算。相似性是在 2個(gè)圖像之間的圖素的關(guān)聯(lián)。然后派生出將會(huì)用來調(diào)整控制點(diǎn),以使在I2和Tc(I2)之間的相似性將會(huì)增加。重復(fù)執(zhí)行程序,直到相似性的達(dá)到滿意。
上面的整個(gè)程序在圖像的不同解析度將會(huì)被執(zhí)行。從低的解析度到高解析度的操作。 柵極的數(shù)目是程序工作的解析度決定。源自較低的解析度的控制點(diǎn)將會(huì)決定較高的解析度的程序開始控制點(diǎn)。很顯然計(jì)算的哪一步是用時(shí)最多, 就是第7步的“控制點(diǎn)的優(yōu)化”。因此我選擇這一個(gè)部份作為我們硬件操作的出發(fā)點(diǎn)。
4.2.2原則4:盡量避免浮點(diǎn)型數(shù)據(jù)的計(jì)算
因此我們選擇執(zhí)行時(shí)間最長的那個(gè)部分?,F(xiàn)在應(yīng)該看看這部分是否適合在硬件執(zhí)行,實(shí)現(xiàn)是適當(dāng)?shù)摹?因?yàn)榭刂泣c(diǎn)的優(yōu)化算法是用包括許多浮點(diǎn)型數(shù)據(jù)計(jì)算的算出的,所以在第一眼看去,程序是不符合這個(gè)規(guī)則的。 在現(xiàn)階段,我們應(yīng)該做第一件事物是看是否可以用整型數(shù)據(jù)計(jì)算來代替浮點(diǎn)計(jì)算。一個(gè)有用的方法是依大小決定浮點(diǎn)型數(shù)據(jù)的數(shù)值,以便特定量整型數(shù)據(jù)的最低重要整型數(shù)據(jù)位表現(xiàn)在十位后面的數(shù)值。 但是正常地,浮點(diǎn)型數(shù)據(jù)能比相同的寬度整型數(shù)據(jù)適應(yīng)數(shù)值范圍大。 這就意味著,當(dāng)把它傳遞到整數(shù)的時(shí)候,我們要丟掉浮點(diǎn)型數(shù)據(jù)的某些有效數(shù)據(jù)位。丟掉這些有效數(shù)據(jù)位對這程序運(yùn)行的影響不是很大。
遺憾的是,我認(rèn)識(shí)到這不是程序的主體,事實(shí)上,一些運(yùn)算過程的中間結(jié)果有很大的數(shù)據(jù),特別是程序運(yùn)行在很多像素參加處理的時(shí)候。這就意味著丟掉一些有效數(shù)據(jù)位對程序的最后影響是很明顯的,但是,當(dāng)我們更深入了解程序的時(shí)候,我們就會(huì)發(fā)現(xiàn)優(yōu)化其實(shí)是可以分成兩個(gè)部分的。
·相似性和導(dǎo)出的轉(zhuǎn)換和計(jì)算
·BFGS優(yōu)化
僅僅第二個(gè)部分才會(huì)涉及到浮點(diǎn)型數(shù)據(jù)的計(jì)算,第一部分可以在整型數(shù)據(jù)上執(zhí)行,現(xiàn)在,我們就要問個(gè)問題:第一個(gè)部分也是程序執(zhí)行最頻繁的那個(gè)部分嗎?在回答這個(gè)問題之前,讓我們來看看下面這個(gè)等式:
c=w*i*CPI (4.1)
這里的w是程序中數(shù)據(jù)單元的個(gè)數(shù)
i是每個(gè)數(shù)據(jù)單元指令的平均值
CPI是每個(gè)指令執(zhí)行的平均周期
c是程序執(zhí)行總共時(shí)鐘周期
現(xiàn)在我可以告訴答案是第一個(gè)部分就是程序執(zhí)行最頻繁的那個(gè)部分,盡管兩個(gè)部分執(zhí)行的時(shí)間是一樣的,第一部分的確是計(jì)算量最大的,原因是兩者圖像的大部分像素都參與到第一部分的計(jì)算,而第二部分只須計(jì)算控制點(diǎn)的工作,控制點(diǎn)要比圖像的像素點(diǎn)要少得多。因此第一部分的等式4.1中的w要比第二部分的等式4.1中w要大很多,但兩個(gè)部分中的i和CPI接近相等的。i之所以相等是因?yàn)槊總€(gè)數(shù)據(jù)的計(jì)算量差不相等的,CPI相等是因?yàn)镃PU的流水線是滿的,應(yīng)為這兩部分的操作需要相當(dāng)多的計(jì)算操作。因此,通過等式4.1,我們可以知道,第一部分的c要比第二部分的c要大很多。因?yàn)镃PU的時(shí)鐘是固定的,所以我們可以計(jì)算出第一部分是程序計(jì)算量最大的部分。
4.2.3 原則2:選擇數(shù)據(jù)依賴少的部分
選擇的這部分的代碼是符合這個(gè)標(biāo)準(zhǔn)嗎?答案是符合。因?yàn)閷τ诿總€(gè)目標(biāo)像素,它的數(shù)值完全地在來自Image2的4個(gè)像素,而且不影響其他目標(biāo)像素。這就意味著在流水線操作可以同時(shí)操作所有的目標(biāo)像素,這樣就對數(shù)據(jù)的依賴性很小,相似性和導(dǎo)出計(jì)算也對數(shù)據(jù)的依賴性很小,這樣是因?yàn)樗麄兪菑膶?shù)據(jù)依賴性很小的目標(biāo)像素計(jì)算得到的。
4.2.4原則3:選擇消耗通信資源少的部分
由等式2.1知,是的一個(gè)部分。因此,不能很大也很重要。在前面的章節(jié)中提到, =w/b,這里b是要通信的數(shù)據(jù)被通信接口的帶寬分成字節(jié)數(shù)。要通信的數(shù)據(jù)量
w=I1+I2+cp+Tc(I2)+d+s
這里I1,I2是源圖像,cp是控制點(diǎn)數(shù)組,(I2)是被轉(zhuǎn)換的圖像,d是一個(gè)能確定中間結(jié)果的數(shù)組,s是一個(gè)能決定相似性的中間結(jié)果的數(shù)組,在最高的解析層次,每個(gè)像素的大小是512位*512位,有17*17的控制點(diǎn),每個(gè)控制點(diǎn)也4位的x,y,每個(gè)控制點(diǎn)有6個(gè)8位的d數(shù)據(jù)。每個(gè)8位數(shù)據(jù)有5個(gè)s數(shù)據(jù),因此總共要傳遞的數(shù)據(jù)有80256個(gè)字節(jié),在Pilchard系統(tǒng)中,的64位100M的DIMM接口的帶寬是8*100MHZ=800MB/s,因此,是80256/80010241024s,這比0.001s還要小,對于RC1000,32位的PCI33的帶寬是433=132MB/s,因此,它的是80256/13210241024s,這個(gè)大約是0.01s。因?yàn)槌绦虻倪\(yùn)行時(shí)間通常是3s左右,因?yàn)槲覀兡芾^續(xù)執(zhí)行程序。
收藏
編號(hào):2689627
類型:共享資源
大?。?span id="mzebxcnn0" class="font-tahoma">726.23KB
格式:ZIP
上傳時(shí)間:2019-11-28
5
積分
- 關(guān) 鍵 詞:
-
基于
fpga
通道
采樣系統(tǒng)
設(shè)計(jì)
資料
- 資源描述:
-
基于FPGA多通道采樣系統(tǒng)設(shè)計(jì)資料,基于,fpga,通道,采樣系統(tǒng),設(shè)計(jì),資料
展開閱讀全文
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶書面授權(quán),請勿作他用。