[UPD] added version working with triple redundancy
diff --git a/verilog/rtl/control_module.v b/verilog/rtl/control_module.v
index 5a6cf35..ed8723a 100644
--- a/verilog/rtl/control_module.v
+++ b/verilog/rtl/control_module.v
@@ -24,8 +24,10 @@
 (
     parameter WORD_SIZE = 32,
     parameter SIZE_WORD = 3,
-    parameter INPUT_DATA_SIZE = 40,
-    parameter STATUS_SIGNALS = 4,
+    parameter AUXILIAR_SIZE = 44,
+    parameter IO_OUTPUT_SIZE = 8,
+    parameter INPUT_DATA_SIZE = 52,
+    parameter STATUS_SIGNALS = 6,
     parameter DATA_WIDTH = 8,
     parameter OUTPUTS = 32,
     parameter INPUTS = 32,
@@ -38,9 +40,8 @@
     input rtx,
     input rst,
     input [15:0] preescalar_data_rate,
-    input [2:0] id,
     input [INPUTS-1:0] input_io,
-    output [3:0]staus_control_module, // TODO possible expansion of that
+    output [STATUS_SIGNALS-1:0]staus_control_module, // TODO possible expansion of that
     output trx,
     output valid_io, 
     output [OUTPUTS-1:0] output_io 
@@ -48,13 +49,13 @@
 );
 
     
-
+   
     // connection wires
     (* mark_debug = "true" *) wire busy_io_module;
     (* mark_debug = "true" *) wire busy_sender_data;
     (* mark_debug = "true" *) wire [INSTRUCTION_SIZE-1:0] instrucction;
     (* mark_debug = "true" *) wire [SIZE_WORD_REGISTER-1:0] register;
-    (* mark_debug = "true" *) wire [WORD_SIZE-1:0] clock_time;
+    (* mark_debug = "true" *) wire [AUXILIAR_SIZE-1:0] auxiliar_register;
     (* mark_debug = "true" *) wire valid_instrucction;
     (* mark_debug = "true" *) wire valid_control_value;
     // control value
@@ -62,9 +63,12 @@
     (* mark_debug = "true" *) wire [WORD_SIZE-1:0] send_data_register;
     (* mark_debug = "true" *) wire valid_data;
     (* mark_debug = "true" *) wire [SIZE_WORD-1:0] size_line;
-    (* mark_debug = "true" *) wire result_input_io;
+    (* mark_debug = "true" *) wire [IO_OUTPUT_SIZE-1:0] result_input_io;
  
-    
+    // assigments 
+    assign staus_control_module[4] = busy_io_module;
+    assign staus_control_module[5] = busy_sender_data;
+
     // status sender module
     status_sender_data #(
         .WORD_SIZE(WORD_SIZE),
@@ -84,7 +88,7 @@
         .valid_control_value(valid_control_value),
         .control_value(control_value),
         .busy(busy_sender_data),
-        .control_uart(staus_control_module),
+        .control_uart(staus_control_module[3:0]),
         .txd(trx)
     );
 
@@ -93,7 +97,8 @@
         .WORD_SIZE(WORD_SIZE),
         .INSTRUCTION_SIZE(INSTRUCTION_SIZE),
         .OUTPUTS(OUTPUTS),
-        .INPUTS(INPUTS)
+        .INPUTS(INPUTS),
+        .IO_OUTPUT_SIZE(IO_OUTPUT_SIZE)
     )
     io_module_inst (
         .clk(clk),
@@ -101,7 +106,7 @@
         .busy(busy_io_module),
         .instrucction(instrucction),
         .register(register),
-        .clock_time(clock_time),
+        .auxiliar_register(auxiliar_register),
         .valid_instrucction(valid_instrucction),
         .input_io(input_io),
         .valid_io(valid_io),
@@ -129,7 +134,7 @@
         .send_data_register(send_data_register),
         .instrucction(instrucction),
         .register(register),
-        .clock_time(clock_time),
+        .auxiliar_register(auxiliar_register),
         .valid_instrucction(valid_instrucction)
     );
  
