1、简介与分析
TMDS编码之后的数据是10bit位宽的数据,需要将其转换为串行数据,serialize处理为数据流。
该部分的实现从输入输出角度分析,主要是四个信号:
(1)、Pclk 10bit输入数据的时钟域
(2)、Pclk_5x 串行输出数据的时钟域
(3)、paralell_data 由TMDS模块输入的10bit并行数据
(4)、serial_data_out 串行数据输出
该模块为:
2、OSERDESE2源语分析
该部分是SelectIO的知识点,所谓selectIO即IO接口及IO逻辑的简称。
DDR:double data rate 双倍数据速率
SDR:single data rate 单倍数据速率
165
7z030-ffg676中集成的FPGA是Kintex7,
7系列中的OSERDESE2是一个专用的并行数据到串行数据转换器,全称:Output Paralell-to-Serial Logic Resources。每个OSERDESE2模块都包含一个专用的数据串行处理器和一个三态控制器。数据与三态控制器都可以配置成SDR或者DDR模式。串行处理的数据宽度可达8位,8:1,级联的话可以达到10:1或者14:1两种串行比例(使用模块拓宽)。
框图:
可以看到整个模块分为两个部分:3-State与Data Paralell-to-Serial Convert,Data Paralell-to-Serial Convert接收的数据宽度在2~8之间,并行转串行,输入数据宽度肯定大于1噻!序列化数据通过OQ引脚输出。并行数据先被处理的是低位。数据并串转换器有两种模式:SDR与DDR模式。
整个模块使用两个时钟,CLk与CLKDIV,两者必须是同相位的时钟。
在使用之前必须先对模块进行复位。
除了数据的并串转换外,OSERDESES2模块还包含一个输入输出块三态控制信号的并串转换,三态转换器最多转换4bit的并行控制数据,what’smore,三态转换器不可以级联(cascaded)。
端口定义:
OQ:将数据输出到IO块的端口
OFB:数据输出反馈。
TQ:三态控制数据输出。
TFB:三态控制输出到组织块(FB)
SHIFTOUT1:连接到主控制器的级联输入
SHIFTOUT2:同上
CLK:高速时钟输入。
CLKDIV:低速数据时钟
D1 to D8:输入数据
TCE:三态时钟使能
OCE:输出数据时钟使能。
TBYTEIN:三台数据输入标志。
TBYTEOUT:串行好的三态数据输出
RST:复位信号
SHIFTON1:级联信号输入
SHIFTIN2:同上
T1 to T4:并行三态信号输入,最大宽度为4.
DATA_RATE_OQ:定义输出数据是在时钟的每个边沿还是只在时钟的上升沿变化。
DATA_RATE_TQ:定义三态控制信号输出是在时钟的每个边沿变化还是只在时钟上升沿变化。
DATA_WIDTH:输入的并行数据宽度。*并不是单个模块的数据宽度。
SERDES_MODE:定义该模块是master还是slave。
TRISTATE_WIDTH:三态输入,输入宽度1~4。
TBYTE_CTL:只用于MIG,不理解,但是在这里肯定不用,所以设置为false。
TBYTE_SRC:同上。
10 :1转换连接示意图:
3 差分信号输出
源语OBUFDS
OBUFDS专门用于差分输出,全称为Output Buffer Differential Signal,差分信号缓冲器,作用是将单端数据转换成差分输出。
原理图为:
4 综合
最终HDMI驱动例化:
驱动框图:
将程序封装成一个IP,其示意图为:
最后想感叹一下今天的晴天,让我心情很好。接下来打算做一个uart/iic/spi或者TFT只是补充的系列,欢迎大家关注