同步发布于个人博客
简要说明
使用Verilog实现核大小为3*3的简单卷积。
计算作用的图像来自MNIST数据集(自行查阅),图像大小为28*28,像素为8bit,长这样:
图像的像素点很少可以直接存入BRAM中:图像按行顺序展开为一行784个的8bit数,然后用coe文件存入Vivado提供的ROM中。卷积计算的结果为26*26大小的数组,按行展开存入RAM中。
注:因为只是简单尝试实现卷积,没有过于考虑速度和资源消耗
模块设计
rom
用于存储图像,使用BRAM IP核
在Vivado中操作:
- 选择类型为单端口ROM
- 设置数据位宽和地址深度,设置总是使能
- 注意:不使用输出寄存器。输出寄存器会导致时许偏移,详细自行查阅
- 设置coe文件初始化ROM
-
打包一下
`timescale 1ns / 1ps module rom ( input in_clk, input [9:0] in_rom_addr, output [7:0] out_rom_data ); rom_gen_0 u_rom1 ( .clka(in_clk), .addra(in_rom_addr), .douta(out_rom_data) ); endmodule
image_read
从存储图像的ROM中读取用于卷积计算的9个像素点
端口配