请选择 进入手机版 | 继续访问电脑版
搜索
查看: 504|回复: 0

【分享】FPGA verilog做基于模板的图像处理的方法

[复制链接]
发表于 2017-1-24 10:27 | 显示全部楼层 |阅读模式
FPGA verilog做基于模板的图像处理的方法
首先,在如今CPU和GPU具有极强计算能力的情况下,为什么还要考虑用FPGA做图像处理呢?我觉得原因可能有:1,FPGA可以通过硬件接口直接连相机,从而实现实时在线处理。而基于CPU和GPU需要操作相机厂商依赖的SDK,比较难做到实时在线。2,FPGA的计算特点能够很好的匹配某些图像处理模式,处理性能比CPU和GPU更强(比如基于固定模板的图像处理,也称二维卷积。图像与一个固定大小和内容的模板进行卷积,每次操作只涉及到卷积模板覆盖的局部像素区域,如均值、高斯滤波等等)。也就是说选用哪种处理器,还得看具体的应用,不同的处理器适合不同的处理场合。

对于FPGA,我觉得,学会语法仅仅是入门,而要在FPGA的世界里自由的翱翔,必须熟练掌握另外两种核心的思想:流水线(pipeline)和状态机(state machine)。有了这两个强大的工具,往往才能高效、高性能的处理复杂的应用。这里FPGA做图像处理,就要用到pipeline的方式。
流水线的模式则是:第一组a,b,c,d完成step1的加法运算后进入step2,这个时候step1的寄存器已经空出来,第二组数据即可马上进入。第一组数据结果进入到step3的时候,第二组数据已经进入step2,而第三组数据则可以进入step1进行计算。这样原始数据可以源源不断连续进行输入,无需等待前一次的数据计算完成。
  1. <span style="font-size:14px;">module admul1 (
  2.     input [15:0] ia,
  3.     input [15:0] ib,
  4.     input [15:0] ic,
  5.     input [15:0] id,

  6.     output [31:0] of,


  7.     input clk,    // Clock
  8.     input rst  // Synchronousreset active high
  9. );

  10. reg [15:0] a,b,c,d;

  11. reg [16:0] ta1=0;
  12. reg [16:0] ta2=0;

  13. reg [31:0] f=0;

  14. assign of = f;

  15. always @(posedge clk ) begin
  16.     // clk1
  17.     a <= ia;
  18.     b <= ib;
  19.     c <= ic;
  20.     d <= id;

  21.     // clk2
  22.     ta1 <= a + b;
  23.     ta2 <= c + d;

  24.     // clk3
  25.     f <= ta1 * ta2;
  26. end

  27. endmodule</span>
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

facebook google plus twitter linkedin youku weibo rss
©2019 Microchip Corporation

小黑屋|手机版|Archiver|Tensilica技术社区

GMT+8, 2019-9-21 18:04 , Processed in 0.075273 second(s), 8 queries , MemCache On.

快速回复 返回顶部 返回列表