blob: 48b369b61598e78829981bed5345e8ade95e2fdf [file] [log] [blame]
// Copyright 2023 The Pigweed Authors
//
// 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
//
// https://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.
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//
//////////////////////////////////////////////////////////////////////////////////
module top (
input clk_i,
input rst_i,
input op_mode_i,
output data_valid_o,
output led,
input ice_prog_spi_io0,
input ice_prog_spi_io1,
// spi secondary interface
input sl_sclk_i_0,
input sl_mosi_i_0,
input sl_cs_i_0,
output sl_miso_o_0,
// spi interfaces
//
input miso_i_1,
input alertl_i_1,
output sclk_o_1,
output mosi_o_1,
output cs_o_1,
//
input miso_i_2,
input alertl_i_2,
output sclk_o_2,
output mosi_o_2,
output cs_o_2,
//
input miso_i_3,
input alertl_i_3,
output sclk_o_3,
output mosi_o_3,
output cs_o_3,
//
input miso_i_4,
input alertl_i_4,
output sclk_o_4,
output mosi_o_4,
output cs_o_4,
//
input miso_i_5,
input alertl_i_5,
output sclk_o_5,
output mosi_o_5,
output cs_o_5,
//
input miso_i_6,
input alertl_i_6,
output sclk_o_6,
output mosi_o_6,
output cs_o_6,
//
input miso_i_7,
input alertl_i_7,
output sclk_o_7,
output mosi_o_7,
output cs_o_7,
//
input miso_i_8,
input alertl_i_8,
output sclk_o_8,
output mosi_o_8,
output cs_o_8,
//
input miso_i_9,
input alertl_i_9,
output sclk_o_9,
output mosi_o_9,
output cs_o_9,
//
input miso_i_10,
input alertl_i_10,
output sclk_o_10,
output mosi_o_10,
output cs_o_10,
//
input miso_i_11,
input alertl_i_11,
output sclk_o_11,
output mosi_o_11,
output cs_o_11
);
wire rst_i_sync, poll_dn_w, mclk, en_w, r_w_en_w, mode_i_sync, trf_dn_w, dn_clr;
wire [ 5:0] rwaddr_w;
wire [10:0] adc_select_w;
wire [11:0] poll_dn_bus_w;
wire [15:0] wdata_w;
wire [23:0] vbus_1,vshunt_1,vbus_2,vshunt_2 ,vbus_3 ,vshunt_3 ,vbus_4 ,vshunt_4 ,vbus_5 ,vshunt_5 ,vbus_6 ,vshunt_6 ;
wire [23:0] vbus_7 ,vshunt_7,vbus_8 ,vshunt_8 ,vbus_9 ,vshunt_9 ,vbus_10 ,vshunt_10 ,vbus_11 ,vshunt_11;
wire [39:0] rdata_w;
//assign ice_prog_spi_io0 = 1'bz; assigned as input. same as output hi-z.
//assign ice_prog_spi_io1 = 1'bz;
pll pll_inst (
.clock_in (clk_i),
.clock_out(mclk)
);
assign led = count[25];
reg [25:0] count;
initial count = 0;
always @(posedge mclk) begin
count <= count + 1;
end
spi_s_core spi_s_core_inst (
.sclk_i(sl_sclk_i_0),
.mosi_i(sl_mosi_i_0),
.cs_i(sl_cs_i_0),
.miso_o(sl_miso_o_0),
//
.mclk_i(mclk),
.rst_i(rst_i_sync),
.en_o(en_w),
.rwaddr_o(rwaddr_w),
.adc_sel_o(adc_select_w),
.wdata_o(wdata_w),
.r_w_en_o(r_w_en_w),
.data_valid_o(data_valid_o),
.mode_i(mode_i_sync),
.rdata_i(rdata_w),
.poll_dn_i(poll_dn_w),
.dn_i(trf_dn_w),
.dn_clr_o(dn_clr),
.vbus_1(vbus_1),
.vshunt_1(vshunt_1),
.vbus_2(vbus_2),
.vshunt_2(vshunt_2),
.vbus_3(vbus_3),
.vshunt_3(vshunt_3),
.vbus_4(vbus_4),
.vshunt_4(vshunt_4),
.vbus_5(vbus_5),
.vshunt_5(vshunt_5),
.vbus_6(vbus_6),
.vshunt_6(vshunt_6),
.vbus_7(vbus_7),
.vshunt_7(vshunt_7),
.vbus_8(vbus_8),
.vshunt_8(vshunt_8),
.vbus_9(vbus_9),
.vshunt_9(vshunt_9),
.vbus_10(vbus_10),
.vshunt_10(vshunt_10),
.vbus_11(vbus_11),
.vshunt_11(vshunt_11)
);
//
// .vbus_1(1),// vbus_1),
// .vshunt_1(2),
// .vbus_2(3),
// .vshunt_2(4),
// .vbus_3(5),
// .vshunt_3(6),
// .vbus_4(7),
// .vshunt_4(8),
// .vbus_5(9),
// .vshunt_5(10),
// .vbus_6(11),
// .vshunt_6(12),
// .vbus_7(13),
// .vshunt_7(14),
// .vbus_8(15),
// .vshunt_8(16),
// .vbus_9(17),
// .vshunt_9(19),
// .vbus_10(20),
// .vshunt_10(21),
// .vbus_11(22),
// .vshunt_11(23));
rst_sync rst_sync_inst (
.clk_i(mclk),
.rst_i(rst_i),
.rst_o(rst_i_sync)
);
sig_sync op_mode_sync (
.clk_i(mclk),
.rst_i(rst_i_sync),
.sig_i(op_mode_i),
.sig_o(mode_i_sync)
);
csa_ctl_top csa_ctl_top_inst (
.mclk_i(mclk),
.rst_i(rst_i_sync),
.r_w_en_i(r_w_en_w),
.en_i(en_w),
.mode_i(mode_i_sync),
.rwaddr_i(rwaddr_w),
.adc_sel_i(adc_select_w),
.wdata_i(wdata_w),
.dn_o(trf_dn_w),
.rdata_o(rdata_w),
//
.dn_clr_i(dn_clr), // Use to clear data-valid. Short to trf_dn_o of spi core.
.poll_dn_o(poll_dn_w),
// .poll_dn(),// NC. Only for bringup
// spi
.miso_i_1(miso_i_1),
.alertl_i_1(alertl_i_1),
.sclk_o_1(sclk_o_1),
.mosi_o_1(mosi_o_1),
.cs_o_1(cs_o_1),
.miso_i_2(miso_i_2),
.alertl_i_2(alertl_i_2),
.sclk_o_2(sclk_o_2),
.mosi_o_2(mosi_o_2),
.cs_o_2(cs_o_2),
.miso_i_3(miso_i_3),
.alertl_i_3(alertl_i_3),
.sclk_o_3(sclk_o_3),
.mosi_o_3(mosi_o_3),
.cs_o_3(cs_o_3),
.miso_i_4(miso_i_4),
.alertl_i_4(alertl_i_4),
.sclk_o_4(sclk_o_4),
.mosi_o_4(mosi_o_4),
.cs_o_4(cs_o_4),
.miso_i_5(miso_i_5),
.alertl_i_5(alertl_i_5),
.sclk_o_5(sclk_o_5),
.mosi_o_5(mosi_o_5),
.cs_o_5(cs_o_5),
.miso_i_6(miso_i_6),
.alertl_i_6(alertl_i_6),
.sclk_o_6(sclk_o_6),
.mosi_o_6(mosi_o_6),
.cs_o_6(cs_o_6),
.miso_i_7(miso_i_7),
.alertl_i_7(alertl_i_7),
.sclk_o_7(sclk_o_7),
.mosi_o_7(mosi_o_7),
.cs_o_7(cs_o_7),
.miso_i_8(miso_i_8),
.alertl_i_8(alertl_i_8),
.sclk_o_8(sclk_o_8),
.mosi_o_8(mosi_o_8),
.cs_o_8(cs_o_8),
.miso_i_9(miso_i_9),
.alertl_i_9(alertl_i_9),
.sclk_o_9(sclk_o_9),
.mosi_o_9(mosi_o_9),
.cs_o_9(cs_o_9),
.miso_i_10(miso_i_10),
.alertl_i_10(alertl_i_10),
.sclk_o_10(sclk_o_10),
.mosi_o_10(mosi_o_10),
.cs_o_10(cs_o_10),
.miso_i_11(miso_i_11),
.alertl_i_11(alertl_i_11),
.sclk_o_11(sclk_o_11),
.mosi_o_11(mosi_o_11),
.cs_o_11(cs_o_11),
//
.vbus_1(vbus_1),
.vshunt_1(vshunt_1),
.vbus_2(vbus_2),
.vshunt_2(vshunt_2),
.vbus_3(vbus_3),
.vshunt_3(vshunt_3),
.vbus_4(vbus_4),
.vshunt_4(vshunt_4),
.vbus_5(vbus_5),
.vshunt_5(vshunt_5),
.vbus_6(vbus_6),
.vshunt_6(vshunt_6),
.vbus_7(vbus_7),
.vshunt_7(vshunt_7),
.vbus_8(vbus_8),
.vshunt_8(vshunt_8),
.vbus_9(vbus_9),
.vshunt_9(vshunt_9),
.vbus_10(vbus_10),
.vshunt_10(vshunt_10),
.vbus_11(vbus_11),
.vshunt_11(vshunt_11)
);
endmodule