/*----------------------------------------------------------*/
/* striVe, a raven/ravenna-like architecture in SkyWater s8 */
/*							    */
/* 1st edition, test of SkyWater s8 process		    */
/* This version is missing all analog functionality,	    */
/* including crystal oscillator, voltage regulator, and PLL */
/* For simplicity, the pad arrangement of Raven has been    */
/* retained, even though many pads have no internal	    */
/* connection.						    */
/*							    */
/* Copyright 2020 efabless, Inc.			    */
/* Written by Tim Edwards, December 2019		    */
/* This file is open source hardware released under the	    */
/* Apache 2.0 license.  See file LICENSE.		    */
/*							    */
/*----------------------------------------------------------*/

`timescale 1 ns / 1 ps

/* Always define USE_PG_PIN (used by SkyWater cells) */
/* But do not define SC_USE_PG_PIN */
`define USE_PG_PIN

/* Define LVS (equivalent to USE_PG_PIN, used by qflow) */
/* `define LVS */

/* Must define functional for now because otherwise the timing delays	*/
/* are assumed, but they have been stripped out because some are not	*/
/* parsed by iverilog.							*/

`define functional

// Define GL to use the gate-level netlists
//`define GL

// PDK IP
// Digital standard cells (to be changed to open-source library)
 // `include "/ef/tech/SW/EFS8A/libs.ref/verilog/scs8hd/scs8hd.v"
//`include "/home/tim/projects/efabless/tech/SW/EFS8A/libs.ref/scs8hd/verilog/scs8hd.v"

// I/O padframe cells
// `include "../stubs/s8iom0s8.v"
// `include "../stubs/power_pads_lib.v"
// //`include "/home/tim/projects/efabless/tech/SW/EFS8A/libs.ref/s8iom0s8/verilog/s8iom0s8.v"
// //`include "/home/tim/projects/efabless/tech/SW/EFS8A/libs.ref/s8iom0s8/verilog/power_pads_lib.v"
// 
// `ifdef GL
//     // Core cells, synthesized versions
//     `include "../gl/striVe_soc.synthesis.v"
//     `include "../gl/striVe_spi.synthesis.v"
//     `include "../gl/digital_pll.synthesis.v"
//     `include "../gl/striVe_clkrst.synthesis.v"
// `else
//     // Core cells, functional source versions
//     `include "striVe_soc.v"
//     `include "striVe_spi.v"
//     `include "digital_pll.v"
//     `include "striVe_clkrst.v"
// `endif
// 
// `ifdef PFG
//     `include "scs8hd_conb_1.v"
//     `include "s8iom0s8.v"
//     `include "power_pads_lib.v"
// `endif
// 
// `include "lvlshiftdown.v"
`ifdef SYNTH_OPENLANE
	`include "../stubs/s8iom0s8.v"
	`include "../stubs/power_pads_lib.v"
`else

    `ifndef LVS
	`include "/ef/tech/SW/EFS8A/libs.ref/verilog/s8iom0s8/s8iom0s8.v"
	`include "/ef/tech/SW/EFS8A/libs.ref/verilog/s8iom0s8/power_pads_lib.v"
	`include "/ef/tech/SW/EFS8A/libs.ref/verilog/scs8hd/scs8hd.v"
	`include "lvlshiftdown.v"
	`ifdef GL
		// Core cells, synthesized versions
		`include "../gl/striVe_soc.synthesis.v"
		`include "../gl/striVe_spi.synthesis.v"
		`include "../gl/digital_pll.synthesis.v"
		`include "../gl/striVe_clkrst.synthesis.v"
	`else
		`include "striVe_soc.v"
		`include "striVe_spi.v"
		`include "digital_pll.v"
		`include "striVe_clkrst.v"
	`endif
    `endif
`endif

// padframe generator needs these
`ifdef PFG
	`include "scs8hd_conb_1.v"
	`include "s8iom0s8.v"
	`include "power_pads_lib.v"
	`include "lvlshiftdown.v"
`endif
 
