HDMI并串转换模块
一、简介
在HDMI视频数据传输过程中,需要对来自TMDS编码后的10bit并行像素数据转换成1bit串行数据。从理论上讲,生成一个10倍于像素时钟的快时钟对其装换发送。
关于OSERDESE2原语模块,一方面可以实现DDR的功能,即它在五倍时钟频率的基础上又实现了双倍数据速率,因此逻辑代码使用一个5倍的时钟频率,即可实现10倍的时钟频率。另一方面,由于一个OSERDESE2模块只能实现最多8:1的转换率,通过位宽扩展实现了10:1 的并串转换(如图)。
注意:OSERDESE2位宽扩展通过两个OSERDESE2模块来实现,其中一个作为Master,另一个作为Slave,通过这种方式最多可实现14:1的并串转换。尤其是,在位宽扩展时,Slave模块的数据输入端只能使用D3至D8。
二、逻辑代码
module HDMI_Serializer(
input wire [00:00] i_pixel_clk , //并行数据时钟
input wire [00:00] i_pixel_5_clk , //串行数据时钟
input wire [00:00] i_rst , //复位信号,高有效
input wire [09:00] i_pixel_data , //输入十位并行数据
output wire [00:00] o_pixel_data //输出串行数据
);
wire [00:00] pixel_data_temp1 ;
wire [00:00] pixel_data_temp2 ;
OSERDESE2 #(
.DATA_RATE_OQ("DDR"), // DDR, SDR,双倍时钟速率DDR
.DATA_RATE_TQ("SDR"), // DDR, BUF, SDR
.DATA_WIDTH(10), // Parallel data width,并行数据10bit(2-8,10,14)
.INIT_OQ(1'b0), // Initial value of OQ output (1'b0,1'b1)
.INIT_TQ(1'b0), // Initial value of TQ output (1'b0,1'b1)
.SERDES_MODE("MASTER"), // MASTER, SLAVE,主模式
.SRVAL_OQ(1'b0), // OQ output value when SR is used (1'b0,1'b1)
.SRVAL_TQ(1'b0), // TQ output value when SR is used (1'b0,1'b1)
.TBYTE_CTL("FALSE"), // Enable tristate byte operation (FALSE, TRUE)
.TBYTE_SRC("FALSE"), // Tristate byte source (FALSE, TRUE)
.TRISTATE_WIDTH(1) // 3-state converter width (1,4)
)OSERDESE2_inst1 (
.OFB(), // 1-bit output: Feedback path for data
.OQ(o_pixel_data), // 1-bit output: Data path output,输出1bit数据
// SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
.SHIFTOUT1(),
.SHIFTOUT2(),
.TBYTEOUT(), // 1-bit output: Byte group tristate
.TFB(), // 1-bit output: 3-state control
.TQ(), // 1-bit output: 3-state control
.CLK(i_pixel_5_clk), // 1-bit input: High speed clock,5倍串行时钟数据
.CLKDIV(i_pixel_clk), // 1-bit input: Divided clock,并行时钟数据
// D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)10bit中的高8位
.D1(i_pixel_data[0]),
.D2(i_pixel_data[1]),
.D3(i_pixel_data[2]),
.D4(i_pixel_data[3]),
.D5(i_pixel_data[4]),
.D6(i_pixel_data[5]),
.D7(i_pixel_data[6]),
.D8(i_pixel_data[7]),
.OCE(1'b1), // 1-bit input: Output data clock enable
.RST(i_rst), // 1-bit input: Reset
// SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
.SHIFTIN1(pixel_data_temp1), //位拼接使用
.SHIFTIN2(pixel_data_temp2), //位拼接使用
// T1 - T4: 1-bit (each) input: Parallel 3-state inputs
.T1(1'b0),
.T2(1'b0),
.T3(1'b0),
.T4(1'b0),
.TBYTEIN(1'b0), // 1-bit input: Byte group tristate
.TCE(1'b0) // 1-bit input: 3-state clock enable
);
OSERDESE2 #(
.DATA_RATE_OQ("DDR"), // DDR, SDR,双倍时钟速率DDR
.DATA_RATE_TQ("SDR"), // DDR, BUF, SDR
.DATA_WIDTH(10), // Parallel data width,并行数据10bit(2-8,10,14)
.INIT_OQ(1'b0), // Initial value of OQ output (1'b0,1'b1)
.INIT_TQ(1'b0), // Initial value of TQ output (1'b0,1'b1)
.SERDES_MODE("SLAVE"), // MASTER, SLAVE,主模式
.SRVAL_OQ(1'b0), // OQ output value when SR is used (1'b0,1'b1)
.SRVAL_TQ(1'b0), // TQ output value when SR is used (1'b0,1'b1)
.TBYTE_CTL("FALSE"), // Enable tristate byte operation (FALSE, TRUE)
.TBYTE_SRC("FALSE"), // Tristate byte source (FALSE, TRUE)
.TRISTATE_WIDTH(1) // 3-state converter width (1,4)
)OSERDESE2_inst2(
.OFB(), // 1-bit output: Feedback path for data
.OQ(), // 1-bit output: Data path output,输出1bit数据
// SHIFTOUT1 / SHIFTOUT2: 1-bit (each) output: Data output expansion (1-bit each)
.SHIFTOUT1(pixel_data_temp1), //位拼接使用
.SHIFTOUT2(pixel_data_temp2), //位拼接使用
.TBYTEOUT(), // 1-bit output: Byte group tristate
.TFB(), // 1-bit output: 3-state control
.TQ(), // 1-bit output: 3-state control
.CLK(i_pixel_5_clk), // 1-bit input: High speed clock,5倍串行时钟数据
.CLKDIV(i_pixel_clk), // 1-bit input: Divided clock,并行时钟数据
// D1 - D8: 1-bit (each) input: Parallel data inputs (1-bit each)
.D1(1'b0),
.D2(1'b0),
.D3(i_pixel_data[8]), //位拼接从D3开始
.D4(i_pixel_data[9]), //
.D5(1'b0),
.D6(1'b0),
.D7(1'b0),
.D8(1'b0),
.OCE(1'b1), // 1-bit input: Output data clock enable
.RST(i_rst), // 1-bit input: Reset
// SHIFTIN1 / SHIFTIN2: 1-bit (each) input: Data input expansion (1-bit each)
.SHIFTIN1(),
.SHIFTIN2(),
// T1 - T4: 1-bit (each) input: Parallel 3-state inputs
.T1(1'b0),
.T2(1'b0),
.T3(1'b0),
.T4(1'b0),
.TBYTEIN(1'b0), // 1-bit input: Byte group tristate
.TCE(1'b0) // 1-bit input: 3-state clock enable
);
endmodule
版权声明:本文为m0_50111463原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。