資源描述:
《Board從入門到精通系列(八).doc》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在應用文檔-天天文庫。
1、Board從入門到精通系列(八) 終于到了HLS部分。HLS是HighLevelSynthesis的縮寫,是一種可以將高級程序設計語言C,C++,SystemC綜合為RTL代碼的工具。生產(chǎn)力的發(fā)展推動了設計模式。在電子技術初級階段,人們關注的是RLC電路,通過建立微分方程求解電路響應。門級電路是對RLC的初步封裝,人們進而采用布爾代數(shù)、卡諾圖進行電路設計與分析。之后隨著集成電路進一步發(fā)展,門電路可以集成為寄存器、觸發(fā)器、ROM等宏單元,設計工具也變得更為高度模塊化。算法級別的電路設計,則一直沒有特別好的工具,直到出現(xiàn)了HLS。HLS可
2、以將算法直接映射為RTL電路,實現(xiàn)了高層次綜合。從這個層面上講,SystemGenerator也是一種高層次綜合工具,因為它將matlab算法描述綜合為RTL代碼。如果今后機器學習、人工智能獲得重大突破,或許會出現(xiàn)將人類自然語言綜合為RTL代碼的工具,不知我們是否能見證它的面世。HLS的學習資源可以參考。本節(jié)給出較為通用的矩陣與向量相乘例子,從全串行到全并行進行了一步步優(yōu)化實現(xiàn)。矩陣實驗室Matlab是比較常用的數(shù)學仿真軟件。本博主用的是R2013a版本。為了驗證矩陣向量相乘正確性,我們先用matlab生成測試矩陣和向量,并利用matl
3、ab計算結(jié)果。代碼如下:[plain] clear; clc; closeall; N=5; A=randi([1,100],N,N); b=randi(100,N,1); c=A*b; KKK_SaveToCHeaderFile(A,’A.h’); KKK_SaveToCHeaderFile(b,’b.h’); KKK_SaveToCHeaderFile(c,’c.h’); 這里給出的是A*b=c的簡單例子,A為5X5矩陣,b為5X1向量,結(jié)果c為5X1向量。其中KKK_SaveToCHeaderFile
4、()是將矩陣、向量保存為C語言數(shù)組的子函數(shù),定義如下:[plain] funcTIon[]=KKK_SaveToCHeaderFile(var,fn) fid=fopen(fn,’w’); var=reshape(var.’,1,[]); fprintf(fid,’%d,r’,var); fclose(fid); 給出測試例程中,A如下:[plain] 8210161566 912898434 1355969285 9296498094 6497819668 b如下:[plain]
5、 76 75 40 66 18 得到的c如下:980015846165552312422939運行matlab腳本之后,生成三個文件:A.h,b.h,c.h,這些是作為HLS程序的輸入數(shù)據(jù)和參考結(jié)果。下面我們用HLS工具實現(xiàn)上述矩陣X向量的功能。第一步,運行VivadoHLS?! ∵x擇第一項,CreateNewProject,建立新工程MatrixMulTIply 輸入路徑和工程名之后,點Next?! √砑禹攲幽K文件。這里我們TopFuncTIons輸入MatrixMulTIply,然后NewFile...,新建一個.c文
6、件,命名為MatrixMultiply.c(后綴不要省略!),然后點Next添加頂層文件測試腳本。這里New一個文件TestMatrixMultiply.c(后綴不要省略?。?,然后Add前面用Matlab生成的A.h,b.h,c.h,如下圖所示: 點Next,選擇解決方案配置,如下圖所示 其余保持默認,只修改PartSelection部分,改為ZedBoard。改完后,F(xiàn)inish即可進入主界面,如下圖所示 可以看出,VivadoHLS界面很像很像XilinxSDK,不同的是前者負責PL部分開發(fā),后者負責PS軟件編寫,定位不同決定
7、了二者今后的路必然走向分歧。將MatrixMultiply.c內(nèi)容改為:[cpp] typedefintdata_type; #defineN5 voidMatrixMultiply(data_typeAA[N*N],data_typebb[N],data_typecc[N]) { inti,j; for(i=0;i