直方图统计的FPGA实现

直方图统计是图像处理算法中最基本和常见的算法之一,主要原理就是将图像中各个灰度级的像素个数进行计算并统计,这在一些对灰度特性进行统计的算法中比较常见。虽然直方图统计在MATLAB或软件中耗时也很少,但是现在随着FPGA的普及,更加快速的实现一些图像处理算法成为了主流。
FPGA实现图像处理算法现在有几种主流的方式:1、HDL纯逻辑代码编写;2、基于System generator的模块搭建;3、Xilinx公司vivado套件中的HLS软件进行C/C++代码的转换。
而本文主要采用第一种方法,即采用Verilog代码形式直接实现直方图统计算法。


  • 方法1:倍频操作
  • 方法2:相邻数据判断

倍频操作

直方图统计给人的第一反应就是按照软件中方法,设置256个寄存器,然后对每个像素大小进行判断后再对对应的寄存器进行+1,而在FPGA中可以充分利用内部RAM的完成这一操作。而在这边我们选用的是伪双端口RAM。
在伪双端口RAM中,需要主要的是有两个设置选项:
这里写图片描述
1、Primitives Output Register
这一设置主要是在RAM的输出端口添加一个寄存器,对输出的数据进行打一拍缓存操作。如果勾选上这个,在高频时钟情况下,可以有效的保证输出信号满足建立和保持时间。而RAM本身默认读出数据延时为一拍,则RAM读出数据的总延时为2个时钟单位。
2、Operating Mode
主要包括了No Change , Write First和Read First,顾名思义,主要指的读出数据的先后顺序。在No Change模式下,写操作不改变输出端数据,在Write First模式下,如果对同一地址进行读写,则先写后读,在Read First模式下,如果对同一地址进行读写,则先读后写。

倍频方式的代码如下:(本例程中未勾选Primitives Output Register,且Operating Mode设置为Write First)

module his_count(
input rst_n,
input clk_150M,      //  150M
input LVAL,      //data的伴随使能信号
input [7:0]data  // 输入2K的图像,连续数据流
    );

reg LVAL_temp1,LVAL_temp2;    
reg [7:0]data_temp1,data_temp2;

reg [20:
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值