硬件加速模块需要四个时钟,分别为clk_l , clk_r , clk_c , clk_n 。
clk_l : 整个硬件加速模块为了最大化的节约时间成本而采用了类似处理器的流水线设计,具体上将每一层的每一个操作赋予一个时间片,每一个操作都会在这个时间片内完成,这个时间片的时长为clk_l的时钟周期,在整个硬件加速模块中最为重要。
clk_r : 硬件加速模块的每一层在每一次进行运算之前,都去先读取权重数据和上一层输入数据。事先我们采用bram来存储这些数据,因而读取数据要从bram中读取,读取bram的时钟信号为clk_r,在bram中读取出一个数据需要两个clk_r的时钟周期。
clk_c : 硬件加速模块的每一层涉及到多位数定点数乘法的运算需要调用dsp这个ip核,dsp处理数据的时钟信号为clk_c,dsp输出数据需要四个clk_c的时钟周期。
clk_n : clk_n为一般时钟信号。
4个时钟信号由ip核pll生成,例化代码如下:
- pro_pll pll(
- // Clock out ports
- .clk_out1(clk_l), // output clk_out1
- .clk_out2(clk_r), // output clk_out2
- .clk_out3(clk_c), // output clk_out3
- .clk_out4(clk_n), // output clk_out4
- // Status and control signals
- .resetn(rst_pll), // input resetn
- .locked(rst), // output locked
- // Clock in ports
- .clk_in1(clk)); // input clk_in1