zynqNet整体思路框架
生活随笔
收集整理的這篇文章主要介紹了
zynqNet整体思路框架
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
zynqNet整體思路框架
- ZynqNet CNN Accelerator: Schedule
- 分析FPGA端頂層函數
- P_TOP_SETUP
- P_setLayerConfigs
- 算法
ZynqNet CNN Accelerator: Schedule
分析FPGA端頂層函數
首先CPU端會通過AXI_Lite總線將一層網絡的參數傳輸到FPGA的PL端進行硬件加速計算,接下來將詳細進行分析
首先關注HLS端的頂層函數,這些參數是用來生成IPcore的接口,需要使用相應的#pragma語法進行限定
這里放一篇關于如何對頂層函數接口進行設置的文章
P_TOP_SETUP
P_TOP_SETUP : {// Setup Memory ControllerMemoryController::setup(SHARED_DRAM, weights_offset, input_offset);// Setup Global Pooling Cache// if (layer.pool == POOL_GLOBAL) GPoolCache::reset(); -> in loop. }用于設置weight和data的地址偏移量,將頂層函數的weights_offset和input_offset寫入以下兩個全局變量
unsigned int MemoryController::dram_weights_offset; unsigned int MemoryController::dram_data_offset;P_setLayerConfigs
P_layer_setup : { P_setLayerConfigs : {ImageCache::setLayerConfig(layer);WeightsCache::setLayerConfig(layer, num_weights);MemoryController::setLayerConfig(layer);ProcessingElement::setLayerConfig(layer); }LOG_LEVEL_DECR;// Load Weights from DRAMWeightsCache::loadFromDRAM(SHARED_DRAM);// Preload Row 0 + Pixel (1,0)MemoryController::setPixelLoadRow(0);ImageCache::preloadRowFromDRAM(SHARED_DRAM);MemoryController::setPixelLoadRow(1);ImageCache::preloadPixelFromDRAM(SHARED_DRAM); }注意ImageCache::setLayerConfig函數里兩個變量的設置,為什么要這樣設計呢?這兩個變量與地址計算相關
line_width = ch_in * width_in; loads_left = line_width * height_in;以第一層網絡為例,width=256,height=256,ch=3
那么line_width=3*256,loads_left=256,
接下來看preloadRowFromDRAM函數,意思是從DRAM中,每個像素都取出3通道,這256個3個通道組成新的1行數據。如上圖所示:
再來看被調用的preloadPixelFromDRAM函數,從SHARED_DRAM中取數據,并存入IBRAM
為什么設置NUM_IMG_CACHE_LINES=4
算法
總結
以上是生活随笔為你收集整理的zynqNet整体思路框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HLS Pragma(3)config_
- 下一篇: 常用HLS优化指令总结