TMDS协议是当下很重的一个视频传输协议,DVI以及HDMI均采用该协议进行视频数据的转化和传输。
TMDS编码部分如下:
通过该模块可将8bit视频像素数据转为10bit。具体的转化流程图可自行搜索,算法并不复杂。
Testbench:
`timescale 1ns / 1ps
//
module tb;
// encoder1 Parameters
parameter PERIOD = 10 ;
parameter CTRL3 = 10'b0010101010;
// encoder1 Inputs
reg [7:0] Blue_in = 0 ;
reg sys_clk = 0 ;
reg sys_rst = 0 ;
reg de = 0 ;
reg hsync = 0 ;
reg vsync = 0 ;
// encoder1 Outputs
wire [9:0] Blue_out ;
encoder encoderu0(
.Blue_in ( Blue_in ),
.sys_clk ( sys_clk ),
.sys_rst ( sys_rst ),
.de ( de ),
.hsync ( hsync ),
.vsync ( vsync ),
.Blue_out ( Blue_out )
);
initial
begin
Blue_in = 8'b10110101;
de = 1'b1;
hsync = 1'b1;
vsync = 1'b1;
end
initial
begin
forever #(PERIOD/2) sys_clk=~sys_clk;
end
initial
begin
#(PERIOD*2) sys_rst = 1;
end
endmodule
这里的输入信号是8‘b10110101,在后续的解码部分可以进行对照 。
解码部分RTL:
Testbench:
`timescale 1ns / 1ps
//
module tb;
// jiema Parameters
parameter PERIOD = 10;
// jiema Inputs
reg sys_clk = 0 ;
reg sys_rst = 0 ;
reg [9:0] Blue_out = 0 ;
// jiema Outputs
wire [7:0] data ;
initial
begin
Blue_out = 10'b1011000110;
forever #(PERIOD/2) sys_clk=~sys_clk;
end
initial
begin
#(PERIOD/2) sys_rst = 1;
end
jiema u_jiema (
.sys_clk ( sys_clk ),
.sys_rst ( sys_rst ),
.Blue_out ( Blue_out [9:0] ),
.data ( data [7:0] )
);
initial
begin
$finish;
end
endmodule
解码后仿真波形图如下:
可以看到解码后的数据data=8'b10110101,与最初的输入数据保持一致。(发csdn就是想记录自己的学习进程,大佬勿喷)。