




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1硬件加速器的設計硬件加速器的設計(Verilog 1364-2001)(Verilog 1364-2001) - - 建模、仿真、綜合、驗證和實現建模、仿真、綜合、驗證和實現 - -23456 78步驟1步驟2步驟3寄存器寄存器寄存器圖 流水線9 :設執(zhí)行算法核心算法核心所占的時間比例為 f。則執(zhí)行非算法核心算法核心的時間為(1- f ),因此有: t = ft + ( 1-f ) t t = ft/s + ( 1- f ) t 總體性能的提高比例是原來的處理時間除以加速后的處理時間: S= (ft+(1-f ) t) / ( ft/s+(1-f ) t ) = 1 / ( f/s+(1-f
2、 )這個公式稱為Amdahl法則,是以Gene Amdahl的名字命名的,他是并行計算的先驅之一。這個公式表明加速處理核心核心(kernel)算法所帶來的整體性能的提高在很大程度上依賴于算法核心算法核心在整個算法執(zhí)行時間中所占的比例。 xyDDD22xyDDD22xyDDD22xyDDD22xyDDD10例例1:假設在嵌入式處理器上運行的算法可以分成不同的部分,執(zhí)行每一部分所花費的時間可以估算出來,而該算法可分為兩個部分,即分成兩個核心核心(kernel)算法,一個占總時間的80%,而另一個只占總時間的20%。若用一個硬件加速器來加速算法核心算法核心,我們將第一個算法核心算法核心的運行速度提高
3、到原來的10倍,或者將第二個算法核心算法核心提高到原來的100倍,試問對哪個算法核心算法核心使用硬件加速器能對總體性能的提高產生更好的效果?解:對第一個算法核心算法核心進行加速處理所帶來的總體性能提升為: 1 / (0.8/10)+(1-0.8) = 1/(0.08+0.2) =3.57 對第二個算法核心算法核心進行加速處理帶來的總體性能提升為: 1 / (0.2/10)+(1-0.2) = 1/(0.02+0.8) =1.25xyDDD22xyDDD22xyDDD22xyDDD22xyDDD11從結果對比可以看到,雖然第二個算法核心算法核心提高的運算速度是第一個的10倍,但是由于它在原來總運
4、行時間里所占的比例較低,對其進行加速處理也只能帶來較小的性能改善。而對第一個算法核心算法核心進行加速處理會對總體性能產生更顯著的效果。所以我們在開始正式設計硬件時必須找到主要矛盾,即占總運行時間比例較高的部分,針對這部分算法程序進行硬件加速器的設計 ,以期望取得顯著效果。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD12在確定算法核心算法核心以后,我們需要確定執(zhí)行計算步驟的順序。我們要確保能得到數據,以便按順序處理,并且確保中間結果能夠在后續(xù)步驟需要前計算出來。除了這些約束以外,有些運算步驟是可以潛在地并行執(zhí)行的。因此,我們要確定哪些步驟可以通過并行執(zhí)行來滿足性能要求。然后
5、再確定加速器的結構,即確定各個處理模塊的功能以及它們之間的數據流動。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD13從算法到加速器結構,是在系統設計流程的早期完成的。這通常是由有經驗的系統設計師完成。讓綜合工具自動完成這一過程,面臨很大的技術挑戰(zhàn)。除了非常少的領域外,早期的高級綜合工具并不成功。近來,新一代工具開始浮現,并且在很廣泛的領域內表現出良好的前景,尤其在音頻,視頻,和其它的信號處理領域。隨著這種技術的成熟,我們可以期待高級綜合工具在設計方法學中將會有更廣泛的應用。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD14在許多嵌入式系統中,需要處理大
6、量的輸入輸出數據。I/O控制器必須在外部設備和嵌入式系統之間高速傳輸數據。數據從外部設備讀入內存,就可以被嵌入式軟件或加速器處理。處理后的數據被寫到內存。如果讀寫內存數據都在處理器的控制下進行,那么,數據傳輸速度會很慢,并且占用大量處理器時間,使處理器無法執(zhí)行其他任務。如果讓I/O控制器和加速器直接發(fā)起對內存的訪問而不通過處理器,勢必可以大大加快訪問內存的速度。這種內存訪問方式稱為DMA(Direct Memory Access)方式。在這種方式下,I/O控制器和加速器作為主設備給出讀寫內存的地址和控制信號,或者通過DMA控制器發(fā)起對內存的訪問,由DMA控制器給出地址和控制信號。xyDDD22
7、xyDDD22xyDDD22xyDDD22xyDDD15系統中有處理器和DMA設備,并且共用內存訪問通路,必須避免由于多個主設備同時訪問內存而引起的沖突。為此,我們可以在系統中引入仲裁器(Arbiter),如下圖所示。系統中的主設備(處理器,DMA方式的加速器、I/O控制器)在訪問內存之前,必須給仲裁器發(fā)出請求信號,仲裁器根據預先確定的仲裁策略,在多個請求信號中決定誰將取得訪問內存的總線控制權,并給得到總線控制權的設備發(fā)出訪問內存的準許信號。當該設備完成對內存的訪問后,便撤消請求信號。然后,仲裁器進入新一輪的仲裁,仲裁勝出的設備進行內存訪問。我們也可以讓處理器來執(zhí)行仲裁器的功能。當其他主設備要
8、訪問內存時,必須先向處理器發(fā)出請求信號,由該處理器決定哪個設備可以訪問內存。根據不同的應用場合,選擇適合的仲裁策略,有優(yōu)先級模式(賦予某個或幾個設備更高的優(yōu)先權),輪詢模式(所有主設備嚴格按照一定的順序取得內存訪問權)。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD16 xyDDD22xyDDD22xyDDD22xyDDD22xyDDD CPU 加速器加速器 仲裁器仲裁器 存儲器存儲器圖2 多主設備共享內存系統 I/O控制器控制器request grant grant requestrequest grant17在許多應用中,數據被有規(guī)律地放在內存中如占用連續(xù)的內存塊,加速
9、器把數據從內存中一塊一塊取出進行處理。例如處理靜態(tài)和視頻圖像的幾種算法把一幀圖像分割成88或者1616的像素塊,然后獨立地處理每個塊。這種塊處理加速器的數據通路主要由兩部分組成。其中一個部分以DMA方式訪問內存。這部分電路根據處理器寫入加速器內部寄存器的基地址產生后續(xù)地址。這一功能通常由地址計數器來完成。數據通路的另一部分對數據進行處理。控制部分按一定的時序控制數據通路的打開和關閉,使數據有序、正確地流動??刂乒δ芸梢杂靡粋€有限狀態(tài)機或多個狀態(tài)機實現。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD18與塊處理加速器相對應的是流處理加速器。流處理加速器處理的數據是按時間順序達
10、到的數據流。數據流可以是來自于高速的輸入設備(如A/D、攝像機等),也可以是其他加速器的輸出。此外,內存中的數據也能以流的方式讀出,供加速器處理。流處理加速器最常見的應用領域之一是數字信號處理數字信號處理(DSP)。模擬信號經A/D采樣后,得到采樣信號的數據流。對數據的處理包括濾波、混合、放大/衰減、以及時域和頻域間的轉換。 xyDDD22xyDDD22xyDDD22xyDDD22xyDDD19雖然,加速器可以直接讀取內存數據,并且把數據處理完后寫回內存,但是加速器必須知道什么時候開始工作,待處理數據的起始地址,數據的大小,處理后數據的存放地址以及完成處理后通知處理器。也就是說,處理器必須能夠
11、控制加速器的工作、獲取加速器當前的工作狀態(tài)。這些功能通常是由加速器內部的輸入輸出寄存器來完成。 xyDDD22xyDDD22xyDDD22xyDDD22xyDDD20 我們可以在加速器內部設置地址寄存器和數據長度寄存器,處理器通過向這些寄存器寫入數據讓加速器知道從何處讀取數據、數據大小及處理完后數據寫到何處。還可以有狀態(tài)寄存器,處理器通過讀取狀態(tài)寄存器了解加速器當前的狀態(tài)。也可以用狀態(tài)寄存器的值產生申請中斷信號,通知處理器。加速器可以看做是處理器的一個I/O設備,因此,處理器讀寫加速器的內部寄存器與讀寫一般的I/O設備是一樣的。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD
12、21有的情況下,當處理器給加速器發(fā)出一個處理任務時,并不要求加速器立即響應。處理器把需要加速器處理的多項任務的描述信息寫到先入先出隊列(FIFO)中,加速器從FIFO中讀取每件任務的描述信息,等準備好以后,就可以執(zhí)行一項任務。xyDDD22xyDDD22xyDDD22xyDDD22xyDDD22 23邊緣檢測是分析視頻圖像的重要手段之一,并且應用領域廣泛,像安全監(jiān)控和計算機圖形學等。邊緣檢測是確定一幅圖像在哪些區(qū)域上亮度發(fā)生突變。這些亮度突變的區(qū)域通常就是物體的邊緣。24在這個例子中,我們假設有像素的圖像,每個像素用8比特表示,按行存儲在內存中,并且每一行里從左到右連續(xù)的像素點占據著內存中連續(xù)
13、的存貯單元。像素值是無符號整數,范圍從0(黑色)到 255(白色)。這里,我們采用一種相對簡單的算法,叫做Sobel邊緣檢測法。它的機理是計算x和y方向亮度信號的導數值并且尋找導數中的最大值和最小值。這些區(qū)域就是亮度變化最劇烈的區(qū)域。 25Sobel檢測法通過一個叫做卷積的過程來估計每個像素點每個方向上的導數值。把中心像素點和離它最近的八個像素點每個乘以一個系數后相加。該系數通常用一個 的卷積表(convolution mask)來表示。分別用于計算x和y方向導數值的Sobel卷積表 Gx和 Gy 如下圖所示。22xyDDD26-10+1-20+2-10+1+1+2+1000-1-2-127我
14、們把每個像素值分別乘以卷積表中對應的系數,再把相乘得到的九個數相加就得到了x方向和y方向的偏導數值 Dx和 Dy。然后,利用這兩個偏導數值計算中心像素點的導數。計算公式如下:22xyDDD28由于我們只想找到導數幅值的最大值和最小值,對上式作如下簡化:這樣近似能夠滿足計算要求,因為開平方和平方函數都是單調的,實際計算幅度的最大值、最小值與近似以后計算的最大值、最小值發(fā)生在圖像的同一個地方。并且,與計算平方和開平方相比,計算絕對值所用的硬件資源少得多。xyDDD29我們需要重復地計算圖像中每個像素位置的導數幅值。但是,注意到環(huán)繞圖像邊緣的像素點并沒有一個完整的相鄰像素組來計算偏導數和導數,所以我
15、們需要對這些像素進行單獨處理。最簡單的方法就是把圖像中邊緣像素點的導數值值 |D|設置為0。這可以通過軟件來完成。30例例2:把Sobel邊緣檢測算法用偽代碼的形式表達出來,也就是,用一種與計算機編程語言類似的表示法。我們用類似于Verilog的偽代碼來表示該算法。令Orowcol 表示原始圖像的像素點,Drowcol表示導數圖像的像素點,row的范圍從0到479,col的范圍從0到639。同時令Gxij 和 Gyij 表示卷積表,其中i 和 j 的范圍從 -1 到 1. 31該算法可以表達為如下形式: for( row=1; row=478; row=row+1 ) begin for(co
16、l=1; col=638; col=col+1)begin sumx=0; sumy=0;for( i = -1; i = +1; i = i+1) beginfor (j = -1; j= +1; j = j+1) beginsumx = sumx + Orow+icol+j * Gxij;sumy = sumy + Orow+icol+j * Gyij; end end Drowcol = abs(sumx) + abs(sumy) end end3233 3435 36 計算導數像素的數據關系圖37383940414243 444546圖6 Sobel加速器數據通路結構4748 4950
17、515253545556575859606162636465666768697071表1 Sobel加速器的寄存器寄存器偏移值讀/寫中斷控制0只寫開始4只寫原始圖像基地址8只寫導數圖像基地址12只寫狀態(tài)0只讀727374757677 787980818283848586878889909192 939495為了完成這個驗證過程,必須構建一個測試平臺,該平臺可以模擬帶有加速器的嵌入式系統的行為。若我們有一個已驗證的嵌入式處理器模型,則可以把它加到測試平臺中,編寫小的測試程序在它上面運行。測試程序把參數寫入加速器中的寄存器,對其進行設置并啟動操作。另一方面,若不能獲得處理器模型,則必須編寫處理器總
18、線的功能模型,即能執(zhí)行預先確定的總線操作時序,但不實際執(zhí)行任何處理器指令的模型。我們的測試平臺也需要有存儲器和總線仲裁器的模型。這個存儲器模型,像處理器模型一樣,沒有必要具有全部的功能,而只要具有總線的讀寫操作功能即可,只要能按照預先確定的規(guī)則產生讀取的數據,可以不考慮數據的寫入。這些簡化使得我們可以把精力集中在加速器的驗證上,以可控的方式建立測試案例。96例例14 :開發(fā)一個可對 Sobel 加速器進行驗證的測試平臺,該平臺包含一個具有總線功能的處理器模型。該處理器模型能通過程序命令加速器對一幅存儲在地址為00800016 的原始圖像進行計算,并把計算生成的圖像像素的導數值存入地址為0530
19、0016 的內存中。該處理器模型必須每10s讀一次狀態(tài)寄存器,直到done 標志位標志位(完成標志位)被設置為止。該測試平臺還必須包括能賦予加速器優(yōu)先權的總線仲裁器,以及具有總線功能的存儲器,該存儲器對讀操作返回0,并拋棄寫入的數據。979899100always begin/ 時鐘發(fā)生器clk = 1b1; #(t_c/2);clk = 1b0; #(t_c/2); endinitial begin / 復位發(fā)生器rst = 1b1;#(2.5*t_c) rst = 1b0;end sobel duv ( .clk_i(clk), .rst_i(rst), .cyc_o(sobel_cyc_
20、o),.stb_o(sobel_stb_o), .we_o (sobel_we_o), .adr_o(sobel_adr_o),.ack_i(sobel_ack_i), .cyc_i(bus_cyc), .stb_i(sobel_stb_i), .we_i(bus_we), .adr_i(bus_adr3:2), .ack_o(sobel_ack_o), .dat_o(sobel_dat_o), .dat_i(bus_dat), .int_req(int_req) ); endmodule101時鐘發(fā)生器always塊用參數t_c確定了時鐘周期時間,產生頻率為100MHz的時鐘信號。參數mem
21、_base和sobel_base定義了存儲器的基地址(00000016 )和Sobel加速器寄存器的基地址(40000016)。其他參數定義了控制寄存器和狀態(tài)寄存器相對基地址的偏移值。接下去,測試平臺列出了表示總線地址,數據和控制信號的wire類型的線網。正如我們馬上將要看到的那樣,這些wire類型的線網信號是從系統中不同的源設備經由多路器選擇出來的。該測試平臺還聲明了專用于連接Sobel加速器的線網。在模塊中,加速器被實例引用為待驗證的設計(duv)并與該線網連接。 102103104105 106107存儲器總線功能模型的測試平臺代碼如下:wire mem_stb_i;wire 3:0me
22、m_sel_i;reg mem_ack_o;reg 31:0mem_dat_o;always begin / 存儲器總線功能模型 mem_ack_o = 1b0;mem_dat_o = 3h00000000;(posedge clk);while (!(bus_cyc & mem_stb_i) (posedge clk);if (!bus_we)mem_dat_o = 32h00000000; / 代替讀取的數據 mem_ack_o = 1b1;(posedge clk);end108存儲器一直等待,直到信號bus_cyc 和mem_stb_i都為1,這表示需要進行存儲器操作。若bus_we為
23、0,則進行讀取操作,故從存儲器的輸出讀取的數據為0。在寫操作的情況下,存儲器不對輸入數據進行任何操作。在這兩種情況下,存儲器都把確認信號設置為1,在下一個周期隨即把這個信號清零,完成操作。109測試平臺仲裁器在某種程度上比測試平臺的其它器件要復雜些。它把信號sobel_cyc_o 和cpu_cyc_o分別用作Sobel加速器和處理器的請求信號,并產生sobel_gnt和cpu_gnt作為批準批準(grant)信號。當任一請求信號變成有效時,仲裁器便發(fā)出相應的批準信號。若兩個請求信號在同一個周期變成有效,則仲裁器授予加速器優(yōu)先權,發(fā)出加速器的批準批準信號,而不發(fā)出處理器的批準批準信號直到加速器的
24、請求被撤銷為止。因為批準信號輸出不僅僅取決于請求信號的輸入值,還取決于請求信號值的以前歷史情況。仲裁器必須由時序電路采用有限狀態(tài)機來實現。狀態(tài)轉移圖如圖11所示。該有限狀態(tài)機是一個米利型狀態(tài)機,因為它允許在相應的請求信號變?yōu)橛行У耐粋€周期就發(fā)出批準批準信號。 110圖11仲裁器狀態(tài)轉移圖111仲裁器的測試平臺代碼如下:parameter sobel = 1b0, cpu =1b1;reg arbiter_current_state, arbiter_next_state;reg sobel_gnt, cpu_gnt;/ 仲裁器有限狀態(tài)機寄存器 always (posedge clk) if
25、(rst)arbiter_current_state = sobel;elsearbiter_current_state = arbiter_next_state; 112 always * / 仲裁器邏輯case (arbiter_current_state) sobel: if (sobel_cyc_o) begin sobel_gnt = 1b1; cpu_gnt = 1b0; arbiter_next_state = sobel; end else if (!sobel_cyc_o & cpu_cyc_o) begin sobel_gnt = 1b0; cpu_gnt = 1b1; a
26、rbiter_next_state = cpu; end else begin sobel_gnt = 1b0; cpu_gnt = 1b0; arbiter_next_state = sobel; end 113 cpu: if (cpu_cyc_o) begin sobel_gnt = 1b0; cpu_gnt = 1b1; arbiter_next_state = cpu; end else if (sobel_cyc_o & !cpu_cyc_o) begin sobel_gnt = 1b1; cpu_gnt = 1b0; arbiter_next_state = sobel; end
27、 else begin sobel_gnt = 1b0; cpu_gnt = 1b0; arbiter_next_state = sobel; endendcase114測試平臺代碼剩下的部分表示總線多路選擇器和從機選擇邏輯:wiresobel_sel, mem_sel;assign bus_cyc = sobel_gnt ? sobel_cyc_o : cpu_cyc_o;assign bus_stb = sobel_gnt ? sobel_stb_o : cpu_stb_o;assign bus_we = sobel_gnt ? sobel_we_o : cpu_we_o;assign b
28、us_sel = sobel_gnt ? 4b1111 : cpu_sel_o;assign bus_adr = sobel_gnt ? 1b0, sobel_adr_o:cpu_adr_o;assign sobel_ack_i = bus_ack & sobel_gnt;assign cpu_ack_i = bus_ack & cpu_gnt;115 / 總線從機邏輯 assign sobel_sel = (bus_adr & 23h7FFFF0) = sobel_reg_base;assign mem_sel= (bus_adr & 23h400000) = mem_base;assign
29、 sobel_stb_i = bus_stb & sobel_sel;assign mem_stb_i = bus_stb & mem_sel;assignbus_ack = sobel_sel ? sobel_ack_o : mem_sel ? mem_ack_o : 1b0;/ 總線數據多路選擇器assign bus_dat = (sobel_gnt & bus_we | sobel_sel & !bus_we) ? sobel_dat_o : (cpu_gnt & bus_we) ? cpu_dat_o : mem_dat_o;116來自仲裁器的批準信號確定由哪個主設備提供總線控制信號和
30、地址信號。仲裁器的批準批準(grant)信號也被用來選擇哪一個主機接收從機的確認信號,這樣只有取得總線使用權的主機主機才能接收到從機的確認信號??偩€從機從機邏輯對地址進行譯碼得到設備的片選信號。被選中的從機從機(片選信號有效)利用其片選信號把確認確認(ack)信號經由多路器送到bus_ack信號上??偩€數據多路器根據哪個主機主機是有效的,哪個從機從機被選中,總線操作是讀還是寫,來確定bus_data信號的數據源。117我們將利用例14的測試平臺進行仿真,以驗證Sobel加速器正確地響應了從機總線操作,并在正確的地址上執(zhí)行了主機總線操作。我們必須觀察總線的控制信號和地址信號的值,以及加速器內部信號的值。圖12顯示了由處理器總線功能模塊對加速器進行初始化的過程中總線信號的仿真波形。圖13到15顯示了加速器內部信號在處理一行開始時的波形(圖13),在穩(wěn)態(tài)處理過程中的波形(圖14),和在處理一行結束時和下一行開始時的波形(圖15)。最后,圖16展示了整幅圖像處理完成
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國聚酰亞胺(PI)薄膜行業(yè)運行現狀及發(fā)展前景分析報告
- 2025福建省建筑安全員C證考試題庫
- 南京師范大學《統計學專業(yè)前沿》2023-2024學年第二學期期末試卷
- 四川農業(yè)大學《醫(yī)學論文寫作與學術誠信》2023-2024學年第二學期期末試卷
- 廣西體育高等??茖W?!兜厍蛭锢韺W》2023-2024學年第二學期期末試卷
- 甘肅畜牧工程職業(yè)技術學院《研究型綜合》2023-2024學年第二學期期末試卷
- 哈爾濱工程大學《學前教育專業(yè)英語》2023-2024學年第二學期期末試卷
- 2024-2025學年山東省百師聯考高三上學期11月考試歷史試卷
- 上海民遠職業(yè)技術學院《服裝市場調研》2023-2024學年第二學期期末試卷
- 山西信息職業(yè)技術學院《秘書學》2023-2024學年第二學期期末試卷
- 術后鎮(zhèn)痛泵的使用與護理
- GB 19522-2024車輛駕駛人員血液、呼氣酒精含量閾值與檢驗
- 2024年成都新都投資集團有限公司招聘筆試沖刺題(帶答案解析)
- 危險預知訓練表(KYT)
- 2024年湖南鐵路科技職業(yè)技術學院單招職業(yè)技能測試題庫及答案解析
- 《書籍裝幀設計》 課件 項目1 走進書籍裝幀設計
- ASTM標準全部目錄(中文版)
- 《汽車電氣設備構造與維修》 第4版 課件 第3、4章 電源系統、發(fā)動機電器
- 遼海版小學美術六年級下冊全冊教案
- 2023年南京市鼓樓區(qū)建寧路街道安監(jiān)辦招聘專職安全員考試真題及答案
- 鄉(xiāng)鎮(zhèn)精神衛(wèi)生工作總結
評論
0/150
提交評論