`timescale 1 ns / 1 ps module transmit_config# ( parameter CHIPSET_QTY = 4 ) ( input clk , input rst_n , input [13-1:0] bram_addr , input bram_clk , input [32-1:0] bram_din , output reg [32-1:0] bram_dout , input bram_en , input bram_rst , input [ 4-1:0] bram_we , output reg [CHIPSET_QTY-1:0] stim_en , output reg [32-1:0] update_period , output reg enable_timer , output reg dds_by_ps , output reg dds_aclken , output dds_aresetn , output reg sw_enable , output reg sw_data_sel , output reg [64-1:0] sw_data_0 , input [64-1:0] sw_state , output [ 8*16*CHIPSET_QTY-1:0] stim_trim_p_array_array , output [ 8*16*CHIPSET_QTY-1:0] stim_trim_n_array_array , output reg phase_enable , output [32*16-1:0] phase_inc_array , output [32*16-1:0] phase_off_array , input [64-1:0] stim_monitor_rt , input [64-1:0] stim_monitor_latch , output [ 1*CHIPSET_QTY-1:0] spi_cmd_valid_array , output [32*CHIPSET_QTY-1:0] spi_cmd_data_array , input [ 1*CHIPSET_QTY-1:0] spi_cmd_ready_array , input [ 1*CHIPSET_QTY-1:0] spi_res_en_array , input [32*CHIPSET_QTY-1:0] spi_res_array ); //***************************************************************************** // localparam definition //***************************************************************************** localparam BRAM_ADDR_TEST_RW = 13'h0000; localparam BRAM_ADDR_TEST_RO_DATA = 13'h0004; localparam BRAM_ADDR_STIM_ENABLE = 13'h0010; localparam BRAM_ADDR_UPDATE_PERIOD = 13'h0020; localparam BRAM_ADDR_UPLOAD_ROUND_NUM = 13'h0024; //Unused localparam BRAM_ADDR_ENABLE = 13'h0028; localparam BRAM_ADDR_DDS_CTRL = 13'h002C; localparam BRAM_ADDR_DDS_PHASE_TRIG = 13'h0030; //Unused localparam BRAM_ADDR_SWITCH_CTRL = 13'h0034; localparam BRAM_ADDR_SWITCH_DATA0 = 13'h0040; localparam BRAM_ADDR_SWITCH_DATA1 = 13'h0044; localparam BRAM_ADDR_CUR_MON_RESET = 13'h0048; //Unused localparam BRAM_ADDR_CUR_MON_STATE0 = 13'h0050; localparam BRAM_ADDR_CUR_MON_STATE1 = 13'h0054; localparam BRAM_ADDR_CUR_MON_LATCH0 = 13'h0060; localparam BRAM_ADDR_CUR_MON_LATCH1 = 13'h0064; localparam BRAM_ADDR_SPI_STATE_MASK = 13'h1F80; localparam BRAM_ADDR_SPI_STATE_START = 13'h0100; localparam BRAM_ADDR_SPI_TX_MASK = 13'h1F80; localparam BRAM_ADDR_SPI_TX_START = 13'h0180; localparam BRAM_ADDR_SPI_RX_MASK = 13'h1F80; localparam BRAM_ADDR_SPI_RX_START = 13'h0200; localparam BRAM_ADDR_SPI_ERR_MASK = 13'h1F80; localparam BRAM_ADDR_SPI_ERR_START = 13'h0280; localparam BRAM_ADDR_DDS_PHASE_INC_MASK = 13'h1F80; localparam BRAM_ADDR_DDS_PHASE_INC_START = 13'h0400; localparam BRAM_ADDR_DDS_PHASE_OFF_MASK = 13'h1F80; localparam BRAM_ADDR_DDS_PHASE_OFF_START = 13'h0480; localparam BRAM_ADDR_STIM_TRIM_P_MASK = 13'h1F00; localparam BRAM_ADDR_STIM_TRIM_P_START = 13'h0600; localparam BRAM_ADDR_STIM_TRIM_N_MASK = 13'h1F00; localparam BRAM_ADDR_STIM_TRIM_N_START = 13'h0700; //***************************************************************************** // Internal register and wire declarations //***************************************************************************** reg [32-1:0] test_data ; wire bram_wr_valid ; wire bram_rd_valid ; reg [32-1:0] spi_state_r[0:CHIPSET_QTY-1] ; reg dds_areset ; reg [32-1:0] spi_cmd_data[0:CHIPSET_QTY-1] ; reg spi_cmd_valid[0:CHIPSET_QTY-1] ; wire spi_cmd_ready[0:CHIPSET_QTY-1] ; wire spi_res_en[0:CHIPSET_QTY-1] ; wire [32-1:0] spi_res[0:CHIPSET_QTY-1] ; reg [32-1:0] spi_res_r[0:CHIPSET_QTY-1] ; reg [ 8-1:0] stim_trim_p[0:16*CHIPSET_QTY-1] ; reg [ 8-1:0] stim_trim_n[0:16*CHIPSET_QTY-1] ; reg [32-1:0] dds_phase_inc[0:16-1] ; reg [32-1:0] dds_phase_off[0:16-1] ; reg [32-1:0] unknow_data ; reg [ 5-1:0] spi_cmd_chip ; integer n; genvar i; genvar j; //***************************************************************************** // Procedural blocks //***************************************************************************** generate for(i=0;i