diff --git a/verilog/rtl/io_module.v b/verilog/rtl/io_module.v
index 5f17992..c6d9875 100644
--- a/verilog/rtl/io_module.v
+++ b/verilog/rtl/io_module.v
@@ -25,28 +25,30 @@
     parameter SIZE_WORD = 5,
     parameter WORD_SIZE = 32,
     parameter INSTRUCTION_SIZE = 3,
+    parameter IO_OUTPUT_SIZE = 8,
+    parameter AUXILIAR_SIZE = 44,
     parameter OUTPUTS = 32,
     parameter INPUTS = 32,
-    parameter ONE_SECOND_CLOCK = 32'h07735940
+    parameter ONE_SECOND_CLOCK = 44'h00007735940
 )
 (
     input clk,
     input rst,
     (* mark_debug = "true" *)input [INSTRUCTION_SIZE-1:0] instrucction,
     (* mark_debug = "true" *)input [SIZE_WORD-1:0] register,
-    (* mark_debug = "true" *)input [WORD_SIZE-1:0] clock_time,
+    (* mark_debug = "true" *)input [AUXILIAR_SIZE-1:0] auxiliar_register,
     input valid_instrucction,
     input [INPUTS-1:0] input_io,
     output busy,
     output valid_io,
-    output result_input_io, 
+    output [IO_OUTPUT_SIZE-1:0] result_input_io, 
     output [OUTPUTS-1:0] output_io
-    );
+);
         reg busy;
-        (* mark_debug = "true" *) reg result_input_io;
+        (* mark_debug = "true" *) reg [IO_OUTPUT_SIZE-1:0] result_input_io;
         (* mark_debug = "true" *) reg [OUTPUTS-1:0]output_io;
         (* mark_debug = "true" *) reg valid_io;
-        (* mark_debug = "true" *) reg [WORD_SIZE-1:0] curent_clock;
+        (* mark_debug = "true" *) reg [AUXILIAR_SIZE-1:0] curent_clock;
         (* mark_debug = "true" *) reg delay_maintained;
 
 
@@ -62,50 +64,115 @@
         else begin
             if (busy == 1) begin
                 if (curent_clock == 0) begin
