module tmds_transmitter(input clk_in, input rst_in, input[7:0] data_in, output logic[9:0] data_out); logic [8:0] s1_to_s2; stage_1 my_stage_1(.clk_in(clk_in),.rst_in(rst_in),.s1_in(data_in), .s1_out(s1_to_s2)); stage_2 my_stage_2(.clk_in(clk_in),.rst_in(rst_in),.s2_in(s1_to_s2),.s2_out(data_out)); endmodule module stage_1 (input clk_in, input rst_in, input[7:0] s1_in, output logic [8:0] s1_out); //FROM LPSET 6 endmodule module stage_2 (input clk_in, input rst_in, input[8:0]s2_in, output logic[9:0] s2_out); //YOUR ASSIGNMENT IN LPSET 7 endmodule //provided for your usage: module tmds_receiver (input[9:0] data_in, output logic[7:0] data_out); logic[8:0] stage_1; assign stage_1 = data_in[9]? ~data_in[8:0]:data_in[8:0]; logic [7:0] option_1; logic [7:0] option_2; xor_decode my_xord (.data_in(stage_1[7:0]),.data_out(option_1)); xnor_decode my_xnord (.data_in(stage_1[7:0]),.data_out(option_2)); assign data_out = stage_1[8]?option_1:option_2; endmodule module xor_decode (input [7:0] data_in, output logic[7:0] data_out); always_comb begin data_out = 8'b0; //initialize data_out[0] = data_in[0]; for(integer i=1; i<8; i++)begin data_out[i] = data_out[i-1]^data_in[i]; end end endmodule module xnor_decode (input [7:0] data_in, output logic[7:0] data_out); always_comb begin data_out = 8'b0; //initialize data_out[0] = data_in[0]; for(integer i=1; i<8; i++)begin data_out[i] = ~(data_out[i-1]^data_in[i]); end end endmodule