FPGA series # gamma模块总结文档

虽说回头再看的时候这东西很基础,但也是一开始花了些时间一点点啃下来的。勿忘初心。

一、引言

1.编写目的:

总结gamma矫正模块的总体设计、详细设计及仿真测试、后期优化。

2.项目背景:

编写gamma矫正模块。

3.定 义:

  1. gamma校正: 大多数CRT显示器的变换函数产生的亮度值正比于信号幅度的某种能量(称为gamma)。因此高亮度的范围被扩展了,而低亮度的范围被压缩了。在发射之前对视频信号进行gamma校准,显示器的亮度输出就大体上是线性的了,并且发射过程中产生的噪声也会受到抑制。
    目的: 为图像进行gamma编码的目的是用来对人类视觉的特性进行补偿,从而根据人类对光线或黑白的感知,最大化地利用表示黑白的数据位或带宽。
    原理: 归一化、预补偿、反归一化
    算法: 假设图像中有一个像素A,值是150,那么对这个像素进行校正须执行如下步骤。
    归一化: 将像素值转换为 0~1 之间的实数。 算法如下: ( i + 0. 5)/256 。对于像素 A 而言 ,其对应的归一化值为 0. 587891。
    预补偿: 根据公式L_in=〖L_org〗^(1/gamma),求出像素归一化后的数据以 1/gamma 为指数的对应值。若 gamma 值为 2. 2,则 1/gamma 为 0. 45454,对归一化后的 A 值进行预补偿的结果就 是 0. 587891^0. 454545 = 0.785479。
    反归一化: 将经过预补偿的实数值反变换为 0 ~ 255 之间的整数值。具体算法为: f*256 - 0. 5 。续前例,将 A 的预补偿结果0.785479 代入上式,得到 A 预补偿后对应的像素值为 201 ,这个 201 就是最后送 入显示器的数据。
  2. 图像数据 : 用数值表示的各像素的灰度值的集合。
  3. 灰 度 值 : 指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0,故 黑白图片也称为灰度图像。灰度也可认为是亮度,简单的说就是色彩的深浅程 度,R、G、B值均相等。
  4. 参考资料: [1] PG058 Block Memory Generator v8.4 LogiCORE IP Product Guide.
         [2] UG908 Vivado Design Suite User Guide Programming and Debugging.
         [3] PG021 AXI DMA v7.1 LogiCORE IP Product Guide.

二、总体设计

1.需求概述:

从BRAM数据源读取图像数据,进行gamma矫正,然后存入RAM中。

2.模块结构:

0
  后期将RAM2接口改为AXIS型,只取RAM2_gamma模块,将其放入整个工程中。修改后的模块结构应为:
(接口对应工程中的前后两个模块分别为:alinx_ov5640_0,System_i)
1

3.Schematic:

2

4.模块描述

  • Top
    功能:顶层模块,调用下面三个模块,加一个ila的IP核以实时仿真时探取信号
    输入:clk,rst

  • Module1
    功能:存放图像数据源,导入.coe文件
    输入:clk,rst_b 输出:dout_b

  • Module2
    功能:存放matlab计算结果,调取像素值相对应的gamma矫正结果
    输入:clk,rst_g,din_g 输出:dout_g

  • Module3
    功能:存放矫正后的数据
    输入:clk,rst_g,dina_a 输出:doutb_a

  • 后期将Module2模块改为AXIS接口,则该模块应为:
    RAM_gamma
    功能:存放matlab计算结果,调取像素值相对应的gamma矫正结果
    输入:clk,resetn, 输出:
    s_axis_gamma_rdata, m_axis_gamma_tdata,
    s_axis_gamma_rvalid, m_axis_gamma_tvalid,
    m_axis_gamma_rready, s_axis_gamma_tready,
    s_axis_gamma_rlast, m_axis_gamma_tlast,
    s_axis_gamma_ruser, m_axis_gamma_tuser,
    s_axis_gamma_rkeep m_axis_gamma_tkeep

三、详细设计

1.代码语言:

verilogHDL,c语言

2.运行环境:

Vivado 2017.4,modelsim,ALINX黑金AX7020开发板,matlab 2014

3.各模块设计:

3

  • RAM1:存放图像数据;
  • RAM2:存放0~255之间整数gamma矫正的结果;
  • RAM3:存放图像数据gamma矫正的结果
    ① 数据源位宽:RAM1输入输出数据位宽:8位; RAM2输入输出数据位宽:8位;RAM3输入输出数据位宽:8位;
    ② 数据源深度:RAM1深度:128128(图像数据源:128124);RAM2深度:256;RAM3深度:2^14
    ③ 时钟同步
    ④ 图像矩阵作为数据源读入顺序:从上到下
      后期将RAM2模块改为AXIS接口直接加到工程里,端口为:data,keep,valid,ready,last,user。参考datasheet,如图:
    4
    由上图分析,
  • aclk为时钟线,所有信号都在aclk上升沿被采样;
  • data为数据线,主机发送,从机接收。
  • keep为主机数据有效指示,为高代表对应的字节为有效字节,否则表示发送的为空字节。
  • valid为主机数据同步线,为高表示主机准备好发送数据;
  • ready为从机数据同步线,为高表示从机准备好接收数据;这两根线完成了主机与从机的握手信号,一旦二者都变高有效,数据传输开始。
  • last为主机最后一个字指示,下一clk数据将无效,TVAL
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值