-                    if (instrucction[2:1] == 2'b00) begin
+                    // MANTENINED 
+                    if (instrucction == 3'b000) begin
                         output_io[register] <= 1'b0;
                         busy <= 0;
                     end
-                    else if (instrucction == 3'b010) begin
-                        //output_io[register] <= 1'b0;
-                        //busy <= 0;
-                        // TODO
-                    end
-                    else if (instrucction == 3'b011) begin
+                    // DELAYDED TWO TIMES READ AND DELAED 1 SEC AND MANTEINED 
+                    else if (instrucction == 3'b010 || instrucction == 3'b001) begin
                         if (delay_maintained == 1'b0) begin
                             busy <= 0;
                             output_io[register] <= 1'b0;
                         end
                         else begin
                             output_io[register] <= 1'b1;
-                            curent_clock <= clock_time;
+                            curent_clock <= auxiliar_register;
                             busy <= 1;
                             delay_maintained <= 1'b0;
-                        end
-                        
+                        end 
                     end
+                    else if (instrucction == 3'b011) begin
+                        busy <= 0;
+                        valid_io <= 0;
+                        // stop the writes
+                        output_io[register]                 <= 1'b0;
+                        // register 6
+                        output_io[auxiliar_register[43:39]] <= 1'b0;
+                        // register 5
+                        output_io[auxiliar_register[38:34]] <= 1'b0;
+                        // register 4
+                        output_io[auxiliar_register[33:29]] <= 1'b0;
+                        // register 3
+                        output_io[auxiliar_register[28:24]] <= 1'b0;
+                        // register 2
+                        output_io[auxiliar_register[23:19]] <= 1'b0;
+                        // register 1
+                        output_io[auxiliar_register[18:14]] <= 1'b0;
+                        // register 0
+                        output_io[auxiliar_register[13:9]]  <= 1'b0;
+                    end
+                    // END WRITES
                     else if (instrucction[2:1] == 2'b10) begin
                         valid_io <= 1;
                         busy <= 0;
-                        result_input_io <= input_io[register];
-                    end
+                        result_input_io[0] <= input_io[register];
                     end
                     else if (instrucction == 3'b110) begin
-                        //output_io[register] <= 1'b0;
-                        //busy <= 0;
-                        // TODO
+                        valid_io <= 1;
+                        busy <= 0;
+                        // register 7
+                        result_input_io[7] <= input_io[register];
+                        // register 6
+                        result_input_io[6] <= input_io[auxiliar_register[43:39]];
+                        // register 5
+                        result_input_io[5] <= input_io[auxiliar_register[38:34]];
+                        // register 4
+                        result_input_io[4] <= input_io[auxiliar_register[33:29]];
+                        // register 3
+                        result_input_io[3] <= input_io[auxiliar_register[28:24]];
+                        // register 2
+                        result_input_io[2] <= input_io[auxiliar_register[23:19]];
+                        // register 1
+                        result_input_io[1] <= input_io[auxiliar_register[18:14]];
+                        // register 0
+                        result_input_io[0] <= input_io[auxiliar_register[13:9]];
                     end
                     else if (instrucction == 3'b111) begin
                         if (delay_maintained == 1'b0) begin
                             busy <= 0;
-                            result_input_io <= input_io[register];
+                            valid_io <= 0;
+                            // stop the writes
+                            output_io[register]                 <= 1'b0;
+                            // register 6
+                            output_io[auxiliar_register[43:39]] <= 1'b0;
+                            // register 5
+                            output_io[auxiliar_register[38:34]] <= 1'b0;
+                            // register 4
+                            output_io[auxiliar_register[33:29]] <= 1'b0;
+                            // register 3
+                            output_io[auxiliar_register[28:24]] <= 1'b0;
+                            // register 2
+                            output_io[auxiliar_register[23:19]] <= 1'b0;
+                            // register 1
+                            output_io[auxiliar_register[18:14]] <= 1'b0;
+                            // register 0
+                            output_io[auxiliar_register[13:9]]  <= 1'b0;
                         end
                         else begin
-                            result_input_io <= input_io[register];
-                            curent_clock <= clock_time;
+                            curent_clock <= ONE_SECOND_CLOCK;
                             busy <= 1;
                             delay_maintained <= 1'b0;
-                        end
+                            // start the writes
+                            // register 7
+                            output_io[register]                 <= auxiliar_register[7];
+                            // register 6
+                            output_io[auxiliar_register[43:39]] <= auxiliar_register[6];
+                            // register 5
+                            output_io[auxiliar_register[38:34]] <= auxiliar_register[5];
+                            // register 4
+                            output_io[auxiliar_register[33:29]] <= auxiliar_register[4];
+                            // register 3
+                            output_io[auxiliar_register[28:24]] <= auxiliar_register[3];
+                            // register 2
+                            output_io[auxiliar_register[23:19]] <= auxiliar_register[2];
+                            // register 1
+                            output_io[auxiliar_register[18:14]] <= auxiliar_register[1];
+                            // register 0
+                            output_io[auxiliar_register[13:9]] <= auxiliar_register[0];
+                        end 
+                        
+                    end
                 end
                 else begin
                    curent_clock <= curent_clock - 1'b1;
@@ -115,47 +182,66 @@
                 valid_io <= 1'b0;
                 if (valid_instrucction == 1'b1)begin
                     if (instrucction == 3'b000) begin
-                        curent_clock <= ONE_SECOND_CLOCK;
+                        curent_clock <= auxiliar_register;
                         output_io[register] <= 1'b1;
                         valid_io <= 1'b1;
                         busy <= 1;
                     end
                     else if (instrucction == 3'b001) begin
-                        curent_clock <= clock_time;
+                        curent_clock <= ONE_SECOND_CLOCK;
                         output_io[register] <= 1'b1;
+                        delay_maintained <= 1'b1;
                         valid_io <= 1'b1;
                         busy <= 1;
                     end
                     else if (instrucction == 3'b010) begin
-                        // TODO
-                        output_io[register] <= 1'b0;
-                        valid_io <= 1'b1;
-                        busy <= 1;
-                    end
-                    else if (instrucction == 3'b011) begin
-                        curent_clock <= clock_time;
+                        curent_clock <= auxiliar_register;
                         delay_maintained <= 1'b1;
                         valid_io <= 1'b0;
                         busy <= 1;        
                     end
-                    else if (instrucction == 3'b100) begin
+                    else if (instrucction == 3'b011) begin
                         curent_clock <= 0;
+                        valid_io <= 1'b1;
+                        busy <= 1;
+                        // start the writes
+                        // register 7
+                        output_io[register]                 <= auxiliar_register[7];
+                        // register 6
+                        output_io[auxiliar_register[43:39]] <= auxiliar_register[6];
+                        // register 5
+                        output_io[auxiliar_register[38:34]] <= auxiliar_register[5];
+                        // register 4
+                        output_io[auxiliar_register[33:29]] <= auxiliar_register[4];
+                        // register 3
+                        output_io[auxiliar_register[28:24]] <= auxiliar_register[3];
+                        // register 2
+                        output_io[auxiliar_register[23:19]] <= auxiliar_register[2];
+                        // register 1
+                        output_io[auxiliar_register[18:14]] <= auxiliar_register[1];
+                        // register 0
+                        output_io[auxiliar_register[13:9]] <= auxiliar_register[0];
+                    end
+                    else if (instrucction == 3'b100) begin
+                        curent_clock <= auxiliar_register;
                         busy <= 1;
                         valid_io <= 1'b0;      
                     end
                     else if (instrucction == 3'b101) begin
-                        curent_clock <= clock_time;
+                        curent_clock <= auxiliar_register;
                         busy <= 1;
                         valid_io <= 1'b0;       
                     end
                     else if (instrucction == 3'b110) begin
-                        // TODO       
+                        curent_clock <= 0;
+                        busy <= 1;
+                        valid_io <= 1'b0;       
                     end
                     else if (instrucction == 3'b111) begin
-                        delay_maintained <= 1'b1; 
-                        curent_clock <= clock_time;
+                        curent_clock <= ONE_SECOND_CLOCK;
+                        delay_maintained <= 1'b1;
                         busy <= 1;
-                        valid_io <= 1'b0;         
+                        valid_io <= 1'b0;       
                     end
                 end
             end
diff --git a/verilog/rtl/logic_control.v b/verilog/rtl/logic_control.v
index cda53b2..ea820a0 100644
--- a/verilog/rtl/logic_control.v
+++ b/verilog/rtl/logic_control.v
@@ -23,12 +23,21 @@
 module logic_control#
 (
     parameter WORD_SIZE = 32,
+    parameter AUXILIAR_SIZE = 44,
     parameter SIZE_WORD = 3,
-    parameter INPUT_DATA_SIZE = 40,
-    parameter STATUS_SIGNALS = 4,
+    parameter IO_OUTPUT_SIZE = 8,
+    parameter INPUT_DATA_SIZE = 52,
+    parameter STATUS_SIGNALS = 6,
     parameter DATA_WIDTH = 8,
     parameter INSTRUCTION_SIZE = 3,
-    parameter SIZE_WORD_REGISTER = 5
+    parameter SIZE_WORD_REGISTER = 5,
+    parameter INSTRUCCION_INPUT_START = INPUT_DATA_SIZE - 1 , //51 
+    parameter INSTRUCCION_INPUT_END = INSTRUCCION_INPUT_START - (INSTRUCTION_SIZE - 1), // 49
+    parameter REGISTER_INPUT_START = INSTRUCCION_INPUT_END -1, // 48 
+    parameter REGISTER_INPUT_END = REGISTER_INPUT_START - (SIZE_WORD_REGISTER - 1), // 44
+    parameter AUXILIAR_INPUT_START = REGISTER_INPUT_END - 1,
+    parameter AUXILIAR_INPUT_END = 0
+
 )
 (
     input clk,
@@ -37,17 +46,16 @@
     input valid_control_value,
     input busy_sender_data,
     input busy_io_module,
-    input result_input_io,
+    input [IO_OUTPUT_SIZE-1:0] result_input_io,
     output [SIZE_WORD-1:0] size_line,
     output [WORD_SIZE-1:0] send_data_register,
     output valid_data,
     output [INSTRUCTION_SIZE-1:0] instrucction,
     output [SIZE_WORD_REGISTER-1:0] register,
-    output [WORD_SIZE-1:0] clock_time,
+    output [AUXILIAR_SIZE-1:0] auxiliar_register,
     output valid_instrucction
 );
 
-
     // fix register with the multiple words
     reg [WORD_SIZE-1:0] data_1 = {8'h0D, 8'h59, 8'h53, 8'h42};
     reg [WORD_SIZE-1:0] data_2 = {8'h0D, 8'h0A, 8'h4B, 8'h4F};
@@ -67,7 +75,7 @@
     reg valid_instrucction;
     reg [INSTRUCTION_SIZE-1:0] instrucction;
     reg [SIZE_WORD_REGISTER-1:0] register;
-    reg [WORD_SIZE-1:0] clock_time;
+    reg [AUXILIAR_SIZE-1:0] auxiliar_register;
     
     
     always @(posedge clk or posedge rst) begin
@@ -80,9 +88,9 @@
         else begin
             if (busy_io_module == 1'b0 & valid_control_value == 1'b1) begin
                 valid_instrucction <= 1'b1;
-                instrucction <= control_value[INPUT_DATA_SIZE-1: 37];
-                register <= control_value[36: 32];
-                clock_time <= control_value[WORD_SIZE -1: 0];
+                instrucction <= control_value[INSTRUCCION_INPUT_START: INSTRUCCION_INPUT_END];
+                register <= control_value[REGISTER_INPUT_START : REGISTER_INPUT_END];
+                auxiliar_register <= control_value[AUXILIAR_INPUT_START: AUXILIAR_INPUT_END];
                 send_petition_to_io <= 2'b11;
             end
             else if (busy_io_module == 1'b1 & valid_control_value == 1'b1 & busy_sender_data == 1'b0) begin
@@ -92,15 +100,60 @@
                 // a petition have been send so clean the valid instrucction
                 valid_instrucction = 1'b0;
                 if (busy_io_module == 1'b0 & send_petition_to_io[1] == 1'b0) begin
-                    if (instrucction[INSTRUCTION_SIZE-1] == 1'b0) begin
+                    if (instrucction[INSTRUCTION_SIZE-1] == 1'b0 || instrucction == 3'b111) begin
                         send_petition_to_io<= 2'b00;
                         send_data_register <= data_2; 
                         valid_data <= 1'b1; 
                         size_line <= 3'h4;
                     end
+                    else if (instrucction == 3'b110) begin
+                        send_petition_to_io<= 2'b00;
+                        valid_data <= 1'b1; 
+                        size_line <= 3'h4;
+                        send_data_register[31:16] <= 16'h0D0A;
+                        // conversion from binary to hex
+                        case (result_input_io[7:4])
+                            4'h0 : send_data_register[7:0] <= 8'h30;
+                            4'h1 : send_data_register[7:0] <= 8'h31;
+                            4'h2 : send_data_register[7:0] <= 8'h32;
+                            4'h3 : send_data_register[7:0] <= 8'h33;
+                            4'h4 : send_data_register[7:0] <= 8'h34;
+                            4'h5 : send_data_register[7:0] <= 8'h35;
+                            4'h6 : send_data_register[7:0] <= 8'h36;
+                            4'h7 : send_data_register[7:0] <= 8'h37;
+                            4'h8 : send_data_register[7:0] <= 8'h38;
+                            4'h9 : send_data_register[7:0] <= 8'h39;
+                            4'hA : send_data_register[7:0] <= 8'h41;
+                            4'hB : send_data_register[7:0] <= 8'h42;
+                            4'hC : send_data_register[7:0] <= 8'h43;
+                            4'hD : send_data_register[7:0] <= 8'h44;
+                            4'hE : send_data_register[7:0] <= 8'h45;
+                            4'hF : send_data_register[7:0] <= 8'h46;
+                            default: send_data_register[7:0] <= 8'h00;
+                        endcase
+                        case (result_input_io[3:0])
+                            4'h0 : send_data_register[15:8] <= 8'h30;
+                            4'h1 : send_data_register[15:8] <= 8'h31;
+                            4'h2 : send_data_register[15:8] <= 8'h32;
+                            4'h3 : send_data_register[15:8] <= 8'h33;
+                            4'h4 : send_data_register[15:8] <= 8'h34;
+                            4'h5 : send_data_register[15:8] <= 8'h35;
+                            4'h6 : send_data_register[15:8] <= 8'h36;
+                            4'h7 : send_data_register[15:8] <= 8'h37;
+                            4'h8 : send_data_register[15:8] <= 8'h38;
+                            4'h9 : send_data_register[15:8] <= 8'h39;
+                            4'hA : send_data_register[15:8] <= 8'h41;
+                            4'hB : send_data_register[15:8] <= 8'h42;
+                            4'hC : send_data_register[15:8] <= 8'h43;
+                            4'hD : send_data_register[15:8] <= 8'h44;
+                            4'hE : send_data_register[15:8] <= 8'h45;
+                            4'hF : send_data_register[15:8] <= 8'h46;
+                            default: send_data_register[15:8] <= 8'h00;
+                        endcase
+                    end
                     else begin
                         send_petition_to_io<= 2'b00;
-                        if (result_input_io == 1'b0 ) begin
+                        if (result_input_io[0] == 1'b0 ) begin
                             send_data_register <= data_3; 
                             valid_data <= 1'b1; 
                             size_line <= 3'h4;
@@ -124,27 +177,5 @@
             end
         end
     end
-    /*always @(posedge clk or posedge rst) begin
-        if (rst) begin
-            size_line <= 3'h4;
-            send_data_register <= 0;
-            valid_data <= 0;
-        end
-        else begin
-            // main code
-            if (busy_sender_data == 1'b0 & valid_control_value == 1'b1) begin
-                // new valid data available
-                 case(control_value)
-                        40'h1000000000: begin send_data_register <= data_1; valid_data <= 1'b1; size_line <= 3'h4; end
-                        40'h2000000000: begin send_data_register <= data_2; valid_data <= 1'b1; size_line <= 3'h4; end
-                        40'h3000000000: begin send_data_register <= data_3; valid_data <= 1'b1; size_line <= 3'h4; end
-                        default: valid_data <= 0;
-                endcase
-            end
-            else begin
-                valid_data <= 1'b0;
-            end
-        end
-    end*/
 
 endmodule
diff --git a/verilog/rtl/status_sender_data.v b/verilog/rtl/status_sender_data.v
index cb0b1c0..adaed8a 100644
--- a/verilog/rtl/status_sender_data.v
+++ b/verilog/rtl/status_sender_data.v
@@ -23,9 +23,10 @@
 module status_sender_data #
 (
     parameter WORD_SIZE = 32,
-    parameter INPUT_DATA_SIZE = 40,
+    parameter INPUT_DATA_SIZE = 52,
     parameter SIZE_WORD = 3,
-    parameter STATUS_SIGNALS = 4,
+    parameter STATUS_SIGNALS = 6,
+    parameter STATUS_SIGNALS_UART = 4,
     parameter DATA_WIDTH = 8,
     parameter SYMBOL_WITH = 4,
     parameter [8:0]ESCAPE_CHARCTER = 8'h0D,
@@ -43,7 +44,7 @@
     output reg [INPUT_DATA_SIZE-1:0] control_value,
     output reg valid_control_value,
     output busy,
-    output [STATUS_SIGNALS-1:0]control_uart,
+    output [STATUS_SIGNALS_UART-1:0]control_uart,
     output txd
     );
 
diff --git a/verilog/rtl/top_module.v b/verilog/rtl/top_module.v
index e7ec595..0b3dbac 100644
--- a/verilog/rtl/top_module.v
+++ b/verilog/rtl/top_module.v
@@ -24,8 +24,8 @@
 (
     parameter WORD_SIZE = 32,
     parameter SIZE_WORD = 3,
-    parameter INPUT_DATA_SIZE = 40,
-    parameter STATUS_SIGNALS = 4,
+    parameter INPUT_DATA_SIZE = 52,
+    parameter STATUS_SIGNALS = 6,
     parameter DATA_WIDTH = 8,
     parameter BAUD_RATE = 115200,
     parameter CLOCK_SPEED = 125000000,
@@ -42,8 +42,82 @@
     );
     // prescalar reister fix for now
     reg [15:0] preescalar_data_rate = CLOCK_SPEED/(BAUD_RATE*DATA_WIDTH);
-    // id of the control module
-    reg [2:0] id = 2'b00;
+
+    // input IO
+    wire [OUTPUTS - 1 : 0]input_io;
+    // TMP assigment TODO change
+    assign sw = input_io[3:0];
+
+    // TRX triple redundancy
+    // uart transtransmision wires
+    wire uart_output_signal;
+    wire uart_output_signal_inst_1;
+    wire uart_output_signal_inst_2;
+    wire uart_output_signal_inst_3;
+    // asignations
+    assign jc_2 = uart_output_signal;
+    // auxiliar wires
+    wire nand_1_trx;
+    wire nand_2_trx;
+    wire nand_3_trx;
+    wire xor_1_trx;
+    wire xor_2_trx;
+    wire xor_3_trx;
+    wire xor_reduce_1_trx;
+    wire xor_reduce_2_trx;
+    wire xor_reduce_3_trx;
+    // uart transtransmision wires triple redundant
+    (* mark_debug = "true" *) assign nand_1_trx  = ~(uart_output_signal_inst_1 & uart_output_signal_inst_2);
+    (* mark_debug = "true" *) assign nand_2_trx  = ~(uart_output_signal_inst_2 & uart_output_signal_inst_3);
+    (* mark_debug = "true" *) assign nand_3_trx  = ~(uart_output_signal_inst_1 & uart_output_signal_inst_3);
+    (* mark_debug = "true" *) assign uart_output_signal = ~(nand_1_trx & nand_2_trx & nand_3_trx);
+    // uart transtransmision wires triple redundant detection
+    assign xor_1_trx  = uart_output_signal_inst_1 ^ uart_output_signal_inst_2;
+    assign xor_2_trx  = uart_output_signal_inst_2 ^ uart_output_signal_inst_3;
+    assign xor_3_trx  = uart_output_signal_inst_1 ^ uart_output_signal_inst_3;
+    assign xor_reduce_1_trx = |xor_1_trx;
+    assign xor_reduce_2_trx = |xor_2_trx;
+    assign xor_reduce_3_trx = |xor_3_trx;
+    //end TRX
+    
+    // output_io triple redundancy
+    wire [OUTPUTS - 1 : 0] output_io_signal;
+    wire [OUTPUTS - 1 : 0] output_io_signal_inst_1;
+    wire [OUTPUTS - 1 : 0] output_io_signal_inst_2;
+    wire [OUTPUTS - 1 : 0] output_io_signal_inst_3;
+    // asignations
+    // TMP assigment TODO change
+    assign led = output_io_signal[3:0];
+    // auxiliar wires
+    wire [OUTPUTS - 1 : 0] nand_1_out_io;
+    wire [OUTPUTS - 1 : 0] nand_2_out_io;
+    wire [OUTPUTS - 1 : 0] nand_3_out_io;
+    wire [OUTPUTS - 1 : 0] xor_1_out_io;
+    wire [OUTPUTS - 1 : 0] xor_2_out_io;
+    wire [OUTPUTS - 1 : 0] xor_3_out_io;
+    wire xor_reduce_1_out_io;
+    wire xor_reduce_2_out_io;
+    wire xor_reduce_3_out_io;
+
+    // Output IO  wires triple redundant
+    (* mark_debug = "true" *) assign nand_1_out_io  = ~(output_io_signal_inst_1 & output_io_signal_inst_2);
+    (* mark_debug = "true" *) assign nand_2_out_io  = ~(output_io_signal_inst_2 & output_io_signal_inst_3);
+    (* mark_debug = "true" *) assign nand_3_out_io  = ~(output_io_signal_inst_1 & output_io_signal_inst_3);
+    (* mark_debug = "true" *) assign output_io_signal = ~(nand_1_out_io & nand_2_out_io & nand_3_out_io);
+    // Output IO wires triple redundant detection
+    assign xor_1_out_io  = output_io_signal_inst_1 ^ output_io_signal_inst_2;
+    assign xor_2_out_io  = output_io_signal_inst_2 ^ output_io_signal_inst_3;
+    assign xor_3_out_io  = output_io_signal_inst_1 ^ output_io_signal_inst_3;
+    assign xor_reduce_1_out_io = |xor_1_out_io;
+    assign xor_reduce_2_out_io = |xor_2_out_io;
+    assign xor_reduce_3_out_io = |xor_3_out_io;
+    // end output_io
+    
+
+
+    //redundat_validation_o[0] <= (xor_reduce_1 ^ xor_reduce_2) | (xor_reduce_2 ^ xor_reduce_3);
+    //redundat_validation_o[1] <= xor_reduce_1 & xor_reduce_2 & xor_reduce_3 ;
+    //store_data_o <= ~(nand_1 & nand_2 & nand_3)};
 
     control_module #(
         .WORD_SIZE(WORD_SIZE),
@@ -54,17 +128,58 @@
         .OUTPUTS(OUTPUTS),
         .INPUTS(INPUTS)
     )
-    control_module_inst(
+    control_module_inst_1(
         .clk(clk),
         .rtx(jc_1),
         .rst(btn),
         .preescalar_data_rate(preescalar_data_rate),
-        .id(id),
-        .input_io({28'b00000000000000000000000000,sw}),
+        .input_io(input_io),
         .staus_control_module(),
-        .trx(jc_2),
+        .trx(uart_output_signal_inst_1),
         .valid_io(),
-        .output_io({28'b00000000000000000000000000,led})
+        .output_io(output_io_signal_inst_1)
+    );
+
+    control_module #(
+        .WORD_SIZE(WORD_SIZE),
+        .SIZE_WORD(SIZE_WORD),
+        .STATUS_SIGNALS(STATUS_SIGNALS),
+        .DATA_WIDTH(DATA_WIDTH),
+        .INPUT_DATA_SIZE(INPUT_DATA_SIZE),
+        .OUTPUTS(OUTPUTS),
+        .INPUTS(INPUTS)
+    )
+    control_module_inst_2(
+        .clk(clk),
+        .rtx(jc_1),
+        .rst(btn),
+        .preescalar_data_rate(preescalar_data_rate),
+        .input_io(input_io),
+        .staus_control_module(),
+        .trx(uart_output_signal_inst_2),
+        .valid_io(),
+        .output_io(output_io_signal_inst_2)
+    );
+
+    control_module #(
+        .WORD_SIZE(WORD_SIZE),
+        .SIZE_WORD(SIZE_WORD),
+        .STATUS_SIGNALS(STATUS_SIGNALS),
+        .DATA_WIDTH(DATA_WIDTH),
+        .INPUT_DATA_SIZE(INPUT_DATA_SIZE),
+        .OUTPUTS(OUTPUTS),
+        .INPUTS(INPUTS)
+    )
+    control_module_inst_3(
+        .clk(clk),
+        .rtx(jc_1),
+        .rst(btn),
+        .preescalar_data_rate(preescalar_data_rate),
+        .input_io(input_io),
+        .staus_control_module(),
+        .trx(uart_output_signal_inst_3),
+        .valid_io(),
+        .output_io(output_io_signal_inst_3)
     );
 
 endmodule