blob: 9fe3a79676fc9640258eff3f58b8b92acaee8835 [file] [log] [blame]
module mgmt_core(
`ifdef LVS
inout vdd1v8,
inout vss,
`endif
input ext_clk,
output[ 15:0] gpio_out_pad, // Connect to out on gpio pad
input [15:0] gpio_in_pad, // Connect to in on gpio pad
output [15:0] gpio_mode0_pad, // Connect to dm[0] on gpio pad
output [15:0] gpio_mode1_pad, // Connect to dm[2] on gpio pad
output [15:0] gpio_outenb_pad, // Connect to oe_n on gpio pad
output [15:0] gpio_inenb_pad, // Connect to inp_dis on gpio pad
output adc0_ena,
output adc0_convert,
input [9:0] adc0_data,
input adc0_done,
output adc0_clk,
output [1:0] adc0_inputsrc,
output adc1_ena,
output adc1_convert,
output adc1_clk,
output [1:0] adc1_inputsrc,
input [9:0] adc1_data,
input adc1_done,
output dac_ena,
output [9:0] dac_value,
output analog_out_sel, // Analog output select (DAC or bandgap)
output opamp_ena, // Op-amp enable for analog output
output opamp_bias_ena, // Op-amp bias enable for analog output
output bg_ena, // Bandgap enable
output comp_ena,
output [1:0] comp_ninputsrc,
output [1:0] comp_pinputsrc,
output rcosc_ena,
output overtemp_ena,
input overtemp,
input rcosc_in, // RC oscillator output
input xtal_in, // crystal oscillator output
input comp_in, // comparator output
input spi_sck,
input [7:0] spi_ro_config,
output ser_tx,
input ser_rx,
// IRQ
input irq_pin, // dedicated IRQ pin
// Flash memory control (SPI master)
output flash_csb,
output flash_clk,
output flash_csb_oeb,
output flash_clk_oeb,
output flash_io0_oeb,
output flash_io1_oeb,
output flash_io2_oeb,
output flash_io3_oeb,
output flash_csb_ieb,
output flash_clk_ieb,
output flash_io0_ieb,
output flash_io1_ieb,
output flash_io2_ieb,
output flash_io3_ieb,
output flash_io0_do,
output flash_io1_do,
output flash_io2_do,
output flash_io3_do,
input flash_io0_di,
input flash_io1_di,
input flash_io2_di,
input flash_io3_di,
output por,
input porb_l,
input xi,
output pll_clk16,
input SDI_core,
input CSB_core,
output SDO_core,
output SDO_enb,
// 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_oen, // LA output enable
// Mega-Project Control Signals
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,
// 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 Switch
input xbar_ack_i,
input [31:0] xbar_dat_i,
output xbar_cyc_o,
output xbar_stb_o,
output xbar_we_o,
output [3:0] xbar_sel_o,
output [31:0] xbar_adr_o,
output [31:0] xbar_dat_o,
output striVe_clk,
output striVe_rstn
);
wire ext_clk_sel;
wire ext_clk;
wire pll_clk;
wire ext_reset;
striVe_clkrst clkrst(
`ifdef LVS
.vdd1v8(vdd1v8),
.vss(vss),
`endif
.ext_clk_sel(ext_clk_sel),
.ext_clk(ext_clk),
.pll_clk(pll_clk),
.reset(por),
.ext_reset(ext_reset),
.clk(striVe_clk),
.resetn(striVe_rstn)
);
// 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;
// HKSPI
wire [11:0] spi_ro_mfgr_id;
wire [7:0] spi_ro_prod_id;
wire [3:0] spi_ro_mask_rev;
wire [2:0] spi_ro_pll_sel;
wire [4:0] spi_ro_pll_div;
wire [25:0] spi_ro_pll_trim;
mgmt_soc soc (
`ifdef LVS
.vdd1v8(vdd1v8),
.vss(vss),
`endif
.pll_clk(pll_clk),
.ext_clk(ext_clk),
.ext_clk_sel(ext_clk_sel),
.clk(striVe_clk),
.resetn(striVe_rstn),
.gpio_out_pad(gpio_out_pad),
.gpio_in_pad(gpio_in_pad),
.gpio_mode0_pad(gpio_mode0_pad),
.gpio_mode1_pad(gpio_mode1_pad),
.gpio_outenb_pad(gpio_outenb_pad),
.gpio_inenb_pad(gpio_inenb_pad),
.adc0_ena(adc0_ena),
.adc0_convert(adc0_convert),
.adc0_data(adc0_data),
.adc0_done(adc0_done),
.adc0_clk(adc0_clk),
.adc0_inputsrc(adc0_inputsrc),
.adc1_ena(adc1_ena),
.adc1_convert(adc1_convert),
.adc1_clk(adc1_clk),
.adc1_inputsrc(adc1_inputsrc),
.adc1_data(adc1_data),
.adc1_done(adc1_done),
.dac_ena(dac_ena),
.dac_value(dac_value),
.analog_out_sel(analog_out_sel),
.opamp_ena(opamp_ena),
.opamp_bias_ena(opamp_bias_ena),
.bg_ena(bg_ena),
.comp_ena(comp_ena),
.comp_ninputsrc(comp_ninputsrc),
.comp_pinputsrc(comp_pinputsrc),
.rcosc_ena(rcosc_ena),
.overtemp_ena(overtemp_ena),
.overtemp(overtemp),
.rcosc_in(rcosc_in),
.xtal_in(xtal_in),
.comp_in(comp_in),
.spi_sck(spi_sck),
.spi_ro_config(spi_ro_config),
.spi_ro_xtal_ena(spi_ro_xtal_ena),
.spi_ro_reg_ena(spi_ro_reg_ena),
.spi_ro_pll_dco_ena(spi_ro_pll_dco_ena),
.spi_ro_pll_div(spi_ro_pll_div),
.spi_ro_pll_sel(spi_ro_pll_sel),
.spi_ro_pll_trim(spi_ro_pll_trim),
.spi_ro_mfgr_id(spi_ro_mfgr_id),
.spi_ro_prod_id(spi_ro_prod_id),
.spi_ro_mask_rev(spi_ro_mask_rev),
.ser_tx(ser_tx),
.ser_rx(ser_rx),
.irq_pin(irq_pin),
.irq_spi(irq_spi),
.trap(trap),
// Flash
.flash_csb(flash_csb),
.flash_clk(flash_clk),
.flash_csb_oeb(flash_csb_oeb),
.flash_clk_oeb(flash_clk_oeb),
.flash_io0_oeb(flash_io0_oeb),
.flash_io1_oeb(flash_io1_oeb),
.flash_io2_oeb(flash_io2_oeb),
.flash_io3_oeb(flash_io3_oeb),
.flash_csb_ieb(flash_csb_ieb),
.flash_clk_ieb(flash_clk_ieb),
.flash_io0_ieb(flash_io0_ieb),
.flash_io1_ieb(flash_io1_ieb),
.flash_io2_ieb(flash_io2_ieb),
.flash_io3_ieb(flash_io3_ieb),
.flash_io0_do(flash_io0_do),
.flash_io1_do(flash_io1_do),
.flash_io2_do(flash_io2_do),
.flash_io3_do(flash_io3_do),
.flash_io0_di(flash_io0_di),
.flash_io1_di(flash_io1_di),
.flash_io2_di(flash_io2_di),
.flash_io3_di(flash_io3_di),
// Logic Analyzer
.la_input(la_input),
.la_output(la_output),
.la_oen(la_oen),
// Mega-Project Control
.mprj_io_oeb_n(mprj_io_oeb_n),
.mprj_io_hldh_n(mprj_io_hldh_n),
.mprj_io_enh(mprj_io_enh),
.mprj_io_inp_dis(mprj_io_inp_dis),
.mprj_io_ib_mode_sel(mprj_io_ib_mode_sel),
.mprj_io_analog_en(mprj_io_analog_en),
.mprj_io_analog_sel(mprj_io_analog_sel),
.mprj_io_analog_pol(mprj_io_analog_pol),
.mprj_io_dm(mprj_io_dm),
// Mega Project Slave ports (WB MI A)
.mprj_cyc_o(mprj_cyc_o),
.mprj_stb_o(mprj_stb_o),
.mprj_we_o(mprj_we_o),
.mprj_sel_o(mprj_sel_o),
.mprj_adr_o(mprj_adr_o),
.mprj_dat_o(mprj_dat_o),
.mprj_ack_i(mprj_ack_i),
.mprj_dat_i(mprj_dat_i),
// Crossbar Switch
.xbar_cyc_o(xbar_cyc_o),
.xbar_stb_o(xbar_stb_o),
.xbar_we_o (xbar_we_o),
.xbar_sel_o(xbar_sel_o),
.xbar_adr_o(xbar_adr_o),
.xbar_dat_o(xbar_dat_o),
.xbar_ack_i(xbar_ack_i),
.xbar_dat_i(xbar_dat_i)
);
digital_pll pll (
`ifdef LVS
.vdd(vdd1v8),
.vss(vss),
`endif
.reset(por),
.extclk_sel(ext_clk_sel),
.osc(xi),
.clockc(pll_clk),
.clockp({pll_clk_core0, pll_clk_core90}),
.clockd({pll_clk2, pll_clk4, pll_clk8, pll_clk16}),
.div(spi_ro_pll_div),
.sel(spi_ro_pll_sel),
.dco(spi_ro_pll_dco_ena),
.ext_trim(spi_ro_pll_trim)
);
// For the mask revision input, use an array of digital constant logic cells
wire [3:0] mask_rev;
wire [3:0] no_connect;
scs8hd_conb_1 mask_rev_value [3:0] (
`ifdef LVS
.vpwr(vdd1v8),
.vpb(vdd1v8),
.vnb(vss),
.vgnd(vss),
`endif
.HI({no_connect[3:1], mask_rev[0]}),
.LO({mask_rev[3:1], no_connect[0]})
);
// Housekeeping SPI at 1.8V.
striVe_spi housekeeping (
`ifdef LVS
.vdd(vdd1v8),
.vss(vss),
`endif
.RSTB(porb_l),
.SCK(spi_sck),
.SDI(SDI_core),
.CSB(CSB_core),
.SDO(SDO_core),
.sdo_enb(SDO_enb),
.xtal_ena(spi_ro_xtal_ena),
.reg_ena(spi_ro_reg_ena),
.pll_dco_ena(spi_ro_pll_dco_ena),
.pll_sel(spi_ro_pll_sel),
.pll_div(spi_ro_pll_div),
.pll_trim(spi_ro_pll_trim),
.pll_bypass(ext_clk_sel),
.irq(irq_spi),
.RST(por),
.reset(ext_reset),
.trap(trap),
.mfgr_id(spi_ro_mfgr_id),
.prod_id(spi_ro_prod_id),
.mask_rev_in(mask_rev),
.mask_rev(spi_ro_mask_rev)
);
endmodule