介绍:该部分是作者对自己实现的卷积加速部分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)
表示当前层的输入