大家可以关注我刚开通的 公众号【FPGA开发笔记】,我每天都会更新分享发布自己在FPGA开发过程中的心得和收货,也会分享一些硬件电路、模拟IC设计、电子DIY、嵌入式软件相关的文章。
-
3D-LUT基本实现原理
LUT全拼为Look-Up-Table,既显示查找表。本质是一个RAM,每当输入一个信号就是输入一次地址进行查表,找出地址对应的内容并输出,对于显示器来说能起到颜色空间转换的作用。
3D LUT可以在立体色彩空间中描述所有颜色点的准确行为,所以可以处理显示的非线性属性,也可以准确地处理颜色突然的大幅变动等问题。
3D LUT适合用于精确的颜色校准工作,因为它们能够处理显示校准的问题,从简单的gamma值、颜色范围和追踪错误,到修正高级的非线性属性、颜色串扰、色相、饱和度、亮度等。
基于3D LUT的三维插值技术应用于将一组三维数据映射到另一组三维数据的领域,如彩色匹配等。包括三个步骤:打包,抽取和插值。
四面体插值的实现过程如下:
1) 对源RGB空间进行采样(通常是等间隔均匀采样),并将采样点对应的映射值按一定规则排列成查找表,这个步骤为打包过程,如图1图2所示。
2 )假设插值点位于采样空间中附近的八个采样点围成的立方体。知道一个立方体可以被分割成六个等体积的四面体。 判断插值点是否被包含于某四面体中的方法是计算该四面体中任意三个顶点与插值点构成的四个四面体体积之和是否与原四面体体积相等;若是,则选取该四面体
的四个顶点对应的映射值作插值计算, 此步即抽取过程。
图3 四面体插值
3)将三维查找表转换为四输入一维查找表的方法,并通过在均匀采样空间中定义局部坐标系完成其地址译码。
四个采样点抽取。采样点的抽取即要找出该四面体并取其四个顶点。对于任一颜色输入RGB ,我们用其MSB定位立方体,LSB定位四面体并求插值权重。用MSB找到包含插值点的立方体后局部坐标系(R,G,B)中完成抽取和插值两个步骤。
RGB信号通常分别用一个字节表示,取高三位作为MSB,低五位作为LSB,得到间隔 32 灰度级的均匀采样空间,共 9 × 9 × 9 即729个采样点。把 9×9×9的三维采样网格沿着B轴分解成9个平面网表,并对网表中的采样点进行分类编号。
地址译码。任意输入的一组RGB信号应该对四个一维查找表进行唯一地址译码,即由这组RGB信号确定的四面体顶点应位于编号分别为1、2、3、4 的网格节点处。 -
SLE功能与实现原理
SLE亮度均匀性原理与3D-LUT原理类似,通过将 -
SPI通信协议
SPI分为主、从两种模式,一个SPI通讯系统需要包含一个(且只能是一个)主设备,一个或多个从设备。SPI接口的读写操作,都是由主设备发起。当存在多个从设备时,通过各自的片选信号进行管理。
优点:支持全双工通信、通信简单、数据传输速率快;
(1)SPI物理层
SPI以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,这四根线分别是MISO、MOSI、SCLK、CS。示意图如图4所示,功能如表1所示。
图4 SPI主从传输示意图
表1 管脚功能
MISO 主设备数据输入,从设备数据输出
MOSI 主设备数据输出,从设备数据输入
SCLK 时钟信号,由主设备输出
CS 片选信号,由主设备控制
CS:用来控制芯片是否被选中的,只有片选信号为预先规定的使能信号时(一般默认为低电位),对此芯片的操作才有效,允许在同一总线上连接多个SPI设备。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当主设备和哪一个从设备通信时将需要将从设备对应的片选引脚电平拉低。具体片选示意图如图5所示。
图5 主设备与多个从设备通信示意图
MISO/MOSI/SCLK:通讯是通过数据交换完成的, SPI是串行通讯协议,也就是说数据是一位一位的传输的。SCLK提供时钟脉冲,MISO,MOSI则基于此脉冲完成数据传输。数据输出通过MOSI线,数据在时钟上升沿或下降沿时采样,同时也会有返回数据用于接受。完成一位数据传输,输入也使用同样原理。在至少8次时钟信号的改变(上沿和下沿为一次),完成8位数据的传输。
(2)SPI通信模式
CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时;
CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时;
CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿;
CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿。
在高电平有效状态时,第一边沿为上升沿,第二边沿为下降沿;在低电平有效状态时,第一边沿为下降沿,第二边沿为上升沿。
(3)巨鲨ARM与FPGA通信
ARM与FPGA每帧数据依次包含:寄存器地址(3字节)、 – 首地址字节为0x08
命令(1字节)、数据长度(1字节)、数据(n字节)、校验(1字节);
ARM读FPGA寄存器数据时,数据与校验由FPGA发出;ARM校验出错时,重新读取数据;
ARM向FPGA寄存器写数据时,数据与校验由ARM发出;FPGA校验出错时,命令不执行;
数据字节数 = 数据长度;
校验字节 = 数据0+数据1+…+数据n