harness phase1 initial commit
diff --git a/verilog/rtl/mgmt_soc.v b/verilog/rtl/mgmt_soc.v
index 007ca0f..af27f99 100644
--- a/verilog/rtl/mgmt_soc.v
+++ b/verilog/rtl/mgmt_soc.v
@@ -38,6 +38,7 @@
 `include "spi_sysctrl.v"
 `include "sysctrl.v"
 `include "la_wb.v"
+`include "mprj_ctrl.v"
 
 module mgmt_soc (
 `ifdef LVS
@@ -62,7 +63,18 @@
     // LA signals
     input  [127:0] la_input,           	// From Mega-Project to cpu
     output [127:0] la_output,          	// From CPU to Mega-Project
-    output [127:0] la_oe,              	// LA output enable (sensitiviy according to tri-state ?) 
+    output [127:0] la_oen,              // LA output enable (active low) 
+
+    // Mega-Project Control
+    output [MPRJ_IO_PADS-1:0] mprj_io_oeb_n,
+    output [MPRJ_IO_PADS-1:0] mprj_io_hldh_n,
+    output [MPRJ_IO_PADS-1:0] mprj_io_enh,
+    output [MPRJ_IO_PADS-1:0] mprj_io_inp_dis,
+    output [MPRJ_IO_PADS-1:0] mprj_io_ib_mode_sel,
+    output [MPRJ_IO_PADS-1:0] mprj_io_analog_en,
+    output [MPRJ_IO_PADS-1:0] mprj_io_analog_sel,
+    output [MPRJ_IO_PADS-1:0] mprj_io_analog_pol,
+    output [MPRJ_IO_PADS*3-1:0] mprj_io_dm,
 
     output 	      adc0_ena,
     output 	      adc0_convert,
@@ -149,7 +161,17 @@
     input  flash_io2_di,
     input  flash_io3_di,
 
-    // Crossbar Switch Slaves
+    // WB MI A (Mega project)
+    input mprj_ack_i,
+	input [31:0] mprj_dat_i,
+    output mprj_cyc_o,
+	output mprj_stb_o,
+	output mprj_we_o,
+	output [3:0] mprj_sel_o,
+	output [31:0] mprj_adr_o,
+	output [31:0] mprj_dat_o,
+	
+    // WB MI B (xbar)
     input [31:0] xbar_dat_i,
     input xbar_ack_i,
     output xbar_cyc_o,	
@@ -160,7 +182,7 @@
     output [31:0] xbar_dat_o
 );
     /* Memory reverted back to 256 words while memory has to be synthesized */
-    parameter integer MEM_WORDS = 256;
+    parameter integer MEM_WORDS = 8192;
     parameter [31:0] STACKADDR = (4*MEM_WORDS);       // end of memory
     parameter [31:0] PROGADDR_RESET = 32'h 1000_0000; 
     parameter [31:0] PROGADDR_IRQ   = 32'h 0000_0000;
@@ -170,7 +192,9 @@
     parameter FLASH_BASE_ADR = 32'h 1000_0000;
     parameter UART_BASE_ADR  = 32'h 2000_0000;
     parameter GPIO_BASE_ADR  = 32'h 2100_0000;
-    parameter LA_BASE_ADR   = 32'h 2200_0000;
+    parameter LA_BASE_ADR    = 32'h 2200_0000;
+    parameter MPRJ_CTRL_ADR  = 32'h 2300_0000;
+    parameter MPRJ_BASE_ADR  = 32'h 3000_0000;   // WB MI A
     parameter SYS_BASE_ADR   = 32'h 2F00_0000;
     parameter SPI_BASE_ADR   = 32'h 2E00_0000;
     parameter FLASH_CTRL_CFG = 32'h 2D00_0000;
@@ -186,7 +210,7 @@
     parameter GPIO_PU   = 8'h08;
     parameter GPIO_PD   = 8'h0c;
     
-    // LDO
+    // LA
     parameter LA_DATA_0 = 8'h00;
     parameter LA_DATA_1 = 8'h04;
     parameter LA_DATA_2 = 8'h08;
@@ -196,6 +220,10 @@
     parameter LA_ENA_2  = 8'h18;
     parameter LA_ENA_3  = 8'h1c;
     
+    // Mega-Project Control
+    parameter MPRJ_IO_PADS  = 32;
+    parameter MPRJ_PWR_CTRL = 32;
+   
     // SPI-Controlled Registers 
     parameter SPI_CFG        = 8'h00;
     parameter SPI_ENA        = 8'h04;
@@ -220,7 +248,7 @@
     // Wishbone Interconnect 
     localparam ADR_WIDTH = 32;
     localparam DAT_WIDTH = 32;
-    localparam NUM_SLAVES = 9;
+    localparam NUM_SLAVES = 11;
 
     parameter [NUM_SLAVES*ADR_WIDTH-1: 0] ADR_MASK = {
         {8'h80, {ADR_WIDTH-8{1'b0}}},
@@ -231,13 +259,18 @@
         {8'hFF, {ADR_WIDTH-8{1'b0}}},
         {8'hFF, {ADR_WIDTH-8{1'b0}}},
         {8'hFF, {ADR_WIDTH-8{1'b0}}},
+        {8'hFF, {ADR_WIDTH-8{1'b0}}},
+        {8'hFF, {ADR_WIDTH-8{1'b0}}},
         {8'hFF, {ADR_WIDTH-8{1'b0}}}
     };
+
     parameter [NUM_SLAVES*ADR_WIDTH-1: 0] SLAVE_ADR = {
         {XBAR_BASE_ADR},
         {SYS_BASE_ADR},
         {SPI_BASE_ADR},
         {FLASH_CTRL_CFG},
+        {MPRJ_BASE_ADR},
+        {MPRJ_CTRL_ADR},
         {LA_BASE_ADR},
         {GPIO_BASE_ADR},
         {UART_BASE_ADR},
@@ -281,9 +314,9 @@
     reg [1:0] comp_output_dest; 	// Comparator output destination
     
     reg analog_out_sel;				// Analog output select
-     reg	opamp_ena;					// Analog output op-amp enable
-     reg	opamp_bias_ena;				// Analog output op-amp bias enable
-     reg	bg_ena;						// Bandgap enable
+    reg	opamp_ena;					// Analog output op-amp enable
+    reg	opamp_bias_ena;				// Analog output op-amp bias enable
+    reg	bg_ena;						// Bandgap enable
     wire adc0_clk;					// ADC0 clock (multiplexed)
     wire adc1_clk;					// ADC1 clock (multiplexed)
 
@@ -380,6 +413,19 @@
         .gpio_mode0_pad(gpio_mode0_pad)
     );
 
+    wire [7:0] mprj_io_oeb;
+    convert_gpio_sigs convert_io_bit [7:0] (
+        .gpio_out(),
+        .gpio_outenb(mprj_io_oeb),
+        .gpio_pu(mprj_io_pu),
+        .gpio_pd(mprj_io_pd),
+        .gpio_out_pad(),
+        .gpio_outenb_pad(mprj_io_outenb_pad),
+        .gpio_inenb_pad(mprj_io_inenb_pad),
+        .gpio_mode1_pad(mprj_io_mode1_pad),
+        .gpio_mode0_pad(mprj_io_mode0_pad)
+    );
+    
     reg [31:0] irq;
     wire irq_7;
     wire irq_8;
@@ -596,18 +642,15 @@
     ) gpio_wb (
         .wb_clk_i(wb_clk_i),
         .wb_rst_i(wb_rst_i),
-
         .wb_adr_i(cpu_adr_o), 
         .wb_dat_i(cpu_dat_o),
         .wb_sel_i(cpu_sel_o),
         .wb_we_i(cpu_we_o),
         .wb_cyc_i(cpu_cyc_o),
-
         .wb_stb_i(gpio_stb_i),
         .wb_ack_o(gpio_ack_o),
         .wb_dat_o(gpio_dat_o),
         .gpio_in_pad(gpio_in_pad),
-
         .gpio(gpio),
         .gpio_oeb(gpio_oeb),
         .gpio_pu(gpio_pu),
@@ -729,9 +772,43 @@
         .wb_dat_o(la_dat_o),
 
         .la_data(la_output),
-        .la_ena(la_oe)
+        .la_data_in(la_input),
+        .la_oen(la_oen)
     );
     
+    // WB Slave Mega-Project Control
+    wire mprj_ctrl_stb_i;
+    wire mprj_ctrl_ack_o;
+    wire [31:0] mprj_ctrl_dat_o;
+
+    mprj_ctrl_wb #(
+        .BASE_ADR(MPRJ_CTRL_ADR),
+        .IO_PADS(MPRJ_IO_PADS),
+        .PWR_CTRL(MPRJ_PWR_CTRL)
+    ) mprj_ctrl (
+        .wb_clk_i(wb_clk_i),
+        .wb_rst_i(wb_rst_i),
+
+        .wb_adr_i(cpu_adr_o), 
+        .wb_dat_i(cpu_dat_o),
+        .wb_sel_i(cpu_sel_o),
+        .wb_we_i(cpu_we_o),
+        .wb_cyc_i(cpu_cyc_o),
+        .wb_stb_i(mprj_ctrl_stb_i),
+        .wb_ack_o(mprj_ctrl_ack_o),
+        .wb_dat_o(mprj_ctrl_dat_o),
+
+        .output_en_n(mprj_io_oeb_n),
+        .holdh_n(mprj_io_hldh_n),
+        .enableh(mprj_io_enh),
+        .input_dis(mprj_io_inp_dis),
+        .ib_mode_sel(mprj_io_ib_mode_sel),
+        .analog_en(mprj_io_analog_en),
+        .analog_sel(mprj_io_analog_sel),
+        .analog_pol(mprj_io_analog_pol),
+        .digital_mode(mprj_io_dm)
+    );
+
     // Wishbone Slave RAM
     wire mem_stb_i;
     wire mem_ack_o;
@@ -769,9 +846,9 @@
         .wbm_ack_o(cpu_ack_i),
 
         // Slaves Interface
-        .wbs_stb_o({ xbar_stb_o, sys_stb_i, spi_sys_stb_i, spimemio_cfg_stb_i, la_stb_i, gpio_stb_i, uart_stb_i, spimemio_flash_stb_i, mem_stb_i }), 
-        .wbs_dat_i({ xbar_dat_i, sys_dat_o, spi_sys_dat_o, spimemio_cfg_dat_o, la_dat_o, gpio_dat_o, uart_dat_o, spimemio_flash_dat_o, mem_dat_o }),
-        .wbs_ack_i({ xbar_ack_i, sys_ack_o, spi_sys_ack_o, spimemio_cfg_ack_o, la_ack_o, gpio_ack_o, uart_ack_o, spimemio_flash_ack_o, mem_ack_o })
+        .wbs_stb_o({ xbar_stb_o, sys_stb_i, spi_sys_stb_i, spimemio_cfg_stb_i, mprj_stb_o, mprj_ctrl_stb_i, la_stb_i, gpio_stb_i, uart_stb_i, spimemio_flash_stb_i, mem_stb_i }), 
+        .wbs_dat_i({ xbar_dat_i, sys_dat_o, spi_sys_dat_o, spimemio_cfg_dat_o, mprj_dat_i, mprj_ctrl_dat_o, la_dat_o, gpio_dat_o, uart_dat_o, spimemio_flash_dat_o, mem_dat_o }),
+        .wbs_ack_i({ xbar_ack_i, sys_ack_o, spi_sys_ack_o, spimemio_cfg_ack_o, mprj_ack_i, mprj_ctrl_ack_o, la_ack_o, gpio_ack_o, uart_ack_o, spimemio_flash_ack_o, mem_ack_o })
     );
 
     // Akin to ram ack