123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- module RGB2HDMI(
- input clkTMDS,
- input clkRGB,
- input [7:0] rRGB,
- input [7:0] gRGB,
- input [7:0] bRGB,
- input blk,
- input hs,
- input vs,
- output wire rTMDS,
- output wire rTMDSn,
- output wire gTMDS,
- output wire gTMDSn,
- output wire bTMDS,
- output wire bTMDSn,
- output wire cTMDS,
- output wire cTMDSn
- );
- wire [9:0] encodedRed;
- wire [9:0] encodedGreen;
- wire [9:0] encodedBlue;
- reg [9:0] latchedRed = 10'd0;
- reg [9:0] latchedGreen = 10'd0;
- reg [9:0] latchedBlue = 10'd0;
- reg [9:0] shiftRed = 10'd0;
- reg [9:0] shiftGreen = 10'd0;
- reg [9:0] shiftBlue = 10'd0;
- reg [9:0] shiftClk = 10'b0000011111;
- TMDSenc TMDSr(
- .clk (clkRGB),
- .data(rRGB),
- .c (2'd0),
- .blk (blk),
- .q (encodedRed)
- );
- TMDSenc TMDSg(
- .clk (clkRGB),
- .data(gRGB),
- .c (2'd0),
- .blk (blk),
- .q (encodedGreen)
- );
- TMDSenc TMDSb(
- .clk (clkRGB),
- .data(bRGB),
- .c ({vs, hs}),
- .blk (blk),
- .q (encodedBlue)
- );
- ddr ddrR(
- .outclock(clkTMDS),
- .datain_h(shiftRed[0]),
- .datain_l(shiftRed[1]),
- .dataout (rTMDS)
- );
- ddr ddrG(
- .outclock(clkTMDS),
- .datain_h(shiftGreen[0]),
- .datain_l(shiftGreen[1]),
- .dataout (gTMDS)
- );
- ddr ddrB(
- .outclock(clkTMDS),
- .datain_h(shiftBlue[0]),
- .datain_l(shiftBlue[1]),
- .dataout (bTMDS)
- );
- ddr ddrCLK(
- .outclock(clkTMDS),
- .datain_h(shiftClk[0]),
- .datain_l(shiftClk[1]),
- .dataout (cTMDS)
- );
- ddr ddrRn(
- .outclock(clkTMDS),
- .datain_h(!shiftRed[0]),
- .datain_l(!shiftRed[1]),
- .dataout (rTMDSn)
- );
- ddr ddrGn(
- .outclock(clkTMDS),
- .datain_h(!shiftGreen[0]),
- .datain_l(!shiftGreen[1]),
- .dataout (gTMDSn)
- );
- ddr ddrBn(
- .outclock(clkTMDS),
- .datain_h(!shiftBlue[0]),
- .datain_l(!shiftBlue[1]),
- .dataout (bTMDSn)
- );
- ddr ddrCLKn(
- .outclock(clkTMDS),
- .datain_h(!shiftClk[0]),
- .datain_l(!shiftClk[1]),
- .dataout (cTMDSn)
- );
- always @(posedge clkRGB)
- begin
- latchedRed <= encodedRed;
- latchedGreen <= encodedGreen;
- latchedBlue <= encodedBlue;
- end
- always @(posedge clkTMDS)
- begin
- if (shiftClk == 10'b0000011111)
- begin
- shiftRed <= latchedRed;
- shiftGreen <= latchedGreen;
- shiftBlue <= latchedBlue;
- end
- else
- begin
- shiftRed <= {2'b00, shiftRed[9:2]};
- shiftGreen <= {2'b00, shiftGreen[9:2]};
- shiftBlue <= {2'b00, shiftBlue[9:2]};
- end
- shiftClk <= {shiftClk[1:0], shiftClk[9:2]};
- end
- endmodule
|