<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 基于A(yíng)ltera浮點(diǎn)IP核實(shí)現浮點(diǎn)矩陣相乘運算的改進(jìn)設

基于A(yíng)ltera浮點(diǎn)IP核實(shí)現浮點(diǎn)矩陣相乘運算的改進(jìn)設

作者: 時(shí)間:2013-04-11 來(lái)源:網(wǎng)絡(luò ) 收藏

嵌入式計算作為新一代計算系統的高效運行方式,應用于多個(gè)高性能領(lǐng)域,如陣列信號處理、核武器模擬、計算流體動(dòng)力學(xué)等。在這些科學(xué)計算中,需要大量的矩陣運算。而目前已實(shí)現的矩陣運算是直接使用VHDL語(yǔ)言編寫(xiě)的矩陣相乘處理單元[1],其關(guān)鍵技術(shù)是乘累加單元的設計,這樣設計的硬件,其性能依賴(lài)于設計者的編程水平。此外,FPGA廠(chǎng)商也推出了一定規模的浮運算[2],雖然此應用了本廠(chǎng)家的器件,并經(jīng)過(guò)專(zhuān)業(yè)調試和硬件實(shí)測,性能穩定且優(yōu)于手寫(xiě)代碼,但仍可對其進(jìn)行改進(jìn),以進(jìn)一步提高運算速度。

本文引用地址:http://dyxdggzs.com/article/189645.htm

1 相乘原理

公司推出的浮相乘IP核ALTFP_MATRIX_MULT,是在Quartus軟件9.1版本以上的環(huán)境中使用,能夠進(jìn)行一定規模的浮點(diǎn)矩陣相乘運算,包含A、B矩陣數據輸入,數據浮點(diǎn)乘加,數據緩存及相加輸出四大部分。其中最能體現浮點(diǎn)計算性能的是浮點(diǎn)乘加部分,而周?chē)目刂齐娐芳拜敵鰟t影響到系統的最高時(shí)鐘頻率,間接地影響系統整體性能。

整個(gè)矩陣相乘電路原理是將輸入的單路數據(A、B矩陣共用數據線(xiàn)),通過(guò)控制器產(chǎn)生A、B矩陣地址信號,控制著(zhù)A矩陣數據輸出和B矩陣數據輸出,并將數據并行分段輸出到浮點(diǎn)乘加模塊進(jìn)行乘加運算,之后串行輸出到一個(gè)緩存器模塊中,再以并行方式輸出到浮點(diǎn)相加模塊,最后獲得計算結果。從其原理可以看出,在數據輸入輸出方面仍有許多可改進(jìn)的地方。

2 IP核存在的缺陷及改進(jìn)

2.1 存在缺陷

(1)輸入數據帶寬的不均衡性。在矩陣A、B的數據輸入時(shí),的IP核將A矩陣數據存于M144K的Block RAM中,而將B矩陣數據存于M9K的Block RAM中,導致IP核中A矩陣數據的帶寬小于B矩陣數據的帶寬,并需要一定數量的寄存器組使A矩陣數據帶寬能夠匹配于B矩陣數據帶寬。由此可見(jiàn),A、B矩陣數據的存儲受到器件限制和存儲約束,同時(shí)由于在浮點(diǎn)乘加模塊的輸入端(A、B矩陣數據)帶寬不同,造成A矩陣數據的輸入需要額外的處理時(shí)間。

(2)加載數據的不連貫性。在矩陣數據加載時(shí),IP核通過(guò)將數據分段成等分的幾部分,用于向量相乘。由于矩陣A存儲帶寬窄需要4步寄存(由Blocks決定),在第3個(gè)周期時(shí)才加載數據B用于計算,送到一個(gè)FIFO中存儲;在第6個(gè)時(shí)鐘周期時(shí)加載矩陣A分段的第二部分進(jìn)行各自的第二部分計算,最后當計算到第15個(gè)周期時(shí),才可通過(guò)浮點(diǎn)相加,計算出矩陣C的第一個(gè)值,之后計算出矩陣C的其他值C11。從上述結構可見(jiàn),在分段相乘之后,采用先對一個(gè)FIFO進(jìn)行存儲,存滿(mǎn)后再對下一個(gè)數據FIFO進(jìn)行存儲,造成時(shí)間上浪費過(guò)多。

2.2 設計改進(jìn)

鑒于上述缺陷,在輸入A、B矩陣的存儲方式上,進(jìn)行串行輸入到并行輸入的改進(jìn),使得兩個(gè)矩陣能同步輸入到浮點(diǎn)乘加模塊。在數據加載方式上,將A矩陣用3個(gè)周期加載完畢,再處理相乘運算;將分段相乘結果進(jìn)行直接存儲相加,獲得C矩陣的第一個(gè)值,縮減運算時(shí)間。設計的改進(jìn)框圖如圖1所示。

基于A(yíng)ltera浮點(diǎn)IP核實(shí)現浮點(diǎn)矩陣相乘運算的改進(jìn)設計

