?
鏡像是云服務(wù)器實(shí)例運(yùn)行環(huán)境的模板,包括操作系統(tǒng)和預(yù)裝軟件等配置。百度云為每個(gè)FPGA實(shí)例默認(rèn)提供了專屬公共鏡像,用戶可以按需選擇適合的鏡像類型。
?
概述
基于百度云自研的FPGA加速卡,提供了一套FPGA標(biāo)準(zhǔn)開發(fā)環(huán)境。您可以使用百度云提供的鏡像工具包,在FPGA上開發(fā)與調(diào)試自己的業(yè)務(wù)功能,或者將已有的功能模塊移植到FPGA加速卡上。
百度自研FPGA加速卡使用Xilinx 20nm KU115 FPGA。FPGA板卡帶有4通道DDR4,每個(gè)通道72bit,帶ECC,容量2GB,速率2400Mhz。FPGA通過PCIE 3.0x8和CPU相連。板卡的結(jié)構(gòu)框圖如下所示:
?
基于上面的FPGA板卡,百度還提供的FPGA標(biāo)準(zhǔn)開發(fā)環(huán)境,其系統(tǒng)結(jié)構(gòu)如下圖:
?
FPGA標(biāo)準(zhǔn)開發(fā)環(huán)境具有極大的靈活性:
您可以自行研發(fā)FPGA中動(dòng)態(tài)部分的邏輯,包括KU115芯片的絕大部分資源,以及4個(gè)DDR4通道,讓FPGA電路完成定制化的功能,
百度云提供驅(qū)動(dòng)和應(yīng)用參考設(shè)計(jì),您只需修改軟件側(cè)的驅(qū)動(dòng)和應(yīng)用程序,調(diào)用FPGA完成特定的功能。
直接使用百度提供的工具包更換FPGA中動(dòng)態(tài)部分的邏輯。
FPGA標(biāo)準(zhǔn)開發(fā)環(huán)境提供虛擬jtag工具,您可以使用vivado工具對(duì)FPGA進(jìn)行調(diào)試。
FPGA 標(biāo)準(zhǔn)開發(fā)環(huán)境操作包括兩部分:
FPGA軟件驅(qū)動(dòng)開發(fā)
以運(yùn)行支持PE進(jìn)行簡單浮點(diǎn)向量加功能的示例程序?yàn)槔?br />
1. 編譯驅(qū)動(dòng),提供編譯示例程序。
2. 運(yùn)行示例程序。
FPGA邏輯開發(fā)
使用工具包開發(fā)和調(diào)試用戶邏輯:
1. 使用Baidu_HW_design_toolkit編譯實(shí)現(xiàn)您的動(dòng)態(tài)邏輯。
2. 使用bin_pr_tools更換您的動(dòng)態(tài)邏輯。
3. 使用Vivado對(duì)您的動(dòng)態(tài)邏輯進(jìn)行調(diào)試。
FPGA軟件驅(qū)動(dòng)開發(fā)
編譯驅(qū)動(dòng)
修改driver/Makefile中的KERNELDIR變量,使之指向當(dāng)前內(nèi)核的編譯目錄,一般為/lib/modules/$(uname -r)/build目錄或/usr/src/kernels/$(uname -r)。
?
執(zhí)行make,如果編譯成功,當(dāng)前目錄下會(huì)生成xdma_xvc.ko驅(qū)動(dòng)文件,如下圖所示:
?
執(zhí)行insmod xdma_xvc.ko,裝載上一步生成的驅(qū)動(dòng)文件,在/dev目錄下會(huì)出現(xiàn)如下設(shè)備文件/dev/xil_xvc/cfg_ioc0。
?
編譯示例程序
進(jìn)入sample目錄,執(zhí)行make。如果編譯成功,當(dāng)前目錄下生成sample、sample_user_irq等可執(zhí)行文件,參見下圖:
?
運(yùn)行示例程序
執(zhí)行./sample,輸出如下結(jié)果,PE正確地執(zhí)行了浮點(diǎn)向量加功能。sample使用輪詢寄存器方式檢查命令結(jié)果是否完成。
執(zhí)行./sample_user_irq,輸出如下結(jié)果,PE正確地執(zhí)行了浮點(diǎn)向量加功能。sample_user_irq使用中斷方式檢查命令結(jié)果是否完成。
關(guān)鍵代碼示例
FPGA邏輯開發(fā)
使用Baidu_HW_design_toolkit編譯實(shí)現(xiàn)您的動(dòng)態(tài)邏輯
“Baidu_HW_design_toolkit”工具包,幫助將您開發(fā)的動(dòng)態(tài)邏輯實(shí)現(xiàn)在FPGA中。
“Baidu_HW_design_toolkit”提供FPGA硬件邏輯所需的環(huán)境,只需將自己邏輯所需的相關(guān)的文件(如rtl代碼,ip核,xdc約束等)放入指定的路徑,然后執(zhí)行腳本,即可生成用于燒寫FPGA云服務(wù)器的邏輯鏡像文件。
“Baidu_HW_design_toolkit”包含了三個(gè)子文件夾,build,common_files和usr_files.
usr_files存放用戶的工程設(shè)計(jì)文件。
common_files存放FPGA云服務(wù)鏡像工程的一些通用設(shè)計(jì)。如靜態(tài)邏輯的dcp,ddr約束等。通常情況下,不建議您修改common_files目錄中的內(nèi)容。
build存放制作FPGA云服務(wù)器邏輯鏡像所要執(zhí)行的腳本,如果您具備豐富的FPGA開發(fā)經(jīng)驗(yàn),可以根據(jù)自己的需要修改腳本。例如,用更加適合的布局布線策略管理您的工程實(shí)現(xiàn)。
“Baidu_HW_design_toolkit”提供了兩種流程制作FPGA云服務(wù)邏輯鏡像,需要準(zhǔn)備不同的設(shè)計(jì)文件:
Non_IPI流程
這種方式比較類似傳統(tǒng)的FPGA工程實(shí)現(xiàn)方式,您需要準(zhǔn)備好動(dòng)態(tài)部分邏輯(也就是rp_bd_wrapper.rp_bd_i)的設(shè)計(jì)文件放入usr_files指定的目錄,然后執(zhí)行build目錄下的run_nonIPI.tcl腳本。
IPI流程
這種方式采用vivado IP Integrator制作云服務(wù)邏輯鏡像的動(dòng)態(tài)部分邏輯(也就是rp_bd_wrapper.rp_bd_i)。你需要準(zhǔn)備好IPI的設(shè)計(jì)文件放入usr_files和build下指定的目錄,然后執(zhí)行build目錄下的run_IPI.tcl腳本。
使用bin_pr_tools更換您的動(dòng)態(tài)邏輯
“bin_pr_tools”工具包,是更換FPGA動(dòng)態(tài)部分邏輯的必要工具。在使用該工具包前,您需要確保FPGA的驅(qū)動(dòng)程序已經(jīng)加載。然后運(yùn)行bin_pr_tools目錄下的”load_pr_bin.sh”腳本即可更換您的動(dòng)態(tài)部分邏輯。
$sudo sh load_pr_bin.sh base ./ver2/ver2_pr_region_partial.bin
OK set decouple! ...
OK loading clear bin! ...
OK loading pr region bin! ...
OK unset decouple! ...
OK soft reset rp_bd ...
successfully load custom bitstream!
partial clear bin: ./base/base_pr_region_partial_clear.bin
partial bin: ./ver2/ver2_pr_region_partial.bin
found clear bin base_pr_region_partial_clear.bin in the current partial bin file’s directory
copy bin base_pr_region_partial_clear.bin into ‘last_clear_bin’ directory
注意:由于更換動(dòng)態(tài)部分邏輯時(shí),需要寫入當(dāng)前動(dòng)態(tài)邏輯對(duì)應(yīng)的clear bin,您務(wù)必保存好clear bin文件,以便下次更新動(dòng)態(tài)邏輯時(shí)使用。同時(shí)bin_pr_tools工具包也會(huì)保存新動(dòng)態(tài)邏輯對(duì)應(yīng)的clear bin文件。
使用Vivado對(duì)您的動(dòng)態(tài)邏輯進(jìn)行調(diào)試
百度云提供工具包類似日常使用vivado操作,對(duì)您的動(dòng)態(tài)邏輯進(jìn)行調(diào)試。
在使用該工具包前,您需要確保FPGA的驅(qū)動(dòng)程序已經(jīng)加載。
1. 打開xvc_server工具包,運(yùn)行xvc_pcie服務(wù)。
2. 使用vivado工具,僅需幾步就可以通過虛擬jtag識(shí)別FPGA設(shè)備。
3. 選擇動(dòng)態(tài)邏輯對(duì)應(yīng)的probe文件,類似使用Vivado工具,對(duì)工程中的ila和vio進(jìn)行功能調(diào)試和信號(hào)查看。
?
FPGA示例工程說明
概述
為方便您掌握FPGA云服務(wù)器的使用流程,快速創(chuàng)建自己定制的加速卡邏輯,百度云提供一個(gè)demo工程作為示例。
該demo工程支持了基于FPGA云服務(wù)器開發(fā)的幾個(gè)基礎(chǔ)功能,主要包括:
工程分成靜態(tài)和動(dòng)態(tài)兩部分邏輯,支持基于pcie總線的partial reconfiguration開發(fā)及配置流程。
靜態(tài)邏輯支持pcie-3.0-8x xdma,并提供了配套的driver。用戶不能修改也無需關(guān)注靜態(tài)部分的邏輯。
動(dòng)態(tài)邏輯為用戶自定制部分,用戶需基于當(dāng)前提供的接口實(shí)現(xiàn)所需功能邏輯。demo工程中的動(dòng)態(tài)邏輯是一個(gè)element-wise向量加法模塊,基于HLS開發(fā)。接口包括:
1. 一個(gè)axi slave(256bit)和一個(gè)axi lite slave(32bit)接口,可分別用于傳輸邏輯所需的數(shù)據(jù)和控制命令。
2. 4個(gè)axi master(512bit),用于連接DDR MIG控制器(可選)。
3. 中斷、時(shí)鐘。
支持基于pcie總線的ila debug,可在云服務(wù)器上的vivado中抓取信號(hào)波形進(jìn)行調(diào)試。
您可根據(jù)此demo工程的結(jié)構(gòu)及提供的配套腳本了解fpga云服務(wù)器的開發(fā)流程,并以該工程為基礎(chǔ),修改其中的動(dòng)態(tài)邏輯,實(shí)現(xiàn)所需的其他功能。
工程結(jié)構(gòu)
demo工程主要包含了兩個(gè)部分,分別是static_bd_wrapper和rp_bd_wrapper。
其中static_bd_wrapper屬于工程的靜態(tài)部分,提供了pcie xdma,基于pcie的debug模塊,flash控制器等。靜態(tài)部分的邏輯不暴露給用戶,用戶不能修改也不用關(guān)心靜態(tài)部分的邏輯。
rp_bd_wrapper則是動(dòng)態(tài)邏輯,這部分邏輯中有rp_bd和其他一些組件。其中只有rp_bd是用戶可以修改的內(nèi)容。其他組件主要用于支持用戶利用虛擬jtag進(jìn)行調(diào)試或其他功能,這些組件不需要用戶關(guān)心,用戶不能修改。
rp_bd通過兩組AXI總線與static_bd_wrapper傳輸數(shù)據(jù),可以此為基礎(chǔ)實(shí)現(xiàn)您所需的功能。
demo工程的rp_bd結(jié)構(gòu)框圖如下:
?
模塊 說明
Block Ram ? rp_bd內(nèi)部有一個(gè)64KB的block ram用來存儲(chǔ)計(jì)算所用的數(shù)據(jù)和計(jì)算結(jié)果,這個(gè)block ram可同時(shí)被host和卡上的用戶邏輯訪問,這是通過rp_bd中的一個(gè)AXI Interconnect實(shí)現(xiàn)的。 ?
AXI Interconnect ? AXI Interconnect用于協(xié)調(diào)兩個(gè)AXI master訪問rp_bd中的Block Ram;static_bd內(nèi)的xdma輸出的AXI4連接到AXI Interconnect的一個(gè)slave端口,demo工程提供的drive支持host通過dma訪問這個(gè)block ram;PE內(nèi)的Vector Add模塊輸出的AXI4連接到AXI Interconnect的另一個(gè)端口,使得用戶邏輯也可以訪問這個(gè)block ram。 ?
CU ? 命令處理單元,static_bd輸出的AXI-lite接口連接到PE中的CU模塊,CU模塊解析從AXI lite收到的命令,并產(chǎn)生符合ap_ctrl總線的請(qǐng)求信號(hào)與Vector Add模塊相連。ap_ctrl是通過HLS綜合出的邏輯模塊采用的一種標(biāo)準(zhǔn)狀態(tài)控制總線。有關(guān)其詳細(xì)介紹可以參考Xilinx ug902文檔。 ?
Vector Add ? 計(jì)算處理單元,Vector Add模塊完成向量加法運(yùn)算,他是使用HLS高級(jí)綜合工具開發(fā)的,它的控制輸入為一組HLS模塊使用的ap_ctrl信號(hào);他使用AXI總線協(xié)議將Block Ram中的數(shù)據(jù)讀出,進(jìn)行加法運(yùn)算后,將數(shù)據(jù)寫回Block Ram中。
PE工作流程
1. 軟件發(fā)起dma_to_dev將輸入向量A,B拷貝至dev;A,B的長度必須8個(gè)float數(shù)據(jù)對(duì)齊。(單精度浮點(diǎn)數(shù))
2. 軟件通過配置寄存器發(fā)起PE計(jì)算指令,然后等待PE計(jì)算完成。
3. PE計(jì)算完成后,通過中斷通知CPU上的軟件驅(qū)動(dòng)程序。
4. 軟件發(fā)起dma_from_dev將輸出向量C拷貝至host。(單精度浮點(diǎn)數(shù))
評(píng)論
查看更多