概述
在verilog中实现简单的图像处理操作。 该项目围绕一个中央图像处理模块 image_processing.v 展开,该模块可以包含在使用 verilator 的模拟环境中,也可以包含在 ice40 Ultraplus fpga 的 top.v 中。
因为它针对的是低端 fpga 设备(无论是价格还是功耗),例如 ice40 ultraplus。 它使用 1Mbit 的 ram 将图像存储到两个缓冲区中,即输入缓冲区和存储缓冲区。 图像在输入缓冲区中加载和读取,计算在存储缓冲区中完成。 这两个缓冲区可以交换。 大多数操作将在存储缓冲区中完成,如果对两个图像应用操作(例如 binary_add),则生成的图像将写入存储缓冲区。
图像存储在 .h 中(使用 gimp 完成)。
代码中操作
- 像素操作
- 3x3 矩阵卷积
- 在存储缓冲区上应用卷积,将结果写回
- 对输入缓冲区应用卷积,将结果与存储缓冲区相加
- 二元运算(输入运算缓冲区)
- 输入区和缓冲区转换
- 图像加载到输入区
- 从输入区读入图像
架构
有两种可能的操作模式:使用 verilator 进行模拟或在 ice40 fpga 上运行。
图像处理接口软件/image_processing.hpp 的两个实现通过 SPI 与 verlator 类或 ice40 fpga 通信来反映这种架构。
+---------------------+ +-----------------------+
| | | |
| | | |
| main.cpp +--------+ Image_processing.hpp |
| | | |
| | | |
+---------------------+ +---------+-------------+
^
|
+------------+-----------+
| |
+----------------+ +---------+-------------+ +-------+-----------+ +-----------+
| | | | | | | |
| Verilator | | IP_simulation.hpp | | IP_ice40.hpp | SPI | FPGA |
| Simulation +------+ IP_simulation.cpp | | IP_ice40.cpp +--------------+ Ice40 |
| obj_dir/ | | | | | | |
| | | | | | | |
+----------------+ +-----------------------+ +-------------------+ +-----------+
通讯
简述:与ice40的通讯方式
编译和运行
简述:编译后再validator上模拟和ice40上运行
源代码
详情参阅http://viadean.com/verilog_img.html
|