module striVe (vdd, vdd1v8, vss, gpio, xi, xo, adc0_in, adc1_in, adc_high, adc_low,
	comp_inn, comp_inp, RSTB, ser_rx, ser_tx, irq, SDO, SDI, CSB, SCK,
	xclk, flash_csb, flash_clk, flash_io0, flash_io1, flash_io2, flash_io3);
    inout vdd;
    inout vdd1v8;
    inout vss;
    inout [15:0] gpio;
    input xi;		// CMOS clock input, not a crystal
    output xo;		// divide-by-16 clock output
    input adc0_in;
    input adc1_in;
    input adc_high;
    input adc_low;
    input comp_inn;
    input comp_inp;
    input RSTB;		// NOTE:  Replaces analog_out pin from raven chip
    input ser_rx;
    output ser_tx;
    input irq;
    output SDO;
    input SDI;
    input CSB;
    input SCK;
    input xclk;
    output flash_csb;
    output flash_clk;
    output flash_io0;
    output flash_io1;
    output flash_io2;
    output flash_io3;

    wire [15:0] gpio_out_core;
    wire [15:0] gpio_in_core;
    wire [15:0]	gpio_mode0_core;
    wire [15:0]	gpio_mode1_core;
    wire [15:0]	gpio_outenb_core;
    wire [15:0]	gpio_inenb_core;

    wire analog_a, analog_b;	    /* Placeholders for analog signals */

    wire porb_h;
    wire porb_l;
    wire por_h;
    wire por;
    wire SCK_core;
    wire SDI_core;
    wire CSB_core;
    wire SDO_core;
    wire SDO_enb;
    wire spi_ro_xtal_ena_core;
    wire spi_ro_reg_ena_core;
    wire spi_ro_pll_dco_ena_core;
    wire [2:0] spi_ro_pll_sel_core;
    wire [4:0] spi_ro_pll_div_core;
    wire [25:0] spi_ro_pll_trim_core;
    wire ext_clk_sel_core;
    wire irq_spi_core;
    wire ext_reset_core;
    wire trap_core;
    wire [11:0] spi_ro_mfgr_id_core;
    wire [7:0] spi_ro_prod_id_core;
    wire [3:0] spi_ro_mask_rev_core;

    // Instantiate power cells for VDD3V3 domain (8 total; 4 high clamps and
    // 4 low clamps)
    s8iom0_vdda_hvc_pad vdd3v3hclamp [1:0] (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.drn_hvc(),
	.src_bdy_hvc(),
	.vswitch(vdd),
	.vcchib(vdd1v8),	// Hibernation supply
	.vccd(vdd1v8),
	.vdda(vdd),	// Analog power supply
	.vssa(vss),	// Analog ground
	.vddio(vdd),	// Main (digital) power supply
	.vssio(vss),	// Main (digital) ground
	.vssd(vss),
	.vddio_q(vddio_q),  // (vdd low-noise) Tied to vddio in vddio pad
	.vssio_q(vssio_q)   // (vss low-noise) Tied to vssio in vssio pad
    );

    s8iom0_vddio_hvc_pad vddiohclamp [1:0] (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.drn_hvc(),
	.src_bdy_hvc(),
	.vswitch(vdd),
	.vcchib(vdd1v8),	// Hibernation supply
	.vccd(vdd1v8),
	.vdda(vdd),	// Analog power supply
	.vssa(vss),	// Analog ground
	.vddio(vdd),	// Main (digital) power supply
	.vssio(vss),	// Main (digital) ground
	.vssd(vss),
	.vddio_q(vddio_q),
	.vssio_q(vssio_q)
    );


    s8iom0_vdda_lvc_pad vdd3v3lclamp [3:0] (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.bdy2_b2b(),
	.drn_lvc1(),
	.drn_lvc2(),
	.src_bdy_lvc1(),
	.src_bdy_lvc2(),
	.vssa(vss),
	.vdda(vdd),
	.vswitch(vdd),
	.vddio_q(vddio_q),
	.vcchib(vdd1v8),
	.vddio(vdd),
	.vccd(vdd1v8),
	.vssio(vss),
	.vssd(vss),
	.vssio_q(vssio_q)
    );

    // Instantiate the core voltage supply (since it is not generated on-chip)
    // (1.8V) (4 total, 2 high and 2 low clamps)

    s8iom0_vccd_hvc_pad vdd1v8hclamp [1:0] (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.drn_hvc(),
	.src_bdy_hvc(),
	.vswitch(vdd),
	.vcchib(vdd1v8),	// Hibernation supply
	.vccd(vdd1v8),
	.vdda(vdd),	// Analog power supply
	.vssa(vss),	// Analog ground
	.vddio(vdd),	// Main (digital) power supply
	.vssio(vss),	// Main (digital) ground
	.vssd(vss),
	.vddio_q(vddio_q),	// (vdd low-noise) Tie to vddio if not using analog mux
	.vssio_q(vssio_q)	// (vss low-noise) Tie to vssio if not using analog mux
    );

    s8iom0_vccd_lvc_pad vdd1v8lclamp [1:0] (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.bdy2_b2b(),
	.drn_lvc1(),
	.drn_lvc2(),
	.src_bdy_lvc1(),
	.src_bdy_lvc2(),
	.vssa(vss),
	.vdda(vdd),
	.vswitch(vdd),
	.vddio_q(vddio_q),
	.vcchib(vdd1v8),
	.vddio(vdd),
	.vccd(vdd1v8),
	.vssio(vss),
	.vssd(vss),
	.vssio_q(vssio_q)
    );

    // Instantiate ground cells (7 total, 4 high clamps and 3 low clamps)

    s8iom0_vssa_hvc_pad vsshclamp [3:0] (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.drn_hvc(),
	.src_bdy_hvc(),
	.vssa(vss),
	.vdda(vdd),
	.vswitch(vdd),
	.vddio_q(vddio_q),
	.vcchib(vdd1v8),
	.vddio(vdd),
	.vccd(vdd1v8),
	.vssio(vss),
	.vssd(vss),
	.vssio_q(vssio_q)
    );

    s8iom0_vssa_lvc_pad vssalclamp (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.bdy2_b2b(),
	.drn_lvc1(),
	.drn_lvc2(),
	.src_bdy_lvc1(),
	.src_bdy_lvc2(),
	.vssa(vss),
	.vdda(vdd),
	.vswitch(vdd),
	.vddio_q(vddio_q),
	.vcchib(vdd1v8),	// Core voltage
	.vddio(vdd),	// ESD power supply
	.vssio(vss),	// ESD ground
	.vccd(vdd1v8),
	.vssio_q(vssio_q)
    );

    s8iom0_vssd_lvc_pad vssdlclamp (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.bdy2_b2b(),
	.drn_lvc1(),
	.drn_lvc2(),
	.src_bdy_lvc1(),
	.src_bdy_lvc2(),
	.vssa(vss),
	.vdda(vdd),
	.vswitch(vdd),
	.vddio_q(vddio_q),
	.vcchib(vdd1v8),	// Core voltage
	.vddio(vdd),	// ESD power supply
	.vssio(vss),	// ESD ground
	.vccd(vdd1v8),
	.vssio_q(vssio_q)
    );

    s8iom0_vssio_lvc_pad vssiolclamp (
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.bdy2_b2b(),
	.drn_lvc1(),
	.drn_lvc2(),
	.src_bdy_lvc1(),
	.src_bdy_lvc2(),
	.vssa(vss),
	.vdda(vdd),
	.vswitch(vdd),
	.vddio_q(vddio_q),
	.vcchib(vdd1v8),	// Core voltage
	.vddio(vdd),	// ESD power supply
	.vssio(vss),	// ESD ground
	.vccd(vdd1v8),
	.vssio_q(vssio_q)
    );



    // Instantiate GPIO v2 cell.  These are used for both digital and analog
    // functions, configured appropriately.
    //
    // GPIO pin description:
    //
    // general:  signals with _h suffix are in the vddio (3.3V) domain.  All
    // other signals are in 1.8V domains (vccd or vcchib)

    // out = Signal from core to pad (digital, 1.8V domain)
    // oe_n = Output buffer enable (sense inverted)
    // hld_h_n = Hold signals during deep sleep (sense inverted)
    // enable_h = Power-on-reset (inverted)
    // enable_inp_h = Defines state of input buffer output when disabled.
    //	    Connect via loopback to tie_hi_esd or tie_lo_esd.
    // enable_vdda_h = Power-on-reset (inverted) to analog section
    // enable_vswitch_h = set to 0 if not using vswitch
    // enable_vddio = set to 1 if vddio is up during deep sleep
    // inp_dis = Disable input buffer
    // ib_mode_sel = Input buffer mode select, 0 for 3.3V external signals, 1 for
    //		1.8V external signals
    // vtrip_se = Input buffer trip select, 0 for CMOS level, 1 for TTL level
    // slow = 0 for fast slew, 1 for slow slew
    // hld_ovr = override for pads that need to be enabled during deep sleep
    // analog_en = enable analog functions
    // analog_sel = select analog channel a or b
    // analog_pol = analog select polarity
    // dm = digital mode (3 bits) 000 = analog 001 = input only, 110 = output only
    // vddio = Main 3.3V supply
    // vddio_q = Quiet 3.3V supply
    // vdda = Analog 3.3V supply
    // vccd = Digital 1.8V supply
    // vswitch = High-voltage supply for analog switches
    // vcchib = Digital 1.8V supply live during deep sleep mode
    // vssa = Analog ground
    // vssd = Digital ground
    // vssio_q = Quiet main ground
    // vssio = Main ground
    // pad = Signal on pad
    // pad_a_noesd_h = Direct core connection to pad
    // pad_a_esd_0_h = Core connection to pad through 150 ohms (primary)
    // pad_a_esd_1_h = Core connection to pad through 150 ohms (secondary)
    // amuxbus_a = Analog bus A
    // amuxbus_b = Analog bus B
    // in = Signal from pad to core (digital, 1.8V domain)
    // in_h = Signal from pad to core (3.3V domain)
    // tie_hi_esd = 3.3V output for loopback to enable_inp_h
    // tie_lo_esd = ground output for loopback to enable_inp_h

    // 37 instances:  16 general purpose digital, 2 for the crystal oscillator,
    // 4 for the ADC, 1 for the analog out, 2 for the comparator inputs,
    // one for the IRQ input, one for the xclk input, 6 for the SPI flash
    // signals, and 4 for the housekeeping SPI signals.

    // NOTE:  To pass a vector to array dm in an array of instances gpio_pad,
    // the array needs to be rearranged.  Reconstruct the needed 48-bit vector
    // (3 bit signal * 16 instances).
    //
    // Also note:  Preferable to use a generate block, but that is incompatible
    // with the current version of padframe_generator. . .

    wire [47:0] dm_all;

    assign dm_all = {gpio_mode1_core[15], gpio_mode1_core[15], gpio_mode0_core[15],
		 gpio_mode1_core[14], gpio_mode1_core[14], gpio_mode0_core[14],
		 gpio_mode1_core[13], gpio_mode1_core[13], gpio_mode0_core[13],
		 gpio_mode1_core[12], gpio_mode1_core[12], gpio_mode0_core[12],
		 gpio_mode1_core[11], gpio_mode1_core[11], gpio_mode0_core[11],
		 gpio_mode1_core[10], gpio_mode1_core[10], gpio_mode0_core[10],
		 gpio_mode1_core[9], gpio_mode1_core[9], gpio_mode0_core[9],
		 gpio_mode1_core[8], gpio_mode1_core[8], gpio_mode0_core[8],
		 gpio_mode1_core[7], gpio_mode1_core[7], gpio_mode0_core[7],
		 gpio_mode1_core[6], gpio_mode1_core[6], gpio_mode0_core[6],
		 gpio_mode1_core[5], gpio_mode1_core[5], gpio_mode0_core[5],
		 gpio_mode1_core[4], gpio_mode1_core[4], gpio_mode0_core[4],
		 gpio_mode1_core[3], gpio_mode1_core[3], gpio_mode0_core[3],
		 gpio_mode1_core[2], gpio_mode1_core[2], gpio_mode0_core[2],
		 gpio_mode1_core[1], gpio_mode1_core[1], gpio_mode0_core[1],
		 gpio_mode1_core[0], gpio_mode1_core[0], gpio_mode0_core[0]};

    // GPIO pads
    s8iom0_gpiov2_pad gpio_pad [15:0] (
	.out(gpio_out_core),	// Signal from core to pad
	.oe_n(gpio_outenb_core), // Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold signals during deep sleep (sense inverted)
	.enable_h(porb_h),	// Post-reset enable
	.enable_inp_h(loopb0),	// Input buffer state when disabled
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(gpio_inenb_core),		// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm(dm_all), // (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(gpio),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(gpio_in_core),  // Signal from pad to core
	.in_h(),	    // VDDA domain signal (unused)
	.tie_hi_esd(),
	.tie_lo_esd(loopb0)
    );

    s8iom0_gpiov2_pad xi_pad (
	.out(),			// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb1),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(por),		// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vdd1v8}), // (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(xi),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(xi_core),	    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb1)
    );

    s8iom0_gpiov2_pad xo_pad (
	.out(pll_clk16),	// Signal from core to pad
	.oe_n(vss),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb2),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(vdd1v8),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vdd1v8, vdd1v8, vss}),	// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(xo),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),	    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb2)
    );

    s8iom0_gpiov2_pad adc0_in_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb3),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(vdd1v8),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vdd1v8),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vss}),			// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(adc0_in),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0_gpiov2_pad adc1_in_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb4),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(vdd1v8),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vdd1v8),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vss}),			// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(adc1_in),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0_gpiov2_pad adc_high_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb5),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(vdd1v8),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vdd1v8),	//
	.analog_sel(vdd1v8),	//
	.analog_pol(vdd1v8),	//
	.dm({vss, vss, vss}),			// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(adc_high),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0_gpiov2_pad adc_low_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb6),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(vdd1v8),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vdd1v8),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vss}),			// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(adc_low),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0_gpiov2_pad comp_inn_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb7),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(vdd1v8),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vdd1v8),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vss}),			// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(comp_inn),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0_gpiov2_pad comp_inp_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb8),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(vdd1v8),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vdd1v8),	//
	.analog_sel(vdd1v8),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vss}),			// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(comp_inp),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    // NOTE:  The analog_out pad from the raven chip has been replaced by
    // the digital reset input RSTB on striVe due to the lack of an on-board
    // power-on-reset circuit.  The XRES pad is used for providing a glitch-
    // free reset.

    s8iom0s8_top_xres4v2 RSTB_pad (
	.pad(RSTB),

	.tie_weak_hi_h(xresloop),   // Loop-back connection to pad through pad_a_esd_h
	.tie_hi_esd(),
	.tie_lo_esd(),
	.pad_a_esd_h(xresloop),
	.xres_h_n(porb_h),
	.disable_pullup_h(vss),	    // 0 = enable pull-up on reset pad
	.enable_h(vdd),		    // Power-on-reset to the power-on-reset input??
	.en_vddio_sig_h(vss),	    // No idea.
	.inp_sel_h(vss),	    // 1 = use filt_in_h else filter the pad input
	.filt_in_h(vss),	    // Alternate input for glitch filter
	.pullup_h(vss),		    // Pullup connection for alternate filter input
	.enable_vddio(vdd1v8),
	.vssio(vss),
	.vddio(vdd),
	.vddio_q(vddio_q),
	.vssio_q(vssio_q),
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.vssd(vss),
	.vssa(vss),
	.vswitch(vdd),
	.vdda(vdd),
	.vccd(vdd1v8),
	.vcchib(vdd1v8)
    );

    s8iom0_gpiov2_pad irq_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb10),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(por),		// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vdd1v8}),	// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(irq),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(irq_pin_core),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb10)
    );

    s8iom0_gpiov2_pad SDO_pad (
	.out(SDO_core),		// Signal from core to pad
	.oe_n(SDO_enb),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb11),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(vdd1v8),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vdd1v8, vdd1v8, vss}),	// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(SDO),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb11)
    );

    s8iom0_gpiov2_pad SDI_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb12),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(por),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vdd1v8}),	// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(SDI),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(SDI_core),		    // Signal from pad to core
	.in_h(SDI_core_h),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0_gpiov2_pad CSB_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb13),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(por),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vdd1v8}),	// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(CSB),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(CSB_core),		    // Signal from pad to core
	.in_h(CSB_core_h),
	.tie_hi_esd(),
	.tie_lo_esd(loopb13)
    );

    s8iom0_gpiov2_pad SCK_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb14),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(por),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vdd1v8}),	// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(SCK),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(SCK_core),		    // Signal from pad to core
	.in_h(SCK_core_h),    // Signal in vdda domain (3.3V)
	.tie_hi_esd(),
	.tie_lo_esd(loopb14)
    );

    s8iom0_gpiov2_pad xclk_pad (
	.out(vss),		// Signal from core to pad
	.oe_n(vdd1v8),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb15),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(por),		// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vss, vss, vdd1v8}), // (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(xclk),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(ext_clk_core),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb15)
    );

    s8iom0_gpiov2_pad flash_csb_pad (
	.out(flash_csb_core),			// Signal from core to pad
	.oe_n(flash_csb_oeb_core),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb16),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(flash_csb_ieb_core),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vdd1v8, vdd1v8, vss}),	// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(flash_csb),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0_gpiov2_pad flash_clk_pad (
	.out(flash_clk_core),			// Signal from core to pad
	.oe_n(flash_clk_oeb_core),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb17),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(flash_clk_ieb_core),	// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({vdd1v8, vdd1v8, vss}),	// (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(flash_clk),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0_gpiov2_pad flash_io0_pad (
	.out(flash_io0_do_core),			// Signal from core to pad
	.oe_n(flash_io0_oeb_core),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb18),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(flash_io0_ieb_core),		// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({flash_io0_ieb_core, flash_io0_ieb_core, flash_io0_oeb_core}), // (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(flash_io0),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(flash_io0_di_core),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb18)
    );

    s8iom0_gpiov2_pad flash_io1_pad (
	.out(flash_io1_do_core),			// Signal from core to pad
	.oe_n(flash_io1_oeb_core),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb19),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(flash_io1_ieb_core),		// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({flash_io1_ieb_core, flash_io1_ieb_core, flash_io1_oeb_core}), // (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(flash_io1),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(flash_io1_di_core),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb19)
    );

    s8iom0_gpiov2_pad flash_io2_pad (
	.out(flash_io2_do_core),			// Signal from core to pad
	.oe_n(flash_io2_oeb_core),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb20),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(flash_io2_ieb_core),		// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({flash_io2_ieb_core, flash_io2_ieb_core, flash_io2_oeb_core}), // (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(flash_io2),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(flash_io2_di_core),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb20)
    );

    s8iom0_gpiov2_pad flash_io3_pad (
	.out(flash_io3_do_core),			// Signal from core to pad
	.oe_n(flash_io3_oeb_core),		// Output enable (sense inverted)
	.hld_h_n(vdd),		// Hold
	.enable_h(porb_h),	// Enable
	.enable_inp_h(loopb21),	// Enable input buffer
	.enable_vdda_h(porb_h),	// 
	.enable_vswitch_h(vss),	// 
	.enable_vddio(vdd1v8),	//
	.inp_dis(flash_io3_ieb_core),		// Disable input buffer
	.ib_mode_sel(vss),	//
	.vtrip_sel(vss),	//
	.slow(vss),		//
	.hld_ovr(vss),		//
	.analog_en(vss),	//
	.analog_sel(vss),	//
	.analog_pol(vss),	//
	.dm({flash_io3_ieb_core, flash_io3_ieb_core, flash_io3_oeb_core}), // (3 bits) Mode control
	.vddio(vdd),		
        .vddio_q(vddio_q),
        .vdda(vdd),
        .vccd(vdd1v8),
        .vswitch(vdd),
        .vcchib(vdd1v8),
        .vssa(vss),
        .vssd(vss),
        .vssio_q(vssio_q),
        .vssio(vss),
	.pad(flash_io3),
	.pad_a_noesd_h(),   // Direct pad connection
	.pad_a_esd_0_h(),   // Pad connection through 150 ohms
	.pad_a_esd_1_h(),   // Pad connection through 150 ohms
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(flash_io3_di_core),		    // Signal from pad to core
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd(loopb21)
    );

    // Instantiate GPIO overvoltage (I2C) compliant cell
    // (Use this for ser_rx and ser_tx;  no reason other than testing
    // the use of the cell.) (Might be worth adding in the I2C IP from
    // ravenna just to test on a proper I2C channel.)

    s8iom0s8_top_gpio_ovtv2 ser_rx_pad (
	.out(vss),
	.oe_n(vdd1v8),
	.hld_h_n(vdd),
	.enable_h(porb_h),
	.enable_inp_h(loopb22),
	.enable_vdda_h(porb_h),
	.enable_vddio(vdd1v8),
	.enable_vswitch_h(vss),
	.inp_dis(por),
	.vtrip_sel(vss),
	.hys_trim(vdd1v8),
	.slow(vss),
	.slew_ctl({vss, vss}),	// 2 bits
	.hld_ovr(vss),
	.analog_en(vss),
	.analog_sel(vss),
	.analog_pol(vss),
	.dm({vss, vss, vdd1v8}),		// 3 bits
	.ib_mode_sel({vss, vss}),	// 2 bits
	.vinref(vdd1v8),
	.vddio(vdd),
	.vddio_q(vddio_q),
	.vdda(vdd),
	.vccd(vdd1v8),
	.vswitch(vdd),
	.vcchib(vdd1v8),
	.vssa(vss),
	.vssd(vss),
	.vssio_q(vssio_q),
	.vssio(vss),
	.pad(ser_rx),
	.pad_a_noesd_h(),
	.pad_a_esd_0_h(),
	.pad_a_esd_1_h(),
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(ser_rx_core),
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    s8iom0s8_top_gpio_ovtv2 ser_tx_pad (
	.out(ser_tx_core),
	.oe_n(vss),
	.hld_h_n(vdd),
	.enable_h(porb_h),
	.enable_inp_h(loopb23),
	.enable_vdda_h(porb_h),
	.enable_vddio(vdd1v8),
	.enable_vswitch_h(vss),
	.inp_dis(vdd1v8),
	.vtrip_sel(vss),
	.hys_trim(vdd1v8),
	.slow(vss),
	.slew_ctl({vss, vss}),	// 2 bits
	.hld_ovr(vss),
	.analog_en(vss),
	.analog_sel(vss),
	.analog_pol(vss),
	.dm({vdd1v8, vdd1v8, vss}),		// 3 bits
	.ib_mode_sel({vss, vss}),	// 2 bits
	.vinref(vdd1v8),
	.vddio(vdd),
	.vddio_q(vddio_q),
	.vdda(vdd),
	.vccd(vdd1v8),
	.vswitch(vdd),
	.vcchib(vdd1v8),
	.vssa(vss),
	.vssd(vss),
	.vssio_q(vssio_q),
	.vssio(vss),
	.pad(ser_tx),
	.pad_a_noesd_h(),
	.pad_a_esd_0_h(),
	.pad_a_esd_1_h(),
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.in(),
	.in_h(),
	.tie_hi_esd(),
	.tie_lo_esd()
    );

    // Corner cells (These are overlay cells;  it is not clear what is normally
    // supposed to go under them.)
    s8iom0_corner_pad corner [3:0] (
	.vssio(vss),
	.vddio(vdd),
	.vddio_q(vddio_q),
	.vssio_q(vssio_q),
	.amuxbus_a(analog_a),
	.amuxbus_b(analog_b),
	.vssd(vss),
	.vssa(vss),
	.vswitch(vdd),
	.vdda(vdd),
	.vccd(vdd1v8),
	.vcchib(vdd1v8)
    );

    // SoC core

    wire [9:0]  adc0_data_core;
    wire [1:0]  adc0_inputsrc_core;
    wire [9:0]  adc1_data_core;
    wire [1:0]  adc1_inputsrc_core;
    wire [9:0]  dac_value_core;
    wire [1:0]  comp_ninputsrc_core;
    wire [1:0]  comp_pinputsrc_core;
    wire [7:0]  spi_ro_config_core;

	wire striVe_clk, striVe_rstn;

    striVe_clkrst clkrst(
`ifdef LVS
	.vdd1v8(vdd1v8),
	.vss(vss),
`endif		
	.ext_clk_sel(ext_clk_sel_core),
	.ext_clk(ext_clk_core),
	.pll_clk(pll_clk_core),
	.reset(por), 
	.ext_reset(ext_reset_core),
	.clk(striVe_clk),
	.resetn(striVe_rstn)
);

    striVe_soc core (
`ifdef LVS
	.vdd1v8(vdd1v8),
	.vss(vss),
`endif
    
	.pll_clk(pll_clk_core),
	.ext_clk(ext_clk_core),
	.ext_clk_sel(ext_clk_sel_core),
	/*
    .ext_reset(ext_reset_core),
	.reset(por),
    */
    .clk(striVe_clk),
    .resetn(striVe_rstn),
	.gpio_out_pad(gpio_out_core),
	.gpio_in_pad(gpio_in_core),
	.gpio_mode0_pad(gpio_mode0_core),
	.gpio_mode1_pad(gpio_mode1_core),
	.gpio_outenb_pad(gpio_outenb_core),
	.gpio_inenb_pad(gpio_inenb_core),
	.adc0_ena(adc0_ena_core),
	.adc0_convert(adc0_convert_core),
	.adc0_data(adc0_data_core),
	.adc0_done(adc0_done_core),
	.adc0_clk(adc0_clk_core),
	.adc0_inputsrc(adc0_inputsrc_core),
	.adc1_ena(adc1_ena_core),
	.adc1_convert(adc1_convert_core),
	.adc1_clk(adc1_clk_core),
	.adc1_inputsrc(adc1_inputsrc_core),
	.adc1_data(adc1_data_core),
	.adc1_done(adc1_done_core),
	.dac_ena(dac_ena_core),
	.dac_value(dac_value_core),
	.analog_out_sel(analog_out_sel_core),
	.opamp_ena(opamp_ena_core),
	.opamp_bias_ena(opamp_bias_ena_core),
	.bg_ena(bg_ena_core),
	.comp_ena(comp_ena_core),
	.comp_ninputsrc(comp_ninputsrc_core),
	.comp_pinputsrc(comp_pinputsrc_core),
	.rcosc_ena(rcosc_ena_core),
	.overtemp_ena(overtemp_ena_core),
	.overtemp(overtemp_core),
	.rcosc_in(rcosc_in_core),
	.xtal_in(xtal_in_core),
	.comp_in(comp_in_core),
	.spi_sck(SCK_core),
	.spi_ro_config(spi_ro_config_core),
	.spi_ro_xtal_ena(spi_ro_xtal_ena_core),
	.spi_ro_reg_ena(spi_ro_reg_ena_core),
	.spi_ro_pll_dco_ena(spi_ro_pll_dco_ena_core),
	.spi_ro_pll_div(spi_ro_pll_div_core),
	.spi_ro_pll_sel(spi_ro_pll_sel_core),
	.spi_ro_pll_trim(spi_ro_pll_trim_core),
	.spi_ro_mfgr_id(spi_ro_mfgr_id_core),
	.spi_ro_prod_id(spi_ro_prod_id_core),
	.spi_ro_mask_rev(spi_ro_mask_rev_core),
	.ser_tx(ser_tx_core),
	.ser_rx(ser_rx_core),
	.irq_pin(irq_pin_core),
	.irq_spi(irq_spi_core),
	.trap(trap_core),
	.flash_csb(flash_csb_core),
	.flash_clk(flash_clk_core),
	.flash_csb_oeb(flash_csb_oeb_core),
	.flash_clk_oeb(flash_clk_oeb_core),
	.flash_io0_oeb(flash_io0_oeb_core),
	.flash_io1_oeb(flash_io1_oeb_core),
	.flash_io2_oeb(flash_io2_oeb_core),
	.flash_io3_oeb(flash_io3_oeb_core),
	.flash_csb_ieb(flash_csb_ieb_core),
	.flash_clk_ieb(flash_clk_ieb_core),
	.flash_io0_ieb(flash_io0_ieb_core),
	.flash_io1_ieb(flash_io1_ieb_core),
	.flash_io2_ieb(flash_io2_ieb_core),
	.flash_io3_ieb(flash_io3_ieb_core),
	.flash_io0_do(flash_io0_do_core),
	.flash_io1_do(flash_io1_do_core),
	.flash_io2_do(flash_io2_do_core),
	.flash_io3_do(flash_io3_do_core),
	.flash_io0_di(flash_io0_di_core),
	.flash_io1_di(flash_io1_di_core),
	.flash_io2_di(flash_io2_di_core),
	.flash_io3_di(flash_io3_di_core)
    );

    // For the mask revision input, use an array of digital constant logic cells

    wire [3:0] mask_rev;

    scs8hd_conb_1 mask_rev_value [3:0] (
`ifdef LVS
	.vpwr(vdd1v8),
	.vgnd(vss),
`endif
	.HI(),
	.LO(mask_rev)
    );

    // Housekeeping SPI at 1.8V.

    striVe_spi housekeeping (
`ifdef LVS
	.vdd(vdd1v8),
	.vss(vss),
`endif
	.RSTB(porb_l),
	.SCK(SCK_core),
	.SDI(SDI_core),
	.CSB(CSB_core),
	.SDO(SDO_core),
	.sdo_enb(SDO_enb),
        .xtal_ena(spi_ro_xtal_ena_core),
	.reg_ena(spi_ro_reg_ena_core),
	.pll_dco_ena(spi_ro_pll_dco_ena_core),
	.pll_sel(spi_ro_pll_sel_core),
	.pll_div(spi_ro_pll_div_core),
        .pll_trim(spi_ro_pll_trim_core),
	.pll_bypass(ext_clk_sel_core),
	.irq(irq_spi_core),
	.RST(por),
	.reset(ext_reset_core),
	.trap(trap_core),
        .mfgr_id(spi_ro_mfgr_id_core),
	.prod_id(spi_ro_prod_id_core),
	.mask_rev_in(mask_rev),
	.mask_rev(spi_ro_mask_rev_core)
    );

    lvlshiftdown porb_level_shift (
`ifdef LVS
	.vpwr(vdd1v8),
	.vpb(vdd1v8),
	.vnb(vss),
	.vgnd(vss),
`endif
	.A(porb_h),
	.X(porb_l)
    );

    // On-board experimental digital PLL
    // Use xi_core, assumed to be a CMOS digital clock signal.  xo_core
    // is used as an output and set from pll_clk16.

    digital_pll pll (
`ifdef LVS
	.vdd(vdd1v8),
	.vss(vss),
`endif
	.reset(por),
	.extclk_sel(ext_clk_sel_core),
	.osc(xi_core),
	.clockc(pll_clk_core),
	.clockp({pll_clk_core0, pll_clk_core90}),
	.clockd({pll_clk2, pll_clk4, pll_clk8, pll_clk16}),
	.div(spi_ro_pll_div_core),
	.sel(spi_ro_pll_sel_core),
	.dco(spi_ro_pll_dco_ena_core),
	.ext_trim(spi_ro_pll_trim_core)
    );
	
endmodule