將A、B矩陣數據加載模塊設計成同步加載的方式,即在loadaa為高電平時(shí),對A的第一組數據進(jìn)行初始化,加載到雙口RAM模塊存儲;在loadbb為高電平時(shí),加載B矩陣的數據,也進(jìn)行雙口RAM存儲。然后依據ROM存儲的地址信號表,在控制模塊的控制下輸出A、B矩陣地址相對應的數據,進(jìn)行浮點(diǎn)乘加運算,之后串行緩存,并行輸出到浮點(diǎn)相加模塊,進(jìn)行輸出。計算時(shí)序如圖2所示。

基于A(yíng)ltera浮點(diǎn)IP核實(shí)現浮點(diǎn)矩陣相乘運算的改進(jìn)設計

在時(shí)序上要求初始化加載A矩陣的第一行數據A1、A2、A3之后,加載B矩陣的第一列數據,當分段E1加載后立即進(jìn)行分段第一組數據相乘A1×E1。以此類(lèi)推,當加載A的第二行數據時(shí),即可立即與B矩陣的第一列數據相乘??傮w而言,只需要在ROM模塊中存儲一定的地址信號,即可使浮點(diǎn)乘加模塊的輸入端具有并行連貫的數據輸入,縮短了運算時(shí)間。

3 浮點(diǎn)矩陣相乘實(shí)現

3.1 模塊總體實(shí)現

按照上述改進(jìn)方案,ROM地址表在控制模塊的控制下產(chǎn)生一組地址信號控制雙口RAM組進(jìn)行并行輸出,保證了浮點(diǎn)乘加模塊計算的準確性。其中控制模塊為設計的關(guān)鍵部分,用于產(chǎn)生所有模塊的控制信號,實(shí)現同步計算。分為a_cntrl、b_cntrl、cache、outcntrl四部分控制信號以及一路計數信號用于ROM地址查詢(xún),內部由一個(gè)狀態(tài)機和邏輯單元組成,狀態(tài)機用于產(chǎn)生矩陣A、B的read開(kāi)始、latch鎖存、地址疊加信號的轉換??刂颇K的時(shí)序仿真如圖3所示。

圖3在全局同步信號時(shí)鐘sysclk、復位reset、使能enable的作用下,當calcmatrix信號為‘1’時(shí),開(kāi)始計算并生成輸出控制信號。其中a_cntrl部分用于控制矩陣A數據加載模塊,主要包含地址信號readaa和鎖存信號latchaa,來(lái)一個(gè)鎖存高電平則存儲A矩陣數據readaa;b_cntrl部分則對應于矩陣B的控制,輸入B矩陣數據readbb;cache部分用于控制數據緩存部分串行輸入并行輸出,包含著(zhù)相應的讀地址信號cacherdadd、寫(xiě)地址信號cachewradd、cache選擇信號cachemesel,三者同步控制并行輸出;outcntrl部分是整個(gè)系統的輸出控制部分,在準備信號ready之后,出現outvalid高電平,表示輸出數據有效,同時(shí)完成信號done為低電平。為使矩陣A、B數據能同時(shí)加載到浮點(diǎn)乘加模塊上,需要使一個(gè)readaa值對應于readbb的columnsbb個(gè)數據。在本設計中使用的是A9×16數據與B16×8數據進(jìn)行計算,生成的outvalid有9個(gè)脈沖,每個(gè)脈沖包含8個(gè)矩陣輸出數據。

對于A(yíng)、B矩陣的數據加載,采用的是串行輸入并行輸出的控制器,由移位寄存器組成,當計數器計數到端口輸出值時(shí)(如端口并行輸出8個(gè)數則計數到8),并行輸出數據。

浮點(diǎn)乘加模塊采用并行相乘、并行相加的方式。由于考慮到精度問(wèn)題,采用浮點(diǎn)位數轉換,將32 bit的輸入數據進(jìn)行浮點(diǎn)擴展為42 bit,再進(jìn)行乘加運算,最后再將42 bit數據轉換為32 bit數據。采用三級流水線(xiàn)的方式,進(jìn)行并行乘加運算,提高設計系統性能。

在雙口RAM組的實(shí)現上,是將一組simple dualport ram[3]并列成一個(gè)RAM組。輸入由矩陣A、B的數據信號和ROM輸出的地址信號組成;輸出就是一路矩陣A數據和一路矩陣B數據,數據深度與vectorsize等同。其中每一個(gè)RAM的深度為rowsaa×columnsbb/vectorsize,保證數據的可重用性,同時(shí)相對應的ROM中存儲的地址信號分別為:

A:1 2 1 2 3 3 1 2 3 4 4 4 1 2 3 4 5 5 5 5 1 2 3 4 5 6 6 6 6 6 ……

B:1 1 2 2 1 2 3 3 3 1 2 3 4 4 4 4 1 2 3 4 5 5 5 5 5 1 2 3 4 5 ……

以此類(lèi)推即可得到相應的地址信號查找表。

在數據緩存模塊的設計上也采用串行輸入并行輸出的方式。使用移位寄存器的方式實(shí)現,在并行浮點(diǎn)相加部分類(lèi)似于上述的并行乘加[4]計算,采用多級流水線(xiàn)并行相加的方式完成。

塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>