Files
BSI-901-fpga-software/c64_pro.srcs/sources_1/rtl/pl_top.v
T
2026-09-11 16:18:36 +08:00

814 lines
29 KiB
Verilog
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
`timescale 1 ns / 1 ps
module pl_top#
(
parameter VERSION = 32'h10000001 ,
parameter CLK_FREQ = 100 ,
parameter CLK_PERIOD = 10 ,
//----------------------------------------- RHS2116
parameter RSH2116_QTY = 2 ,//4
parameter RHS2116_SPI_CLK_DIV = 4 ,
parameter RSH2116_SPI_PERIOD = 1500 ,
//----------------------------------------- ADS1299
parameter ADS1299_QTY = 4 ,//8
parameter ADS1299_CH = 8 ,
parameter ADS1299_SPI_CLK_DIV = 4 ,
parameter ADS1299_SPI_QTY = 4 ,
parameter ADS1299_SPI_SLAVE_QTY = 2 ,
parameter ADS1299_SPI_PERIOD = 2000 ,
parameter EMG_CHIPSET_QTY = 1 ,
parameter EMG_SPIS_QTY = 1 ,
parameter EMG_SPI_SLAVE_QTY = 1
)
(
input clk ,
input rst_n ,
//--------------------------------------------- PS:
input [12:0] bram_stim_addr ,
input bram_stim_clk ,
input [31:0] bram_stim_din ,
output [31:0] bram_stim_dout ,
input bram_stim_en ,
input bram_stim_rst ,
input [ 3:0] bram_stim_we ,
input [12:0] bram_eeg_addr ,
input bram_eeg_clk ,
input [31:0] bram_eeg_din ,
output [31:0] bram_eeg_dout ,
input bram_eeg_en ,
input bram_eeg_rst ,
input [ 3:0] bram_eeg_we ,
input [12:0] bram_cur_addr ,
input bram_cur_clk ,
input [31:0] bram_cur_din ,
output [31:0] bram_cur_dout ,
input bram_cur_en ,
input bram_cur_rst ,
input [ 3:0] bram_cur_we ,
input [12:0] bram_emg_addr ,
input bram_emg_clk ,
input [31:0] bram_emg_din ,
output [31:0] bram_emg_dout ,
input bram_emg_en ,
input bram_emg_rst ,
input [ 3:0] bram_emg_we ,
input [12:0] bram_accel_addr ,
input bram_accel_clk ,
input [31:0] bram_accel_din ,
output [31:0] bram_accel_dout ,
input bram_accel_en ,
input bram_accel_rst ,
input [ 3:0] bram_accel_we ,
input [12:0] bram_msg_addr ,
input bram_msg_clk ,
input [31:0] bram_msg_din ,
output [31:0] bram_msg_dout ,
input bram_msg_en ,
input bram_msg_rst ,
input [ 3:0] bram_msg_we ,
input [12:0] bram_msg_emg_addr ,
input bram_msg_emg_clk ,
input [31:0] bram_msg_emg_din ,
output [31:0] bram_msg_emg_dout ,
input bram_msg_emg_en ,
input bram_msg_emg_rst ,
input [ 3:0] bram_msg_emg_we ,
input [12:0] bram_imp_addr ,
input bram_imp_clk ,
input [31:0] bram_imp_din ,
output [31:0] bram_imp_dout ,
input bram_imp_en ,
input bram_imp_rst ,
input [ 3:0] bram_imp_we ,
//--------------------------------------------- interrupt
output stim_int ,
output eeg_int ,
output emg_int ,
output accel_int ,
input [31:0] m_axis_stim_tdata ,
input m_axis_stim_tlast ,
output m_axis_stim_tready ,
input m_axis_stim_tvalid ,
(*mark_debug="true"*)input m_axis_record_tfull ,
(*mark_debug="true"*)output [ 7:0] m_axis_record_tdata ,
(*mark_debug="true"*)output [ 0:0] m_axis_record_tkeep ,
(*mark_debug="true"*)output m_axis_record_tlast ,
(*mark_debug="true"*)input m_axis_record_tready ,
(*mark_debug="true"*)output m_axis_record_tvalid ,
(*mark_debug="true"*)output wire [32-1:0] axis_emg_tdata , //axis_eeg24_tdata ,
(*mark_debug="true"*)output wire axis_emg_tlast , //axis_eeg24_tlast ,
(*mark_debug="true"*)output wire axis_emg_tready , //axis_eeg24_tready ,
(*mark_debug="true"*)output wire axis_emg_tvalid , //axis_eeg24_tvalid ,
//--------------------------------------------- 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 [ 2-1:0] eeg_ads1299_spi_sclk ,
output [ 2-1:0] eeg_ads1299_spi_mosi ,
input [ 2-1:0] eeg_ads1299_spi_miso ,
input [ 2-1:0] eeg_ads1299_drdy_n ,
output [ 2-1:0] eeg_ads1299_start ,
//--------------------------------------------- ADS1299 for EMG
(*mark_debug="true"*)output emg_ads1299_spi_cs ,
(*mark_debug="true"*)output emg_ads1299_spi_sclk ,
(*mark_debug="true"*)output emg_ads1299_spi_mosi ,
(*mark_debug="true"*)input emg_ads1299_spi_miso ,
input emg_ads1299_drdy_n ,
output emg_ads1299_start ,
output emg_ads1299_reset_n ,
output emg_ads1299_pwdn_n ,
//--------------------------------------------- DAC80508
// output wire dac1_cs_n ,
// output wire dac1_sclk ,
// output wire dac1_sdi ,
// output wire dac2_cs_n ,
// output wire dac2_sclk ,
// output wire dac2_sdi ,
//------------------------------------------ device: MEMS
// output accel_spi_cs ,
// output accel_spi_sclk ,
// output accel_spi_mosi ,
// input accel_spi_miso ,
// input accel_int0 ,
// input accel_int1 ,
//--------------------------------------------- ADG1414 for MCB,really ADGS5414
// output adg1414_spi_sync ,
// output adg1414_spi_sclk ,
// output adg1414_spi_mosi ,
// input adg1414_spi_miso ,
//--------------------------------------------- ADG1414 for STIM,really ADGS5414
// output adg1414_spi_sync2 ,
// output adg1414_spi_sclk2 ,
// output adg1414_spi_mosi2 ,
// input adg1414_spi_miso2 ,
//--------------------------------------------- AD7689
output ad7689_cnv ,
output ad7689_spi_sclk ,
output ad7689_spi_mosi ,
input ad7689_spi_miso ,
//--------------------------------------------- AXI
(*mark_debug="true"*)output wire [31:0] axi_i_out ,
(*mark_debug="true"*)output wire axi_i_wr ,
(*mark_debug="true"*)output wire axi_i_tlast ,
//--------------------------------------------- Trigger
// input trigger_reset ,
// input [32-1:0] trigger_in ,
// output [32-1:0] trigger_out ,
//--------------------------------------------- For developer
output [ 4-1:0] debug_sig
);
//*****************************************************************************
// Parameter definition
//*****************************************************************************
//*****************************************************************************
// Internal register and wire declarations
//*****************************************************************************
// wire [32-1:0] trigger_in_int ;
// wire [32-1:0] trigger_in_ext ;
// (*mark_debug="true"*)wire [32-1:0] axis_trigger_tdata ;
// (*mark_debug="true"*)wire axis_trigger_tvalid ;
// (*mark_debug="true"*)wire axis_trigger_tready ;
(*mark_debug="true"*)wire [32-1:0] axis_eeg16_tdata ;
(*mark_debug="true"*)wire axis_eeg16_tlast ;
(*mark_debug="true"*)wire axis_eeg16_tready ;
(*mark_debug="true"*)wire axis_eeg16_tvalid ;
(*mark_debug="true"*)wire [32-1:0] axis_eeg24_tdata ;
(*mark_debug="true"*)wire axis_eeg24_tlast ;
(*mark_debug="true"*)wire axis_eeg24_tready ;
(*mark_debug="true"*)wire axis_eeg24_tvalid ;
(*mark_debug="true"*)wire [32-1:0] axis_emg_tdata_tmp ;
(*mark_debug="true"*)wire axis_emg_tlast_tmp ;
(*mark_debug="true"*)wire axis_emg_tready_tmp ;
(*mark_debug="true"*)wire axis_emg_tvalid_tmp ;
wire [48-1:0] accel_data ;
wire sw_enable ;
wire sw_data_sel ;
wire [64-1:0] sw_data_0 ;
wire [64-1:0] sw_data_1 ;
wire [64-1:0] sw_state ;
wire [ 4-1:0] debug_sig_2116 ;
wire [ 4-1:0] debug_sig_eeg ;
wire [ 4-1:0] debug_sig_msg ;
(*mark_debug="true"*)wire [ 7:0] m_axis_eeg_tdata ;
(*mark_debug="true"*)wire [ 0:0] m_axis_eeg_tkeep ;
(*mark_debug="true"*)wire m_axis_eeg_tlast ;
(*mark_debug="true"*)wire m_axis_eeg_tvalid ;
(*mark_debug="true"*)wire [ 7:0] m_axis_emg_tdata ;
(*mark_debug="true"*)wire [ 0:0] m_axis_emg_tkeep ;
(*mark_debug="true"*)wire m_axis_emg_tlast ;
(*mark_debug="true"*)wire m_axis_emg_tvalid ;
(*mark_debug="true"*)wire [1:0] eeg_emg_sel ;
(*mark_debug="true"*)wire [15:0] eeg_send_package_num;
(*mark_debug="true"*)wire [15:0] emg_send_package_num;
// (*mark_debug="true"*)wire imp_test_en ;
// (*mark_debug="true"*)wire stim_en ;
// (*mark_debug="true"*)wire [23:0] stim_data0 ;
// (*mark_debug="true"*)wire stim_data0_en ;
// wire [23:0] stim_data1 ;
// wire stim_data1_en ;
// wire [24*2-1:0] stim_data ;
// wire [1:0] stim_data_en ;
// wire [1:0] dac_cs_n ;
// wire [1:0] dac_sclk ;
// wire [1:0] dac_sdi ;
// wire [3:0] state[0:1] ;
// wire [23:0] imp_data_dout[0:1] ;
// (*mark_debug="true"*)wire [23:0] imp_data_dout0 ;
// wire [23:0] imp_data_dout1 ;
// wire [24*2-1:0] imp_data_dout_tmp ;
// (*mark_debug="true"*)wire fifo_empty0 ;
// wire fifo_empty1 ;
// (*mark_debug="true"*)wire fifo_no_empty ;
// reg [3:0] fifo_en_cnt ;
// reg imp_fifo_rd_en ;
(*mark_debug="true"*)wire adgs5414_start ;
wire [63:0] cmd_data ;
(*mark_debug="true"*)wire adgs5414_start2 ;
wire [63:0] cmd_data2 ;
wire [9:0] trigger_out_final ;
wire diff_pkt_data_sel ;
(*mark_debug="true"*)wire stop_sample ;
(*mark_debug="true"*)wire emg_ads1299_spi_sclk_tmp ;
assign emg_ads1299_reset_n = 1'b1 ;
assign emg_ads1299_pwdn_n = 1'b1 ;
// assign stim_data[2*24-1:0]={stim_data1[23:0],stim_data0[23:0]};
// assign stim_data_en[1:0]={stim_data1_en,stim_data0_en};
// assign fifo_no_empty=(~fifo_empty0)&(~fifo_empty1) ;
// assign imp_data_dout_tmp[24*2-1:0]={imp_data_dout1[23:0],imp_data_dout0[23:0]};
// assign dac1_cs_n=dac_cs_n[0];
// assign dac1_sclk=dac_sclk[0];
// assign dac1_sdi=dac_sdi[0];
// assign dac2_cs_n=dac_cs_n[1];
// assign dac2_sclk=dac_sclk[1];
// assign dac2_sdi=dac_sdi[1];
assign m_axis_record_tkeep = 1'b1 ;
assign axis_emg_tdata[31:0]=diff_pkt_data_sel?axis_emg_tdata_tmp[31:0]:32'b0 ;
assign axis_emg_tlast=diff_pkt_data_sel?axis_emg_tlast_tmp:1'b0 ;
assign axis_emg_tready=diff_pkt_data_sel?axis_emg_tready_tmp:1'b0;
assign axis_emg_tvalid=diff_pkt_data_sel?axis_emg_tvalid_tmp:1'b0;
assign emg_ads1299_spi_sclk=(emg_ads1299_spi_cs==1'b0)?emg_ads1299_spi_sclk_tmp:1'b0;
//genvar j;
//generate
// for(j=0;j<2;j=j+1) begin : impedance
// assign imp_data_dout[j] = imp_data_dout_tmp[24*j+23 : 24*j];
// end
//endgenerate
//always @(posedge clk or negedge rst_n) begin //刺激等待时间
// if (!rst_n) begin
// fifo_en_cnt[3:0] <= 4'b0;
// end else if(imp_test_en==1'b1)begin
// if((fifo_no_empty==1'b1)&&(state[0] == 4'h5)&&(state[1] == 4'h5))begin
// if(fifo_en_cnt[3:0]==4'd10)begin
// fifo_en_cnt[3:0] <= fifo_en_cnt[3:0] ;
// end else begin
// fifo_en_cnt[3:0] <= fifo_en_cnt[3:0] + 1'b1 ;
// end
// end else begin
// fifo_en_cnt[3:0] <= 4'b0;
// end
// end else begin
// fifo_en_cnt[3:0] <= 4'b0;
// end
//end
//always @(posedge clk or negedge rst_n) begin //刺激等待时间
// if (!rst_n) begin
// imp_fifo_rd_en <= 1'b0;
// end else if(imp_test_en==1'b1)begin
// if((fifo_no_empty==1'b1)&&(state[0] == 4'h5)&&(state[1] == 4'h5)&&(fifo_en_cnt[3:0]==4'h1))begin
// imp_fifo_rd_en <= 1'b1;
// end else begin
// imp_fifo_rd_en <= 1'b0;
// end
// end else begin
// imp_fifo_rd_en <= 1'b0;
// end
//end
//*****************************************************************************
// Instantiation
//*****************************************************************************
// trigger_top#
// (
// .CLK_PERIOD ( CLK_PERIOD )
// )
// u_trigger_top
// (
// .clk ( clk ),
// .rst_n ( rst_n ),
// .trigger_reset ( trigger_reset ),
// .trigger_in_int ( trigger_in_int ),
// .trigger_in_ext ( trigger_in_ext ),
// .m_trigger_tdata ( axis_trigger_tdata ),
// .m_trigger_tvalid ( axis_trigger_tvalid ),
// .m_trigger_tready ( axis_trigger_tready ),
// .error_overflow ( )
// );
// rhs2116_top#
// (
// .CLK_PERIOD ( CLK_PERIOD ),
// .VERSION ( VERSION ),
// .SPI_CLK_DIV ( RHS2116_SPI_CLK_DIV ),
// .CHIPSET_QTY ( RSH2116_QTY ),
// .SPI_TRANS_PERIOD ( RSH2116_SPI_PERIOD )
// )
// u_rhs2116_top
// (
// .clk ( clk ),
// .rst_n ( rst_n ),
// .bram_addr ( bram_stim_addr ),
// .bram_clk ( bram_stim_clk ),
// .bram_din ( bram_stim_din ),
// .bram_dout ( bram_stim_dout ),
// .bram_en ( bram_stim_en ),
// .bram_rst ( bram_stim_rst ),
// .bram_we ( bram_stim_we ),
// .interrupt ( stim_int ),
// .stim_event_code ( ),//trigger_in_int 2026.1.28 delete
// //------------------------------------------ FIFO: stim input and record output
// .axi_str_txd_tdata ( m_axis_stim_tdata ),
// .axi_str_txd_tlast ( m_axis_stim_tlast ),
// .axi_str_txd_tready ( m_axis_stim_tready ),
// .axi_str_txd_tvalid ( m_axis_stim_tvalid ),
// .axi_str_rxd_tdata ( axis_eeg16_tdata ),
// .axi_str_rxd_tlast ( axis_eeg16_tlast ),
// .axi_str_rxd_tready ( axis_eeg16_tready ),
// .axi_str_rxd_tvalid ( axis_eeg16_tvalid ),
// //------------------------------------------ channel stim state
// .sw_enable ( sw_enable ),
// .sw_data_sel ( sw_data_sel ),
// .sw_data_0 ( sw_data_0 ),
// .sw_data_1 ( sw_data_1 ),
// .sw_state ( 0 ),//sw_state
// //------------------------------------------ device
// .stim_en ( rsh2116_enable ),
// .cs ( rsh2116_spi_cs ),
// .sclk ( rsh2116_spi_sclk ),
// .mosi ( rsh2116_spi_mosi ),
// .miso ( rsh2116_spi_miso ),
// .debug_sig ( debug_sig_2116 )
// );
eeg_top#
(
.CLK_PERIOD ( CLK_PERIOD )
)
u0_eeg_top
(
.clk ( clk ),
.rst_n ( rst_n ),
.bram_addr ( bram_eeg_addr ),
.bram_clk ( bram_eeg_clk ),
.bram_din ( bram_eeg_din ),
.bram_dout ( bram_eeg_dout ),
.bram_en ( bram_eeg_en ),
.bram_rst ( bram_eeg_rst ),
.bram_we ( bram_eeg_we ),
.interrupt ( eeg_int ),
//------------------------------------------ FIFO: eeg output
.axis_record_tdata ( axis_eeg24_tdata ),
.axis_record_tlast ( axis_eeg24_tlast ),
.axis_record_tready ( axis_eeg24_tready ),
.axis_record_tvalid ( axis_eeg24_tvalid ),
//------------------------------------------ device spi
.cs ( eeg_ads1299_spi_cs ),
.sclk ( eeg_ads1299_spi_sclk ),
.mosi ( eeg_ads1299_spi_mosi ),
.miso ( eeg_ads1299_spi_miso ),
.drdy ( eeg_ads1299_drdy_n ),
.start ( eeg_ads1299_start ),
//------------------------------------------ debug signal
.debug_sig ( debug_sig_eeg )
);
//for emg
eeg_top1#
(
.CLK_PERIOD ( CLK_PERIOD ),
.CHIPSET_QTY ( EMG_CHIPSET_QTY ),
.SPIS_QTY ( EMG_SPIS_QTY ),
.SPI_SLAVE_QTY ( EMG_SPI_SLAVE_QTY )
)
u1_eeg_top
(
.clk ( clk ),
.rst_n ( rst_n ),
.bram_addr ( bram_emg_addr ),
.bram_clk ( bram_emg_clk ),
.bram_din ( bram_emg_din ),
.bram_dout ( bram_emg_dout ),
.bram_en ( bram_emg_en ),
.bram_rst ( bram_emg_rst ),
.bram_we ( bram_emg_we ),
.interrupt ( emg_int ),
//------------------------------------------ FIFO: emg output
.axis_record_tdata ( axis_emg_tdata_tmp[31:0] ),
.axis_record_tlast ( axis_emg_tlast_tmp ),
.axis_record_tready ( axis_emg_tready_tmp ),
.axis_record_tvalid ( axis_emg_tvalid_tmp ),
//------------------------------------------ device interface
.cs ( emg_ads1299_spi_cs ),
.sclk ( emg_ads1299_spi_sclk_tmp ),
.mosi ( emg_ads1299_spi_mosi ),
.miso ( emg_ads1299_spi_miso ),
.drdy ( emg_ads1299_drdy_n ),
.start ( emg_ads1299_start ),
// .reset_n ( emg_ads1299_reset_n ),
// .pwdn_n ( emg_ads1299_pwdn_n )
//------------------------------------------ debug signal
.debug_sig ( debug_sig_eeg )
);
cur_mon_top#
(
.CLK_PERIOD ( 500 )// 10
)
u_cur_mon_top
(
.clk ( clk ),
.rst_n ( rst_n ),
.bram_addr ( bram_cur_addr ),
.bram_clk ( bram_cur_clk ),
.bram_din ( bram_cur_din ),
.bram_dout ( bram_cur_dout ),
.bram_en ( bram_cur_en ),
.bram_rst ( bram_cur_rst ),
.bram_we ( bram_cur_we ),
.stim_state ( sw_data_1 ),
.interrupt ( cur_int ),
.cnv ( ad7689_cnv ),
.sck ( ad7689_spi_sclk ),
.mosi ( ad7689_spi_mosi ),
.miso ( ad7689_spi_miso ),
.axi_i_out ( axi_i_out[31:0] ),
.axi_i_wr ( axi_i_wr ),
.axi_i_tlast ( axi_i_tlast ),
.debug_sig ( debug_sig_cur )
);
accel_top#
(
.CLK_PERIOD ( CLK_PERIOD )
)
u_accel_top
(
.clk ( clk ),
.rst_n ( rst_n ),
.bram_addr ( bram_accel_addr ),
.bram_clk ( bram_accel_clk ),
.bram_din ( bram_accel_din ),
.bram_dout ( bram_accel_dout ),
.bram_en ( bram_accel_en ),
.bram_rst ( bram_accel_rst ),
.bram_we ( bram_accel_we ),
.interrupt ( accel_int ),
.accel_data ( accel_data ),
.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 )
);
// channel_switch#
// (
// .CLK_PERIOD ( CLK_PERIOD )
// )
// u0_channel_switch
// (
// .clk ( clk ),
// .rst_n ( rst_n ),
// .cmd_data ( cmd_data[63:0] ),
// .adgs5414_start ( adgs5414_start ),
// .sync ( adg1414_spi_sync ),
// .sclk ( adg1414_spi_sclk ),
// .sdin ( adg1414_spi_mosi ),
// .sdo ( adg1414_spi_miso )
// );
// channel_switch#
// (
// .CLK_PERIOD ( CLK_PERIOD )
// )
// u1_channel_switch
// (
// .clk ( clk ),
// .rst_n ( rst_n ),
// .cmd_data ( cmd_data2[63:0] ),
// .adgs5414_start ( adgs5414_start2 ),
// .sync ( adg1414_spi_sync2 ),
// .sclk ( adg1414_spi_sclk2 ),
// .sdin ( adg1414_spi_mosi2 ),
// .sdo ( adg1414_spi_miso2 )
// );
// channel_switch#
// (
// .CLK_PERIOD ( CLK_PERIOD )
// )
// u_channel_switch
// (
// .clk ( clk ),
// .rst_n ( rst_n ),
// .enable ( sw_enable ),
// .data_sel ( sw_data_sel ),
// .data_0 ( sw_data_0 ),
// .data_1 ( sw_data_1 ),
// .state ( sw_state ),
// .sync ( adg1414_spi_sync ),
// .sclk ( adg1414_spi_sclk ),
// .sdin ( adg1414_spi_mosi ),
// .sdo ( adg1414_spi_miso )
// );
upload_top#
(
.CLK_PERIOD ( CLK_PERIOD )
)
u0_upload_top
(
.clk ( clk ),
.rst_n ( rst_n ),
//------------------------------------------ config
.bram_addr ( bram_msg_addr ),
.bram_clk ( bram_msg_clk ),
.bram_din ( bram_msg_din ),
.bram_dout ( bram_msg_dout ),
.bram_en ( bram_msg_en ),
.bram_rst ( bram_msg_rst ),
.bram_we ( bram_msg_we ),
//------------------------------------------ recive
.s_axis_trigger_tdata (0 ),//axis_trigger_tdata
.s_axis_trigger_tvalid (0 ),//axis_trigger_tvalid
.s_axis_trigger_tready ( ),//axis_trigger_tready
.s_axis_eeg16_tdata ( 0 ),//axis_eeg16_tdata
.s_axis_eeg16_tlast ( 0 ),//axis_eeg16_tlast
.s_axis_eeg16_tready ( ),//axis_eeg16_tready
.s_axis_eeg16_tvalid ( 0 ),//axis_eeg16_tvalid
.s_axis_eeg24_tdata ( axis_eeg24_tdata ),
.s_axis_eeg24_tlast ( axis_eeg24_tlast ),
.s_axis_eeg24_tready ( axis_eeg24_tready ),
.s_axis_eeg24_tvalid ( axis_eeg24_tvalid ),
.s_axis_emg_tdata ( 0 ),//axis_emg_tdata
.s_axis_emg_tlast ( 0 ),//axis_emg_tlast
.s_axis_emg_tready ( ),//axis_emg_tready
.s_axis_emg_tvalid ( 0 ),//axis_emg_tvalid
.accel_data ( accel_data ),
//------------------------------------------ upload
.m_axis_record_tfull ( 1'b0 ),
.m_axis_record_tdata ( m_axis_eeg_tdata ),
.m_axis_record_tkeep ( m_axis_eeg_tkeep ),
.m_axis_record_tlast ( m_axis_eeg_tlast ),
.m_axis_record_tready ( 1'b1 ),
.m_axis_record_tvalid ( m_axis_eeg_tvalid ),
//------------------------------------------ debug signal
.debug_sig ( debug_sig_msg )
);
upload_top#
(
.CLK_PERIOD ( CLK_PERIOD )
)
u1_upload_top
(
.clk ( clk ),
.rst_n ( rst_n ),
//------------------------------------------ config
.bram_addr ( bram_msg_emg_addr ),
.bram_clk ( bram_msg_emg_clk ),
.bram_din ( bram_msg_emg_din ),
.bram_dout ( bram_msg_emg_dout ),
.bram_en ( bram_msg_emg_en ),
.bram_rst ( bram_msg_emg_rst ),
.bram_we ( bram_msg_emg_we ),
//------------------------------------------ recive
.s_axis_trigger_tdata ( 0 ),//axis_trigger_tdata
.s_axis_trigger_tvalid ( 0 ),//axis_trigger_tvalid
.s_axis_trigger_tready ( ),
.s_axis_eeg16_tdata ( 0 ),
.s_axis_eeg16_tlast ( 0 ),
.s_axis_eeg16_tready ( ),
.s_axis_eeg16_tvalid ( 0 ),
.s_axis_eeg24_tdata ( axis_emg_tdata_tmp ),
.s_axis_eeg24_tlast ( axis_emg_tlast_tmp ),
.s_axis_eeg24_tready ( axis_emg_tready_tmp ),
.s_axis_eeg24_tvalid ( axis_emg_tvalid_tmp ),
.s_axis_emg_tdata ( 0 ),//axis_emg_tdata
.s_axis_emg_tlast ( 0 ),//axis_emg_tlast
.s_axis_emg_tready ( ),//axis_emg_tready
.s_axis_emg_tvalid ( 0 ),//axis_emg_tvalid
.accel_data ( 0 ),
//------------------------------------------ upload
.m_axis_record_tfull ( 1'b0 ),
.m_axis_record_tdata ( m_axis_emg_tdata ),
.m_axis_record_tkeep ( m_axis_emg_tkeep ),
.m_axis_record_tlast ( m_axis_emg_tlast ),
.m_axis_record_tready ( 1'b1 ),
.m_axis_record_tvalid ( m_axis_emg_tvalid ),
//------------------------------------------ debug signal
.debug_sig ( )
);
eeg_emg_upload u_eeg_emg_upload(
.clk ( clk ),
.rst_n ( rst_n ),
.m_axis_eeg_tdata ( m_axis_eeg_tdata[7:0] ),
.m_axis_eeg_tlast ( m_axis_eeg_tlast ),
.m_axis_eeg_tvalid ( m_axis_eeg_tvalid ),
.m_axis_emg_tdata (m_axis_emg_tdata[7:0] ),
.m_axis_emg_tlast (m_axis_emg_tlast ),
.m_axis_emg_tvalid (m_axis_emg_tvalid ),
.diff_pkt_data_sel (diff_pkt_data_sel ),
.eeg_emg_sel (eeg_emg_sel[1:0] ),//eeg_emg_sel[1]emgeeg_emg_sel[0]eeg 2'b10
.eeg_send_package_num (eeg_send_package_num[15:0]),//10*196+85+14=2059 16'd2059
.emg_send_package_num (emg_send_package_num[15:0]),//10*28+85+14=379 16'd379
.stop_sample (stop_sample ),
.eeg_emg_tdata (m_axis_record_tdata[7:0] ),
.eeg_emg_tvalid (m_axis_record_tvalid ),
.eeg_emg_tlast (m_axis_record_tlast )
);
//genvar i;
//generate
// for(i=0;i<2;i=i+1) begin : dac80508_controller_arrange
// dac80508_controller u_dac80508_controller(
// .clk (clk ),//sys_clk
// .rst_n (rst_n ),
// .stim_en (stim_en ),
// .imp_test_en (imp_test_en ),
// .stim_data (stim_data[i*24+23:i*24]),
// .stim_data_en (stim_data_en[i] ),
// .cs_n (dac_cs_n[i] ),
// .sclk (dac_sclk[i] ),
// .sdi (dac_sdi[i] ),
// .state (state[i] ),
// .data_in (imp_data_dout[i] ),//data_in[j],{8{imp_data[15:0]}}
// .imp_fifo_rd_en(imp_fifo_rd_en )
// );
// end
//endgenerate
// fifo_generator_3 u0_fifo_generator_3(
// .full( ),
// .din(stim_data0[23:0]),
// .wr_en(stim_data0_en),
// .empty(fifo_empty0 ),
// .dout(imp_data_dout0[23:0]),
// .rd_en(imp_fifo_rd_en),
// .rst(~rst_n),
// .wr_clk(clk),
// .rd_clk(clk) //clk_100m
// );
//fifo_generator_3 u1_fifo_generator_3(
// .full( ),
// .din(stim_data1[23:0]),
// .wr_en(stim_data1_en),
// .empty(fifo_empty1 ),
// .dout(imp_data_dout1[23:0]),
// .rd_en(imp_fifo_rd_en),
// .rst(~rst_n),
// .wr_clk(clk),
// .rd_clk(clk) //clk_100m
// );
stim_config#
(
.SPIS_QTY ( 4 ),
.SPI_DATA_WIDTH ( 8 )
)
u_stim_config
(
.clk ( clk ),
.rst_n ( rst_n ),
.bram_addr ( bram_imp_addr ),
.bram_clk ( bram_imp_clk ),
.bram_din ( bram_imp_din ),
.bram_dout ( bram_imp_dout ),
.bram_en ( bram_imp_en ),
.bram_rst ( bram_imp_rst ),
.bram_we ( bram_imp_we ),
.eeg_emg_sel (eeg_emg_sel[1:0] ),
.eeg_send_package_num (eeg_send_package_num[15:0]),
.emg_send_package_num (emg_send_package_num[15:0]),
.diff_pkt_data_sel (diff_pkt_data_sel ),
.stop_sample (stop_sample )
);
//*****************************************************************************
// Wire assignment
//*****************************************************************************
// assign trigger_in_ext = trigger_in[31:0];//{6'b0,trigger_out_final[9:0],trigger_in[15:0]};
// assign trigger_in_int[31:0]={22'b0,trigger_out_final[9:0]};
// assign trigger_out = trigger_in_int;
assign debug_sig = debug_sig_2116;
// assign debug_sig[0] = axis_eeg24_tvalid;
// assign debug_sig[1] = axis_eeg24_tlast;
// assign debug_sig[2] = axis_eeg24_tready;
// assign debug_sig[3] = 1'b0;
endmodule