设输入矩阵为NixNi,卷积核大小为KxK,卷积步长为S,则可以选用长度为Ni,高度为K的shift_ram实现,具体如下。
记输入shift_ram的时间为clk0,则易知经过NixK个周期后shift_ram被充满,也即产生第一列有效输出X0,0,X1,0,X2,0X_{0,0},X_{1,0},X_{2,0}X0,0,X1,0,X2,0,再经过Nix(Ni-K+1)-1个周期,产生最后一列有效输出XNi−1,Ni−1,XNi−2,Ni−1,XNi−3,Ni−1X_{Ni-1,Ni-1},X_{Ni-2,Ni-1},X_{Ni-3,Ni-1}XNi−1,Ni−1,XNi−2,Ni−1,XNi−3,Ni−1,设数据读出延时为2+1个clk,计算卷积需要乘法1个周期,加法需要2个周期(每列相加,再把每列的和相加),则从输入第一个数据的读地址开始,需要经过NixK+(2+1)+(1+2)+K-1(需等待余下K-1列读出)个clk才会产生第一个卷积输出,经过NixK+(2+1)+(Ni-K+1)xNi-1+(1+2)个周期产生最后一个卷积输出,当然,这之间的输出并不都有效,应视步长S有选择的进行读取结果。
这种方式计算一个矩阵的大约需要O(Ni2)O(N_i^2)O(Ni2)个clk周期。