Zynqnet(三)HLS_CODE解析

本文详细解析Zynqnet在FPGA上的实现,特别是HLS中的testbench部分。介绍了网络配置函数,包括网络初始化、添加层参数,以及静态局部变量的作用。文章还阐述了权重和输入输出地址的计算,并讨论了如何为FPGA分配内存,确保权值和中间计算结果的存储。此外,提到了输入图片的加载和缓存配置。
摘要由CSDN通过智能技术生成

介绍:该部分是作者对自己实现的卷积加速部分fpga_top函数进行测试的示例代码,在HLS中这称为testbench。

net_CPU = get_network_config();

该函数为网络模型的配置函数,看一下函数定义:

首先进行网络初始化,这里是默认构造函数进行初始化。最大层数为该网络的所有层数,论文中为27。论文中缓存的最多的权重的数目为2528800,这里应该是权值文件所有参数的数目。

network_t *net = new network_t(27, 2528800);

主要调用了addLayer()函数为之前初始化的Net的每层添加参数。

void addLayer(network_t *net, layer_t layer) 

输入:待配置网络的指针,某层(结构体)

作用:将某层的配置参数添加到网络中。

层名字 NAME   ,  输入特征的 W,   H,  输入输出特征的通道数 CI,  CO,kernel size K, padding P, stride S, relu R, 因为fire module的第二层是expand层,并且分为e 1*1, e 3*3, S1表示其是否为e 1*1, S2表示其是否为e 3*3, GP表示global pooling)

首先给出几个静态局部变量:

 static int current_output_addr = 0;
 static int current_input_addr = 0;
 static int current_weights_addr = 0;

补充知识:静态局部变量,1 位于全局数据区 2未赋值,编译器为自动初始化为0;即使函数返回,它的值也会保持不变。

对于每层需要记录以下几个重要参数,(有个输出缓存,专门来存放各个层的输出,同时这些输出又可以转化为输入)

1 static int current_input_addr(layer.mem_addr_input)

表示当前层的输入

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值