Zynqnet(六) fpga_top解析(二)

本文深入解析Zynqnet FPGA_top模块,探讨输入特征在DRAM到IBRAM的读取顺序,以及如何调整权值排列以匹配Zynqnet的要求。通过循环遍历高度、宽度和通道,使用ImageCache预加载像素,ProcessingElement处理输入通道,实现卷积计算。详细步骤包括计算地址偏移、读取9个输入像素及对应权重,最后执行窗口计算。
摘要由CSDN通过智能技术生成

Zynqnet(五) fpga_top解析(一) https://blog.csdn.net/crazyeden/article/details/86654922

按照算法流程图,将会进行以下模块的计算,按照 y->x-> ch_in->ch_out->window_compute.

以下用保留主要演示代码:

// Y Loop
for (y = 0; y < layer.height; y++) {
    // X Loop    
    for (x = 0; x < layer.width; x++) {
    
    ImageCache::preloadPixelFromDRAM(SHARED_DRAM);
    //宽度方向上,每移动1,就会加载输入特征读入ch_in个,按照输入特征的通道,一个个读入。
        // Input Channel Loop
        for (ci = 0; ci < layer.channels_in; ci++) {
             
            ProcessingElement::processInputChannel(y, x, ci, layer.channels_out);
            
            }// end L_CH_IN. Pixel (Y,X) is finished.
      LOG("All CI, CO done for pixel(%d,%d)\n", (int)y, (int)x);

      // = Postprocess =

      LOG("Postprocess Pixel(%d,%d)\n", (int)y, (int)x);

      // Calculate Output Pixel Coordinates
      dimension_t y_out = (layer.stride == 2) ? (int)y / 2 : (int)y;
      dimension_t x_out = (layer.stride == 2) ? (int)x / 2 : (int)x;
        MemoryController::setupPixelWriteback(y_out, x_out);
        weightaddr_t ci_offset =
          WeightsCache::precalcInputOffset(layer.channels_in);
         L_POSTPROCESS:         
        for (co = 0; co < layer.channels_out; co++) {
        // Postprocess
        data_t processed = ProcessingElement::postprocess(co, ci_offset);

        // Writeback to DRAM
        MemoryController::writeBackOutputChannel(SHARED_DRAM, co, processed);
         
        GPoolCache::accumulateChannel(co, processed);
        }//L_POSTPROCESS
    }// L_X
}// L_Y
 if (layer.global_pool == true) {
    MemoryController::writeBackResult(SHARED_DRAM);
  }

从循环顺序,先是高度方向,然后是宽度方向上,X方向上每移动一次,都会调用一次 ImageCache::preloadPixelFromDRAM(SHARED_DRAM)函数,该函数就会加载一个像素位置&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值