Added top level wrapper for azadi soc
diff --git a/verilog/rtl/azadi_soc_top_caravel.sv b/verilog/rtl/azadi_soc_top_caravel.sv
new file mode 100644
index 0000000..b3df9e1
--- /dev/null
+++ b/verilog/rtl/azadi_soc_top_caravel.sv
@@ -0,0 +1,225 @@
+// SPDX-FileCopyrightText: 2020 Efabless Corporation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// Designed by a Team at Micro Electronics Research Lab, Usman Institute of Technology.
+// https://www.merledupk.org
+`default_nettype wire
+`define MPRJ_IO_PADS 38
+module azadi_soc_top_caravel (
+ `ifdef USE_POWER_PINS
+ inout vdda1, // User area 1 3.3V supply
+ inout vdda2, // User area 2 3.3V supply
+ inout vssa1, // User area 1 analog ground
+ inout vssa2, // User area 2 analog ground
+ inout vccd1, // User area 1 1.8V supply
+ inout vccd2, // User area 2 1.8v supply
+ inout vssd1, // User area 1 digital ground
+ inout vssd2, // User area 2 digital ground
+ `endif
+
+ // Wishbone Slave ports (WB MI A)
+ input wb_clk_i,
+ input wb_rst_i,
+ input wbs_stb_i,
+ input wbs_cyc_i,
+ input wbs_we_i,
+ input [3:0] wbs_sel_i,
+ input [31:0] wbs_dat_i,
+ input [31:0] wbs_adr_i,
+ output wbs_ack_o,
+ output [31:0] wbs_dat_o,
+
+ // Logic Analyzer Signals
+ input [127:0] la_data_in,
+ output [127:0] la_data_out,
+ input [127:0] la_oenb,
+
+ // IOs, MPRJ_IO_PADS = 38
+ input [`MPRJ_IO_PADS-1:0] io_in,
+ output [`MPRJ_IO_PADS-1:0] io_out,
+ output [`MPRJ_IO_PADS-1:0] io_oeb,
+
+ // Analog (direct connection to GPIO pad---use with caution)
+ // Note that analog I/O is not available on the 7 lowest-numbered
+ // GPIO pads, and so the analog_io indexing is offset from the
+ // GPIO indexing by 7 (also upper 2 GPIOs do not have analog_io).
+ inout [`MPRJ_IO_PADS-10:0] analog_io,
+
+ // Independent clock (on independent integer divider)
+ input user_clock2,
+
+ // User maskable interrupt signals
+ output [2:0] user_irq
+);
+
+ wire clk_i;
+ wire rst_ni;
+ wire prog;
+ wire led;
+
+ // Clocks per bit
+ wire [15:0] clks_per_bit;
+
+ // gpios interface
+ wire [13:0] gpio_i;
+ wire [13:0] gpio_o;
+ wire [13:0] gpio_oe;
+
+
+ // uart-periph interface
+ wire uart_tx;
+ wire uart_rx;
+
+ // PWM interface
+ wire pwm_o_1;
+ wire pwm_o_2;
+ wire pwm1_oe;
+ wire pwm2_oe;
+
+ // SPI interface
+ wire [1:0] ss_o;
+ wire sclk_o;
+ wire sd_o;
+ wire sd_oe;
+ wire sd_i;
+
+ wire qsclk_o;
+ wire qcs_o;
+ wire [3:0] qsd_i;
+ wire [3:0] qsd_o;
+ wire [3:0] qsd_oe;
+
+// SPI pin mux
+
+ assign io_out[0] = sclk_o;
+ assign io_oeb[0] = 1'b0;
+ assign io_out[1] = sd_o;
+ assign io_oeb[1] = ~sd_oe;
+
+ assign sd_i = io_in[2];
+ assign io_oeb[2] = 1'b1;
+ assign io_out[2] = 1'b0;
+
+ assign io_out[3] = ss_o[0];
+ assign io_oeb[3] = 1'b0;
+ assign io_out[4] = ss_o[1];
+ assign io_oeb[4] = 1'b0;
+
+// UART pin mux
+
+ assign uart_rx = io_in[5];
+ assign io_oeb[5] = 1'b1;
+ assign io_out[5] = 1'b0;
+
+ assign io_out[6] = uart_tx;
+ assign io_oeb[6] = 1'b0;
+
+// PROG button
+
+ assign prog = io_in[7];
+ assign io_oeb[7] = 1'b1;
+ assign io_out[7] = 1'b0;
+
+// PWM pin mux
+
+ assign io_out[8] = pwm_o_1;
+ assign io_oeb[8] = ~pwm1_oe;
+ assign io_out[9] = pwm_o_2;
+ assign io_oeb[9] = ~pwm2_oe;
+
+// scan pins
+
+ assign io_oeb[13:10] = 4'b1111;
+ assign io_out[13:10] = 4'b0;
+
+ assign io_oeb[15:14] = 2'b0;
+
+// GPIO pin mux
+
+ assign io_out[29:16] = gpio_o;
+ assign gpio_i = io_in[29:16];
+ assign io_oeb[29:16] = ~gpio_oe;
+
+// BOOT LED pin
+
+ assign io_out[30] = led;
+ assign io_oeb[30] = 1'b0;
+// QSPI pin mux
+
+ assign io_out[31] = qcs_o;
+ assign io_oeb[31] = 1'b0;
+
+ assign io_out[32] = qsclk_o;
+ assign io_oeb[32] = 1'b0;
+
+ assign io_out[36:33] = qsd_o;
+ assign qsd_i = io_in[36:33];
+ assign io_oeb[36:33] = ~qsd_oe;
+
+ // Logic Analyzer ports
+ assign clks_per_bit = la_data_in[15:0];
+
+ azadi_soc_top soc_top(
+ `ifdef USE_POWER_PINS
+ .vccd1(vccd1),
+ .vssd1(vssd1),
+ `endif
+ .clk_i (wb_clk_i),
+ .rst_ni (~wb_rst_i),
+ .prog (prog),
+ .boot_led (led),
+
+ // Clocks per bits
+ .clks_per_bit(clks_per_bit),
+
+ // gpios interface
+ .gpio_i (gpio_i),
+ .gpio_o (gpio_o),
+ .gpio_oe (gpio_oe),
+
+ // uart-periph interface
+ .uart_tx (uart_tx), // output
+ .uart_rx (uart_rx), // input
+
+ // PWM interface
+ .pwm_o (pwm_o_1),
+ .pwm_o_2 (pwm_o_2),
+ .pwm1_oe (pwm1_oe),
+ .pwm2_oe (pwm2_oe),
+
+ // SPI interface
+ .ss_o (ss_o), // [3:0]
+ .sclk_o (sclk_o),
+ .sd_o (sd_o),
+ .sd_oe (sd_oe),
+ .sd_i (sd_i),
+
+// qspi interface
+
+ .qsclk_o (qsclk_o),
+ .qcs_o (qcs_o),
+ .qsd_i (qsd_i),
+ .qsd_o (qsd_o),
+ .qsd_oe (qsd_oe),
+ .SE (io_in[10]),
+ .TM (io_in[11]),
+ .SI0 (io_in[12]),
+ .SO0 (io_out[14]),
+ .SI1 (io_in[13]),
+ .SO1 (io_out[15])
+ );
+
+endmodule