fpga基于shift ram的卷积实现

Hea ·
更新时间:2024-09-21
· 881 次阅读

verilog实现卷积运算

设输入矩阵为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周期。


作者:qq_40268672



fpga 卷积 ram

需要 登录 后方可回复, 如果你还没有账号请 注册新账号