`timescale 1 ns / 1 ps module c64pro_top# ( parameter VERSION = 32'h20000005 , parameter CLK_FREQ = 100 , parameter CLK_PERIOD = 10 , //----------------------------------------- RHS2116 parameter RSH2116_QTY = 4 , //----------------------------------------- ADS1299 parameter ADS1299_QTY = 8 , parameter ADS1299_SPI_QTY = 4 ) ( //--------------------------------------------- PS: DDR inout [14:0] DDR_addr , inout [ 2:0] DDR_ba , inout DDR_cas_n , inout DDR_ck_n , inout DDR_ck_p , inout DDR_cke , inout DDR_cs_n , inout [ 3:0] DDR_dm , inout [31:0] DDR_dq , inout [ 3:0] DDR_dqs_n , inout [ 3:0] DDR_dqs_p , inout DDR_odt , inout DDR_ras_n , inout DDR_reset_n , inout DDR_we_n , inout FIXED_IO_ddr_vrn , inout FIXED_IO_ddr_vrp , inout [53:0] FIXED_IO_mio , inout FIXED_IO_ps_clk , inout FIXED_IO_ps_porb , inout FIXED_IO_ps_srstb , //--------------------------------------------- Power Management inout gauge_scl , inout gauge_sda , input gauge_indicate , output power_on_rsh2116_a , //analog output power_on_rsh2116_d , //digtal output power_on_ads1299 , output power_on_z , output power_sw_z , //--------------------------------------------- impl measure inout z_scl , inout z_sda , //--------------------------------------------- Display LED output led_state , // output led_charge , output led_wifi , output led_stim , //--------------------------------------------- RSH2116 output [RSH2116_QTY-1:0] rsh2116_enable , output [RSH2116_QTY-1:0] rsh2116_spi_cs , output [RSH2116_QTY-1:0] rsh2116_spi_sclk , output [RSH2116_QTY-1:0] rsh2116_spi_mosi , input [RSH2116_QTY-1:0] rsh2116_spi_miso , //--------------------------------------------- ADS1299 for EEG output [ADS1299_QTY-1:0] eeg_ads1299_spi_cs , output [ 4-1:0] eeg_ads1299_spi_sclk , output [ 4-1:0] eeg_ads1299_spi_mosi , input [ 4-1:0] eeg_ads1299_spi_miso , input [ 4-1:0] eeg_ads1299_drdy_n , output eeg_ads1299_start , //--------------------------------------------- ADS1299 for EMG output emg_ads1299_spi_cs , output emg_ads1299_spi_sclk , output emg_ads1299_spi_mosi , input emg_ads1299_spi_miso , input emg_ads1299_drdy_n , output emg_ads1299_start , output emg_ads1299_reset_n , output emg_ads1299_pwdn_n , //--------------------------------------------- ADG1414 output adg1414_spi_sync , output adg1414_spi_sclk , output adg1414_spi_mosi , input adg1414_spi_miso , //--------------------------------------------- MEMS output accel_spi_cs , output accel_spi_sclk , output accel_spi_mosi , inout accel_spi_miso , input accel_int0 , input accel_int1 , //--------------------------------------------- Trigger input [ 3-1:0] trigger_i , output reg [ 1-1:0] trigger_o , //--------------------------------------------- usb plug check input usb_power_check , //--------------------------------------------- For developer output [ 2-1:0] led_pl ); //***************************************************************************** // Parameter definition //***************************************************************************** //***************************************************************************** // Internal register and wire declarations //***************************************************************************** wire clk ; wire rst_n ; wire [13-1:0] bram_stim_addr ; wire bram_stim_clk ; wire [32-1:0] bram_stim_din ; wire [32-1:0] bram_stim_dout ; wire bram_stim_en ; wire bram_stim_rst ; wire [ 4-1:0] bram_stim_we ; wire [13-1:0] bram_eeg_addr ; wire bram_eeg_clk ; wire [32-1:0] bram_eeg_din ; wire [32-1:0] bram_eeg_dout ; wire bram_eeg_en ; wire bram_eeg_rst ; wire [ 4-1:0] bram_eeg_we ; wire [13-1:0] bram_emg_addr ; wire bram_emg_clk ; wire [32-1:0] bram_emg_din ; wire [32-1:0] bram_emg_dout ; wire bram_emg_en ; wire bram_emg_rst ; wire [ 4-1:0] bram_emg_we ; wire [13-1:0] bram_accel_addr ; wire bram_accel_clk ; wire [32-1:0] bram_accel_din ; wire [32-1:0] bram_accel_dout ; wire bram_accel_en ; wire bram_accel_rst ; wire [ 4-1:0] bram_accel_we ; wire [13-1:0] bram_msg_addr ; wire bram_msg_clk ; wire [32-1:0] bram_msg_din ; wire [32-1:0] bram_msg_dout ; wire bram_msg_en ; wire bram_msg_rst ; wire [ 4-1:0] bram_msg_we ; wire stim_int ; wire eeg_int ; wire emg_int ; wire accel_int ; wire [32-1:0] axis_stim_tdata ; wire axis_stim_tlast ; wire axis_stim_tready ; wire axis_stim_tvalid ; wire axis_record_tfull ; wire [ 8-1:0] axis_record_tdata ; wire [ 1-1:0] axis_record_tkeep ; wire axis_record_tlast ; wire axis_record_tready ; wire axis_record_tvalid ; wire [ 8-1:0] gpio0_0_tri_i ; wire [32-1:0] gpio0_1_tri_o ; wire [ 4-1:0] debug_sig ; wire [ADS1299_QTY-1:0] eeg_spi_cs ; wire [ 4-1:0] eeg_spi_sclk ; wire [ 4-1:0] eeg_spi_mosi ; wire [ 4-1:0] eeg_spi_miso ; wire trigger_reset ; wire [32-1:0] trigger_in ; wire [32-1:0] trigger_out ; wire [ 3-1:0] led_cmd_wifi ; //***************************************************************************** // Instantiation //***************************************************************************** design_a9_1_wrapper u_ps_a9_1 ( .clk ( clk ), .rst_n ( rst_n ), .DDR_addr ( DDR_addr ), .DDR_ba ( DDR_ba ), .DDR_cas_n ( DDR_cas_n ), .DDR_ck_n ( DDR_ck_n ), .DDR_ck_p ( DDR_ck_p ), .DDR_cke ( DDR_cke ), .DDR_cs_n ( DDR_cs_n ), .DDR_dm ( DDR_dm ), .DDR_dq ( DDR_dq ), .DDR_dqs_n ( DDR_dqs_n ), .DDR_dqs_p ( DDR_dqs_p ), .DDR_odt ( DDR_odt ), .DDR_ras_n ( DDR_ras_n ), .DDR_reset_n ( DDR_reset_n ), .DDR_we_n ( DDR_we_n ), .FIXED_IO_ddr_vrn ( FIXED_IO_ddr_vrn ), .FIXED_IO_ddr_vrp ( FIXED_IO_ddr_vrp ), .FIXED_IO_mio ( FIXED_IO_mio ), .FIXED_IO_ps_clk ( FIXED_IO_ps_clk ), .FIXED_IO_ps_porb ( FIXED_IO_ps_porb ), .FIXED_IO_ps_srstb ( FIXED_IO_ps_srstb ), .int0 ( stim_int ), .int1 ( eeg_int ), .int2 ( emg_int ), .int3 ( accel_int ), .bram_stim_addr ( bram_stim_addr ), .bram_stim_clk ( bram_stim_clk ), .bram_stim_din ( bram_stim_din ), .bram_stim_dout ( bram_stim_dout ), .bram_stim_en ( bram_stim_en ), .bram_stim_rst ( bram_stim_rst ), .bram_stim_we ( bram_stim_we ), .bram_eeg_addr ( bram_eeg_addr ), .bram_eeg_clk ( bram_eeg_clk ), .bram_eeg_din ( bram_eeg_din ), .bram_eeg_dout ( bram_eeg_dout ), .bram_eeg_en ( bram_eeg_en ), .bram_eeg_rst ( bram_eeg_rst ), .bram_eeg_we ( bram_eeg_we ), .bram_emg_addr ( bram_emg_addr ), .bram_emg_clk ( bram_emg_clk ), .bram_emg_din ( bram_emg_din ), .bram_emg_dout ( bram_emg_dout ), .bram_emg_en ( bram_emg_en ), .bram_emg_rst ( bram_emg_rst ), .bram_emg_we ( bram_emg_we ), .bram_mems_addr ( bram_accel_addr ), .bram_mems_clk ( bram_accel_clk ), .bram_mems_din ( bram_accel_din ), .bram_mems_dout ( bram_accel_dout ), .bram_mems_en ( bram_accel_en ), .bram_mems_rst ( bram_accel_rst ), .bram_mems_we ( bram_accel_we ), .bram_msg_addr ( bram_msg_addr ), .bram_msg_clk ( bram_msg_clk ), .bram_msg_din ( bram_msg_din ), .bram_msg_dout ( bram_msg_dout ), .bram_msg_en ( bram_msg_en ), .bram_msg_rst ( bram_msg_rst ), .bram_msg_we ( bram_msg_we ), .m_axis_stim_tdata ( axis_stim_tdata ), .m_axis_stim_tlast ( axis_stim_tlast ), .m_axis_stim_tready ( axis_stim_tready ), .m_axis_stim_tvalid ( axis_stim_tvalid ), .s_axis_record_tfull ( axis_record_tfull ), .s_axis_record_tdata ( axis_record_tdata ), .s_axis_record_tkeep ( axis_record_tkeep ), .s_axis_record_tlast ( axis_record_tlast ), .s_axis_record_tready ( axis_record_tready ), .s_axis_record_tvalid ( axis_record_tvalid ), .gpio0_0_tri_i ( gpio0_0_tri_i ), .gpio0_1_tri_o ( gpio0_1_tri_o ), //gauge .iic0_scl_io ( gauge_scl ), .iic0_sda_io ( gauge_sda ), //Z .iic1_scl_io ( z_scl ), .iic1_sda_io ( z_sda ) ); pl_top# ( .VERSION ( VERSION ), .CLK_FREQ ( CLK_FREQ ), .CLK_PERIOD ( CLK_PERIOD ), .RSH2116_QTY ( RSH2116_QTY ), .ADS1299_QTY ( ADS1299_QTY ), .ADS1299_SPI_QTY ( ADS1299_SPI_QTY ) ) u_pl_top ( .clk ( clk ), .rst_n ( rst_n ), .bram_stim_addr ( bram_stim_addr ), .bram_stim_clk ( bram_stim_clk ), .bram_stim_din ( bram_stim_din ), .bram_stim_dout ( bram_stim_dout ), .bram_stim_en ( bram_stim_en ), .bram_stim_rst ( bram_stim_rst ), .bram_stim_we ( bram_stim_we ), .bram_eeg_addr ( bram_eeg_addr ), .bram_eeg_clk ( bram_eeg_clk ), .bram_eeg_din ( bram_eeg_din ), .bram_eeg_dout ( bram_eeg_dout ), .bram_eeg_en ( bram_eeg_en ), .bram_eeg_rst ( bram_eeg_rst ), .bram_eeg_we ( bram_eeg_we ), .bram_emg_addr ( bram_emg_addr ), .bram_emg_clk ( bram_emg_clk ), .bram_emg_din ( bram_emg_din ), .bram_emg_dout ( bram_emg_dout ), .bram_emg_en ( bram_emg_en ), .bram_emg_rst ( bram_emg_rst ), .bram_emg_we ( bram_emg_we ), .bram_accel_addr ( bram_accel_addr ), .bram_accel_clk ( bram_accel_clk ), .bram_accel_din ( bram_accel_din ), .bram_accel_dout ( bram_accel_dout ), .bram_accel_en ( bram_accel_en ), .bram_accel_rst ( bram_accel_rst ), .bram_accel_we ( bram_accel_we ), .bram_msg_addr ( bram_msg_addr ), .bram_msg_clk ( bram_msg_clk ), .bram_msg_din ( bram_msg_din ), .bram_msg_dout ( bram_msg_dout ), .bram_msg_en ( bram_msg_en ), .bram_msg_rst ( bram_msg_rst ), .bram_msg_we ( bram_msg_we ), .stim_int ( stim_int ), .eeg_int ( eeg_int ), .emg_int ( emg_int ), .accel_int ( accel_int ), //------------------------------------------ FIFO: stim input and record output .m_axis_stim_tdata ( axis_stim_tdata ), .m_axis_stim_tlast ( axis_stim_tlast ), .m_axis_stim_tready ( axis_stim_tready ), .m_axis_stim_tvalid ( axis_stim_tvalid ), .m_axis_record_tfull ( axis_record_tfull ), .m_axis_record_tdata ( axis_record_tdata ), .m_axis_record_tkeep ( axis_record_tkeep ), .m_axis_record_tlast ( axis_record_tlast ), .m_axis_record_tready ( axis_record_tready ), .m_axis_record_tvalid ( axis_record_tvalid ), //------------------------------------------ device: RHS2116 .rsh2116_enable ( rsh2116_enable ), .rsh2116_spi_cs ( rsh2116_spi_cs ), .rsh2116_spi_sclk ( rsh2116_spi_sclk ), .rsh2116_spi_mosi ( rsh2116_spi_mosi ), .rsh2116_spi_miso ( rsh2116_spi_miso ), //------------------------------------------ device: ads1299 eeg .eeg_ads1299_spi_cs ( eeg_spi_cs ), .eeg_ads1299_spi_sclk ( eeg_spi_sclk ), .eeg_ads1299_spi_mosi ( eeg_spi_mosi ), .eeg_ads1299_spi_miso ( eeg_spi_miso ), .eeg_ads1299_drdy_n ( eeg_ads1299_drdy_n ), .eeg_ads1299_start ( eeg_ads1299_start ), //------------------------------------------ device: ads1299 emg .emg_ads1299_spi_cs ( emg_ads1299_spi_cs ), .emg_ads1299_spi_sclk ( emg_ads1299_spi_sclk ), .emg_ads1299_spi_mosi ( emg_ads1299_spi_mosi ), .emg_ads1299_spi_miso ( emg_ads1299_spi_miso ), .emg_ads1299_drdy_n ( emg_ads1299_drdy_n ), .emg_ads1299_start ( emg_ads1299_start ), .emg_ads1299_reset_n ( emg_ads1299_reset_n ), .emg_ads1299_pwdn_n ( emg_ads1299_pwdn_n ), //------------------------------------------ device: MEMS .accel_spi_cs ( accel_spi_cs ), .accel_spi_sclk ( accel_spi_sclk ), .accel_spi_mosi ( accel_spi_mosi ), .accel_spi_miso ( accel_spi_miso ), .accel_int0 ( accel_int0 ), .accel_int1 ( accel_int1 ), //------------------------------------------ ADG1414 .adg1414_spi_sync ( adg1414_spi_sync ), .adg1414_spi_sclk ( adg1414_spi_sclk ), .adg1414_spi_mosi ( adg1414_spi_mosi ), .adg1414_spi_miso ( adg1414_spi_miso ), //------------------------------------------ Trigger .trigger_reset ( trigger_reset ), .trigger_in ( trigger_in ), .trigger_out ( trigger_out ), //------------------------------------------ Debug .debug_sig ( debug_sig ) ); led_ctrl# ( .CLK_PERIOD ( CLK_PERIOD ) ) u_led_wifi ( .clk ( clk ), .rst_n ( rst_n ), .cmd ( led_cmd_wifi ), .led ( led_wifi ) ); //***************************************************************************** always @ ( posedge clk or negedge rst_n ) begin if( !rst_n ) trigger_o <= 1'b0; else if ( trigger_out==32'h000003E8 ) trigger_o <= 1'b1; else if ( trigger_out==32'h000003E9 ) trigger_o <= 1'b0; end //***************************************************************************** // Wire assignment //***************************************************************************** //gpio0_0: input with interrupt assign gpio0_0_tri_i[0] = gauge_indicate; assign gpio0_0_tri_i[1] = accel_int0; assign gpio0_0_tri_i[2] = accel_int1; assign gpio0_0_tri_i[3] = usb_power_check; assign gpio0_0_tri_i[4] = 1'b0; assign gpio0_0_tri_i[5] = 1'b0; assign gpio0_0_tri_i[6] = 1'b0; assign gpio0_0_tri_i[7] = 1'b0; //gpio0_1: output assign power_on_rsh2116_a = gpio0_1_tri_o[ 0]; assign power_on_rsh2116_d = gpio0_1_tri_o[ 1]; assign power_on_ads1299 = gpio0_1_tri_o[ 2]; assign led_state = gpio0_1_tri_o[ 3]; assign led_stim = gpio0_1_tri_o[ 4]; assign led_cmd_wifi[0] = gpio0_1_tri_o[ 5]; assign led_cmd_wifi[1] = gpio0_1_tri_o[ 6]; assign led_cmd_wifi[2] = gpio0_1_tri_o[ 7]; assign trigger_reset = gpio0_1_tri_o[ 8]; assign power_on_z = gpio0_1_tri_o[ 9]; assign power_sw_z = gpio0_1_tri_o[10]; assign trigger_in = {29'd0, trigger_i}; // assign trigger_o = (trigger_out==32'h000003E8)? 1'b1:((trigger_out==32'h000003E9)? 1'b1:1'b0); assign led_pl[1] = 1'b0; assign led_pl[0] = 1'b0; // assign led_pl[1] = debug_sig[0]; //r75 // assign led_pl[0] = debug_sig[1]; //r76 // assign led_state = debug_sig[2]; // assign led_stim = debug_sig[3]; assign eeg_ads1299_spi_cs[0] = eeg_spi_cs[0]; assign eeg_ads1299_spi_cs[1] = eeg_spi_cs[1]; assign eeg_ads1299_spi_cs[2] = eeg_spi_cs[2]; assign eeg_ads1299_spi_cs[3] = eeg_spi_cs[3]; assign eeg_ads1299_spi_cs[4] = eeg_spi_cs[4]; assign eeg_ads1299_spi_cs[5] = eeg_spi_cs[5]; assign eeg_ads1299_spi_cs[6] = eeg_spi_cs[6]; assign eeg_ads1299_spi_cs[7] = eeg_spi_cs[7]; assign eeg_ads1299_spi_sclk[0] = eeg_spi_sclk[0]; assign eeg_ads1299_spi_sclk[1] = eeg_spi_sclk[1]; assign eeg_ads1299_spi_sclk[2] = eeg_spi_sclk[2]; assign eeg_ads1299_spi_sclk[3] = eeg_spi_sclk[3]; assign eeg_ads1299_spi_mosi[0] = eeg_spi_mosi[0]; assign eeg_ads1299_spi_mosi[1] = eeg_spi_mosi[1]; assign eeg_ads1299_spi_mosi[2] = eeg_spi_mosi[2]; assign eeg_ads1299_spi_mosi[3] = eeg_spi_mosi[3]; assign eeg_spi_miso[0] = eeg_ads1299_spi_miso[0]; assign eeg_spi_miso[1] = eeg_ads1299_spi_miso[1]; assign eeg_spi_miso[2] = eeg_ads1299_spi_miso[2]; assign eeg_spi_miso[3] = eeg_ads1299_spi_miso[3]; endmodule