Add info.yaml and top level gl verilog

Signed-off-by: gatecat <gatecat@ds0.me>
diff --git a/info.yaml b/info.yaml
new file mode 100644
index 0000000..86523c8
--- /dev/null
+++ b/info.yaml
@@ -0,0 +1,18 @@
+---
+project:
+  description: "A test SoC using Coriolis for place and route."
+  foundry: "SkyWater"
+  git_url: "https://github.com/ChipFlow/caravel_user_project_mpw3"
+  organization: "ChipFlow"
+  organization_url: "https://github.com/ChipFlow"
+  owner: "gatecat"
+  process: "SKY130"
+  project_name: "nmigen_coriolis_soc"
+  project_id: "00000000"
+  tags:
+    - "Coriolis"
+  category: "Test Harness"
+  top_level_netlist: "caravel/verilog/gl/caravel.v"
+  user_level_netlist: "verilog/gl/user_project_wrapper.v"
+  version: "1.00"
+  cover_image: "docs/source/_static/caravel_harness.png"
diff --git a/verilog/gl/user_project_wrapper.v b/verilog/gl/user_project_wrapper.v
new file mode 100644
index 0000000..6207feb
--- /dev/null
+++ b/verilog/gl/user_project_wrapper.v
@@ -0,0 +1,93 @@
+module user_project_wrapper (user_clock2,
+    vccd1,
+    vccd2,
+    vdda1,
+    vdda2,
+    vssa1,
+    vssa2,
+    vssd1,
+    vssd2,
+    wb_clk_i,
+    wb_rst_i,
+    wbs_ack_o,
+    wbs_cyc_i,
+    wbs_stb_i,
+    wbs_we_i,
+    analog_io,
+    io_in,
+    io_oeb,
+    io_out,
+    la_data_in,
+    la_data_out,
+    la_oenb,
+    user_irq,
+    wbs_adr_i,
+    wbs_dat_i,
+    wbs_dat_o,
+    wbs_sel_i);
+ input user_clock2;
+ input vccd1;
+ input vccd2;
+ input vdda1;
+ input vdda2;
+ input vssa1;
+ input vssa2;
+ input vssd1;
+ input vssd2;
+ input wb_clk_i;
+ input wb_rst_i;
+ output wbs_ack_o;
+ input wbs_cyc_i;
+ input wbs_stb_i;
+ input wbs_we_i;
+ inout [28:0] analog_io;
+ input [37:0] io_in;
+ output [37:0] io_oeb;
+ output [37:0] io_out;
+ input [127:0] la_data_in;
+ output [127:0] la_data_out;
+ input [127:0] la_oenb;
+ output [2:0] user_irq;
+ input [31:0] wbs_adr_i;
+ input [31:0] wbs_dat_i;
+ output [31:0] wbs_dat_o;
+ input [3:0] wbs_sel_i;
+
+via4_3100x3100 via (
+    .vccd1(vccd1),
+    .vssd1(vssd1)
+);
+
+corona_cts corona (
+    .vccd1(vccd1),
+    .vssd1(vssd1),
+    .io_in(io_in),
+    .io_oeb(io_oeb),
+    .io_out(io_out)
+);
+
+endmodule
+
+(* keep *)
+module via4_3100x3100(
+    input vccd1,
+    input vssd1
+);
+    // Entirely pointless, but required to make the GL netlist match the GDS
+endmodule
+
+module corona_cts(
+    input vccd1,
+    input vssd1,
+    input [37:0] io_in,
+    output [37:0] io_oeb,
+    output [37:0] io_out
+);
+    user_project_core_lambdasoc_cts core(
+        .vccd1(vccd1),
+        .vssd1(vssd1),
+        .io_in(io_in),
+        .io_oeb(io_oeb),
+        .io_out(io_out)
+    );
+endmodule