HDMI并串转换模块

  • Post author:
  • Post category:其他




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 版权协议,转载请附上原文出处链接和本声明。