|
@@ -6,46 +6,39 @@ module tmdsenc
|
|
|
(
|
|
|
input rst_n,
|
|
|
input clk,
|
|
|
- input den, // It is a data word, not a control word
|
|
|
- input [7:0] d, // Data word
|
|
|
- input tercen, // Control data is TERC4 encoded
|
|
|
- input [3:0] c, // Control or TERC4 word
|
|
|
+ input den, // Video data enable
|
|
|
+ input [7:0] d, // Video data word
|
|
|
+ input ten, // TERC data enable
|
|
|
+ input [3:0] t, // TERC data
|
|
|
+ input [1:0] c, // Control symbol
|
|
|
output [9:0] q
|
|
|
);
|
|
|
|
|
|
- // Bit 4 is TERC4 enable
|
|
|
- function logic [9:0] csym(input tercen, input [4:0] sym);
|
|
|
- casez ({tercen, sym})
|
|
|
- // Plain TMDS control symbols
|
|
|
- 5'b0_??00: csym = 10'b11010_10100;
|
|
|
- 5'b0_??01: csym = 10'b00101_01011;
|
|
|
- 5'b0_??10: csym = 10'b01010_10100;
|
|
|
- 5'b0_??11: csym = 10'b10101_01011;
|
|
|
+ // Control symbols
|
|
|
+ wire [9:0] csym[0:3];
|
|
|
+ assign csym[ 0] = 10'b11010_10100;
|
|
|
+ assign csym[ 1] = 10'b00101_01011;
|
|
|
+ assign csym[ 2] = 10'b01010_10100;
|
|
|
+ assign csym[ 3] = 10'b10101_01011;
|
|
|
|
|
|
- // TERC4 control symbols
|
|
|
- 5'b1_0000: csym = 10'b10100_11100;
|
|
|
- 5'b1_0001: csym = 10'b1001100011;
|
|
|
- 5'b1_0010: csym = 10'b1011100100;
|
|
|
- 5'b1_0011: csym = 10'b1011100010;
|
|
|
- 5'b1_0100: csym = 10'b0101110001;
|
|
|
- 5'b1_0101: csym = 10'b0100011110;
|
|
|
- 5'b1_0110: csym = 10'b0110001110;
|
|
|
- 5'b1_0111: csym = 10'b0100111100;
|
|
|
- 5'b1_1000: csym = 10'b1011001100;
|
|
|
- 5'b1_1001: csym = 10'b0100111001;
|
|
|
- 5'b1_1010: csym = 10'b0110011100;
|
|
|
- 5'b1_1011: csym = 10'b1011000110;
|
|
|
- 5'b1_1100: csym = 10'b1010001110;
|
|
|
- 5'b1_1101: csym = 10'b1001110001;
|
|
|
- 5'b1_1110: csym = 10'b0101100011;
|
|
|
- 5'b1_1111: csym = 10'b1011000011;
|
|
|
- endcase // casez (sym)
|
|
|
- endfunction // csym
|
|
|
-
|
|
|
- function logic [9:0] bitrev10(input [9:0] in);
|
|
|
- for (int i = 0; i < 10; i++)
|
|
|
- bitrev10[i] = in[9-i];
|
|
|
- endfunction // bitrev10
|
|
|
+ // TERC4 symbols
|
|
|
+ wire [9:0] tsym[0:15];
|
|
|
+ assign tsym[ 0] = 10'b10100_11100;
|
|
|
+ assign tsym[ 1] = 10'b10011_00011;
|
|
|
+ assign tsym[ 2] = 10'b10111_00100;
|
|
|
+ assign tsym[ 3] = 10'b10111_00010;
|
|
|
+ assign tsym[ 4] = 10'b01011_10001;
|
|
|
+ assign tsym[ 5] = 10'b01000_11110;
|
|
|
+ assign tsym[ 6] = 10'b01100_01110;
|
|
|
+ assign tsym[ 7] = 10'b01001_11100;
|
|
|
+ assign tsym[ 8] = 10'b10110_01100;
|
|
|
+ assign tsym[ 9] = 10'b01001_11001;
|
|
|
+ assign tsym[10] = 10'b01100_11100;
|
|
|
+ assign tsym[11] = 10'b10110_00110;
|
|
|
+ assign tsym[12] = 10'b10100_01110;
|
|
|
+ assign tsym[13] = 10'b10011_10001;
|
|
|
+ assign tsym[14] = 10'b01011_00011;
|
|
|
+ assign tsym[15] = 10'b10110_00011;
|
|
|
|
|
|
reg signed [4:0] disparity; // Running disparity/2
|
|
|
reg [9:0] qreg;
|
|
@@ -53,8 +46,9 @@ module tmdsenc
|
|
|
|
|
|
reg [7:0] dreg;
|
|
|
reg denreg;
|
|
|
- reg [3:0] creg;
|
|
|
- reg tercenreg;
|
|
|
+ reg [3:0] treg;
|
|
|
+ reg tenreg;
|
|
|
+ reg [1:0] creg;
|
|
|
|
|
|
wire signed [3:0] ddisp =
|
|
|
dreg[7] + dreg[6] + dreg[5] + dreg[4] +
|
|
@@ -79,7 +73,6 @@ module tmdsenc
|
|
|
end // always @ (*)
|
|
|
|
|
|
reg [9:0] dq; // Disparity stage output
|
|
|
- reg dispsign; // Disparity counter up or down
|
|
|
|
|
|
always_comb
|
|
|
begin
|
|
@@ -96,18 +89,20 @@ module tmdsenc
|
|
|
always @(negedge rst_n or posedge clk)
|
|
|
if (~rst_n)
|
|
|
begin
|
|
|
- dreg <= 'b0;
|
|
|
disparity <= 'sd0;
|
|
|
- qreg <= csym(1'b0, 4'b0000);
|
|
|
+ qreg <= csym[0];
|
|
|
+ dreg <= 8'bx;
|
|
|
denreg <= 1'b0;
|
|
|
+ tenreg <= 1'b0;
|
|
|
+ treg <= 4'bx;
|
|
|
creg <= 2'b00;
|
|
|
- tercenreg <= 1'b0;
|
|
|
end
|
|
|
else
|
|
|
begin
|
|
|
denreg <= den;
|
|
|
- tercenreg <= tercen;
|
|
|
+ tenreg <= ten;
|
|
|
creg <= c;
|
|
|
+ treg <= t;
|
|
|
dreg <= d;
|
|
|
|
|
|
if (denreg)
|
|
@@ -117,7 +112,7 @@ module tmdsenc
|
|
|
end
|
|
|
else
|
|
|
begin
|
|
|
- qreg <= csym(tercenreg, creg);
|
|
|
+ qreg <= tenreg ? tsym[treg] : csym[creg];
|
|
|
disparity <= 'sd0;
|
|
|
end
|
|
|
end // else: !if(~rst_n)
|