Subversion Repositories ngs

Rev

Rev 100 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. // part of NeoGS project (c) 2007-2010 NedoPC
  2. //
  3. // top-level module
  4.  
  5. module top(
  6.  
  7.         clk_fpga,  // clocks
  8.         clk_24mhz, //
  9.  
  10.         clksel0, // clock selection
  11.         clksel1, //
  12.  
  13.         warmres_n, // warm reset
  14.  
  15.  
  16.         d, // Z80 data bus
  17.         a, // Z80 address bus
  18.  
  19.         iorq_n,   // Z80 control signals
  20.         mreq_n,   //
  21.         rd_n,     //
  22.         wr_n,     //
  23.         m1_n,     //
  24.         int_n,    //
  25.         nmi_n,    //
  26.         busrq_n,  //
  27.         busak_n,  //
  28.         z80res_n, //
  29.  
  30.  
  31.         mema14,   // memory control
  32.         mema15,   //
  33.         mema16,   //
  34.         mema17,   //
  35.         mema18,   //
  36.         ram0cs_n, //
  37.         ram1cs_n, //
  38.         ram2cs_n, //
  39.         ram3cs_n, //
  40.         mema21,   //
  41.         romcs_n,  //
  42.         memoe_n,  //
  43.         memwe_n,  //
  44.  
  45.  
  46.         zxid,        // zxbus signals
  47.         zxa,         //
  48.         zxa14,       //
  49.         zxa15,       //
  50.         zxiorq_n,    //
  51.         zxmreq_n,    //
  52.         zxrd_n,      //
  53.         zxwr_n,      //
  54.         zxcsrom_n,   //
  55.         zxblkiorq_n, //
  56.         zxblkrom_n,  //
  57.         zxgenwait_n, //
  58.         zxbusin,     //
  59.         zxbusena_n,  //
  60.  
  61.  
  62.         dac_bitck, // audio-DAC signals
  63.         dac_lrck,  //
  64.         dac_dat,  //
  65.  
  66.  
  67.         sd_clk, // SD card interface
  68.         sd_cs,  //
  69.         sd_do,  //
  70.         sd_di,  //
  71.         sd_wp,  //
  72.         sd_det, //
  73.  
  74.  
  75.         ma_clk, // control interface of MP3 chip
  76.         ma_cs,
  77.         ma_do,
  78.         ma_di,
  79.  
  80.         mp3_xreset, // data interface of MP3 chip
  81.         mp3_req,    //
  82.         mp3_clk,    //
  83.         mp3_dat,    //
  84.         mp3_sync,   //
  85.  
  86.         led_diag // LED driver
  87.  
  88. );
  89.  
  90.  
  91. // input-output description
  92.  
  93.         input clk_fpga;
  94.         input clk_24mhz;
  95.  
  96.         output clksel0;
  97.         output clksel1;
  98.  
  99.  
  100.         input warmres_n;
  101.  
  102.         inout wire [ 7:0] d;
  103.         inout wire [15:0] a;
  104.  
  105.         input iorq_n;
  106.         input mreq_n;
  107.         input rd_n;
  108.         input wr_n;
  109.         input m1_n;
  110.         output int_n;
  111.         output nmi_n;
  112.         output busrq_n;
  113.         input busak_n;
  114.         output reg z80res_n;
  115.  
  116.  
  117.         output reg mema14;
  118.         output reg mema15;
  119.         output reg mema16;
  120.         output reg mema17;
  121.         output reg mema18;
  122.         output reg ram0cs_n;
  123.         output reg ram1cs_n;
  124.         output reg ram2cs_n;
  125.         output reg ram3cs_n;
  126.         output reg mema21;
  127.         output reg romcs_n;
  128.         output reg memoe_n;
  129.         output reg memwe_n;
  130.  
  131.  
  132.         inout [7:0] zxid;
  133.         input [7:0] zxa;
  134.         input zxa14;
  135.         input zxa15;
  136.         input zxiorq_n;
  137.         input zxmreq_n;
  138.         input zxrd_n;
  139.         input zxwr_n;
  140.         input zxcsrom_n;
  141.         output zxblkiorq_n;
  142.         output zxblkrom_n;
  143.         output zxgenwait_n;
  144.         output zxbusin;
  145.         output zxbusena_n;
  146.  
  147.  
  148.         output dac_bitck;
  149.         output dac_lrck;
  150.         output dac_dat;
  151.  
  152.  
  153.         output sd_clk;
  154.         output sd_cs;
  155.         output sd_do;
  156.         input sd_di;
  157.         input sd_wp;
  158.         input sd_det;
  159.  
  160.  
  161.         output ma_clk;
  162.         output ma_cs;
  163.         output ma_do;
  164.         input ma_di;
  165.  
  166.         output mp3_xreset;
  167.         input mp3_req;
  168.         output mp3_clk;
  169.         output mp3_dat;
  170.         output mp3_sync;
  171.  
  172.         output led_diag;
  173.  
  174.  
  175. // global signals
  176.  
  177.         wire internal_reset_n; // internal reset for everything
  178.  
  179.  
  180. // zxbus-ports interconnection
  181.  
  182.         wire rst_from_zx_n; // internal z80 reset
  183.  
  184.         wire [7:0] command_zx2gs;
  185.         wire [7:0] data_zx2gs;
  186.         wire [7:0] data_gs2zx;
  187.         wire command_bit_2gs;
  188.         wire command_bit_2zx;
  189.         wire command_bit_wr;
  190.         wire data_bit_2gs;
  191.         wire data_bit_2zx;
  192.         wire data_bit_wr;
  193.  
  194. // memmap-bus interconnection
  195.         wire [21:14] memmap_a;
  196.         wire [3:0] memmap_ramcs_n;
  197.         wire memmap_romcs_n;
  198.         wire memmap_memoe_n;
  199.         wire memmap_memwe_n;
  200.  
  201. // dma-bus interconnection
  202.         wire [21:0] mem_dma_addr;
  203.         wire [7:0]  mem_dma_wd;
  204.  
  205.         wire mem_dma_bus;
  206.         wire mem_dma_rnw;
  207.         wire mem_dma_oe;
  208.         wire mem_dma_we;
  209.  
  210.         wire dma_takeover_enabled;
  211.  
  212.         wire        dma_ack;
  213.         wire        dma_end;
  214.         wire        dma_req;
  215.         wire [21:0] dma_addr;
  216.         wire        dma_rnw;
  217.         wire [7:0]  dma_rd;
  218.         wire [7:0]  dma_wd;
  219.  
  220.         wire        dma_ack_zx ;
  221.         wire        dma_ack_sd ;
  222.         wire        dma_ack_mp3;
  223.         //
  224.         wire        dma_end_zx ;
  225.         wire        dma_end_sd ;
  226.         wire        dma_end_mp3;
  227.         //
  228.         wire        dma_req_zx ;
  229.         wire        dma_req_sd ;
  230.         wire        dma_req_mp3;
  231.         //
  232.         wire        dma_rnw_zx ;
  233.         wire        dma_rnw_sd ;
  234.         wire        dma_rnw_mp3;
  235.         //
  236.         wire [ 7:0] dma_wd_zx ;
  237.         wire [ 7:0] dma_wd_sd ;
  238.         wire [ 7:0] dma_wd_mp3;
  239.         //
  240.         wire [21:0] dma_addr_zx ;
  241.         wire [21:0] dma_addr_sd ;
  242.         wire [21:0] dma_addr_mp3;
  243.  
  244.  
  245.  
  246.         wire zx_dmaread,zx_dmawrite;
  247.         wire zx_wait_ena;
  248.  
  249.         wire [7:0] dma_zxrd_data;
  250.         wire [7:0] dma_zxwr_data;
  251.  
  252.         wire       dma_on_zx;
  253.  
  254.  
  255.         wire [7:0] dma_dout_zx;
  256.         wire [7:0] dma_dout_sd;
  257.         wire [7:0] dma_dout_mp3;
  258.        
  259.         wire       dma_select_zx;
  260.         wire       dma_select_sd;
  261.         wire       dma_select_mp3;
  262.        
  263.         wire [7:0] dma_din_modules;
  264.  
  265.         wire [1:0] dma_regsel;
  266.         wire       dma_wrstb;
  267.  
  268.  
  269. // ports-memmap interconnection
  270.         wire mode_ramro,mode_norom;
  271.         wire [7:0] mode_pg0,mode_pg1,mode_pg2,mode_pg3;
  272.  
  273. // ports databus
  274.         wire [7:0] ports_dout;
  275.         wire ports_busin;
  276.  
  277. // ports-sound interconnection
  278.         wire snd_wrtoggle;
  279.         wire snd_datnvol;
  280.         wire [2:0] snd_addr;
  281.         wire [7:0] snd_data;
  282.  
  283.         wire mode_8chans,mode_pan4ch,mode_inv7b;
  284.  
  285. // ports-SPIs interconnection
  286.  
  287.         wire [7:0] md_din;
  288.         wire [7:0] dma_md_din;
  289.        
  290.         wire [7:0] mc_din;
  291.         wire [7:0] mc_dout;
  292.         wire [7:0] sd_din;
  293.         wire [7:0] sd_dout;
  294.  
  295.         wire mc_start;
  296.         wire [1:0] mc_speed;
  297.         wire mc_rdy;
  298.  
  299.         wire md_start;
  300.         wire dma_md_start;
  301.         wire md_rdy;
  302.         wire md_halfspeed;
  303.  
  304.         wire sd_start;
  305.         wire dma_sd_start;
  306.         wire sd_rdy;
  307.  
  308.  
  309.         // LED related
  310.         wire led_toggle;
  311.  
  312.         // timer
  313.         wire [2:0] timer_rate;
  314.         wire       timer_stb;
  315.  
  316.         // interrupt requests
  317.         wire  sd_int_req;
  318.         wire mp3_int_req;
  319.  
  320.         // intena/intreq
  321.         wire       intena_wr;
  322.         wire       intreq_wr;
  323.         wire [7:0] intreq_rd;
  324.  
  325.         wire [2:0] int_vector;
  326.  
  327.  
  328.  
  329. // CODE STARTS
  330.  
  331. // reset handling
  332.  
  333.         resetter my_rst( .clk(clk_fpga),
  334.                          .rst_in1_n( warmres_n ), .rst_in2_n( rst_from_zx_n ),
  335.                          .rst_out_n( internal_reset_n ) );
  336.  
  337.         always @* // reset for Z80
  338.         begin
  339.                 if( internal_reset_n == 1'b0 )
  340.                         z80res_n <= 1'b0;
  341.                 else
  342.                         z80res_n <= 1'bZ;
  343.         end
  344.  
  345.  
  346.  
  347.  
  348. // control Z80 busses & memory signals
  349.  
  350.  
  351. //  data bus:
  352.  
  353.         assign dma_takeover_enabled = (~busak_n) & mem_dma_bus;
  354.  
  355.  
  356.         reg [7:0] dd;
  357.         //
  358.         always @*
  359.         begin
  360.                 if( dma_takeover_enabled )
  361.                 begin
  362.                         if( mem_dma_rnw )
  363.                                 dd = 8'bZZZZZZZZ;
  364.                         else
  365.                                 dd = mem_dma_wd;
  366.                 end
  367.                 else if( (!m1_n) && (!iorq_n) )
  368.                 begin
  369.                         dd = { 2'b11, int_vector, 3'b111 };
  370.                 end
  371.                 else
  372.                 begin
  373.                         if( ports_busin==1'b1 ) // FPGA inputs on data bus
  374.                                 dd = 8'bZZZZZZZZ;
  375.                         else // FPGA outputs
  376.                                 dd = ports_dout;
  377.                 end
  378.         end
  379.         //
  380.         assign d = dd;
  381.  
  382. //  address bus (both Z80 and memmap module)
  383.  
  384.         reg [15:0] aa;
  385.         //
  386.         always @*
  387.         begin
  388.                 aa[15:14] = 2'bZZ;
  389.  
  390.                 if( dma_takeover_enabled )
  391.                 begin
  392.                         aa[13:0] = mem_dma_addr[13:0];
  393.  
  394.                         {mema21, mema18, mema17, mema16, mema15, mema14} = { mem_dma_addr[21], mem_dma_addr[18:14] };
  395.  
  396.                         {ram3cs_n,ram2cs_n,ram1cs_n,ram0cs_n} = ~( 4'b0001<<mem_dma_addr[20:19] );
  397.  
  398.                         romcs_n = 1'b1;
  399.  
  400.                         memoe_n = mem_dma_oe;
  401.                         memwe_n = mem_dma_we;
  402.                 end
  403.                 else
  404.                 begin
  405.                         aa[13:0] = 14'bZZ_ZZZZ_ZZZZ_ZZZZ;
  406.  
  407.                         {mema21, mema18, mema17, mema16, mema15, mema14} = { memmap_a[21], memmap_a[18:14] };
  408.  
  409.                         ram0cs_n = memmap_ramcs_n[0];
  410.                         ram1cs_n = memmap_ramcs_n[1];
  411.                         ram2cs_n = memmap_ramcs_n[2];
  412.                         ram3cs_n = memmap_ramcs_n[3];
  413.  
  414.                         romcs_n = memmap_romcs_n;
  415.  
  416.                         memoe_n = memmap_memoe_n;
  417.                         memwe_n = memmap_memwe_n;
  418.                 end
  419.         end
  420.         //
  421.         assign a = aa;
  422.  
  423.  
  424.  
  425. // ZXBUS module
  426.  
  427.         zxbus my_zxbus( .cpu_clock(clk_fpga),
  428.                         .rst_n(internal_reset_n),
  429.                         .rst_from_zx_n(rst_from_zx_n),
  430.  
  431.                         .nmi_n(nmi_n),
  432.  
  433.                         .zxid(zxid),
  434.                         .zxa(zxa),
  435.                         .zxa14(zxa14),
  436.                         .zxa15(zxa15),
  437.                         .zxiorq_n(zxiorq_n),
  438.                         .zxmreq_n(zxmreq_n),
  439.                         .zxrd_n(zxrd_n),
  440.                         .zxwr_n(zxwr_n),
  441.                         .zxblkiorq_n(zxblkiorq_n),
  442.                         .zxblkrom_n(zxblkrom_n),
  443.                         .zxcsrom_n(zxcsrom_n),
  444.                         .zxgenwait_n(zxgenwait_n),
  445.                         .zxbusin(zxbusin),
  446.                         .zxbusena_n(zxbusena_n),
  447.  
  448.                         .command_reg_out(command_zx2gs),
  449.                         .data_reg_out(data_zx2gs),
  450.                         .data_reg_in(data_gs2zx),
  451.                         .command_bit(command_bit_2gs),
  452.                         .command_bit_in(command_bit_2zx),
  453.                         .command_bit_wr(command_bit_wr),
  454.                         .data_bit(data_bit_2gs),
  455.                         .data_bit_in(data_bit_2zx),
  456.                         .data_bit_wr(data_bit_wr),
  457.  
  458.                         .wait_ena(zx_wait_ena),
  459.                         .dma_on(dma_on_zx),
  460.                         .dmaread(zx_dmaread),
  461.                         .dmawrite(zx_dmawrite),
  462.                         .dma_data_written(dma_zxwr_data),
  463.                         .dma_data_toberead(dma_zxrd_data),
  464.  
  465.                         .led_toggle(led_toggle) );
  466.  
  467.  
  468.  
  469.  
  470. // DMA modules
  471.  
  472.         dma_access dma_access
  473.         (
  474.                 .clk(clk_fpga),
  475.                 .rst_n(internal_reset_n),
  476.        
  477.                 .busrq_n(busrq_n),
  478.                 .busak_n(busak_n),
  479.        
  480.                 .mem_dma_addr(mem_dma_addr),
  481.                 .mem_dma_wd(mem_dma_wd),
  482.                 .mem_dma_rd(d),
  483.                 .mem_dma_bus(mem_dma_bus),
  484.                 .mem_dma_rnw(mem_dma_rnw),
  485.                 .mem_dma_oe(mem_dma_oe),
  486.                 .mem_dma_we(mem_dma_we),
  487.        
  488.                 .dma_busynready(),
  489.                 .dma_req(dma_req),
  490.                 .dma_ack(dma_ack),
  491.                 .dma_end(dma_end),
  492.                 .dma_rnw(dma_rnw),
  493.                 .dma_rd(dma_rd),
  494.                 .dma_wd(dma_wd),
  495.                 .dma_addr(dma_addr)
  496.         );
  497.  
  498.  
  499.  
  500.         dma_sequencer dma_sequencer
  501.         (
  502.                 .clk  (clk_fpga        ),
  503.                 .rst_n(internal_reset_n),
  504.        
  505.                 .req0(dma_req_zx ),
  506.                 .req1(dma_req_sd ),
  507.                 .req2(dma_req_mp3),
  508.                 .req3(1'b0       ),
  509.        
  510.                 .addr0(dma_addr_zx ),
  511.                 .addr1(dma_addr_sd ),
  512.                 .addr2(dma_addr_mp3),
  513.                 .addr3(22'd0       ),
  514.        
  515.                 .rnw0(dma_rnw_zx ),
  516.                 .rnw1(dma_rnw_sd ),
  517.                 .rnw2(dma_rnw_mp3),
  518.                 .rnw3(1'b1       ),
  519.        
  520.                 .wd0(dma_wd_zx ),
  521.                 .wd1(dma_wd_sd ),
  522.                 .wd2(8'd0      ),
  523.                 .wd3(8'd0      ),
  524.        
  525.                 .ack0(dma_ack_zx ),
  526.                 .ack1(dma_ack_sd ),
  527.                 .ack2(dma_ack_mp3),
  528.                 .ack3(           ),
  529.        
  530.                 .end0(dma_end_zx ),
  531.                 .end1(dma_end_sd ),
  532.                 .end2(dma_end_mp3),
  533.                 .end3(           ),
  534.        
  535.                 .dma_req (dma_req ),
  536.                 .dma_addr(dma_addr),
  537.                 .dma_rnw (dma_rnw ),
  538.                 .dma_wd  (dma_wd  ),
  539.                 .dma_ack (dma_ack ),
  540.                 .dma_end (dma_end )
  541.         );
  542.  
  543.  
  544.  
  545.  
  546.  
  547.  
  548.         dma_zx dma_zx
  549.         (
  550.                 .clk(clk_fpga),
  551.                 .rst_n(internal_reset_n),
  552.        
  553.                 .module_select(dma_select_zx),
  554.                 .write_strobe(dma_wrstb),
  555.                 .regsel(dma_regsel),
  556.        
  557.                 .din(dma_din_modules),
  558.                 .dout(dma_dout_zx),
  559.        
  560.                 .wait_ena(zx_wait_ena),
  561.                 .dma_on(dma_on_zx),
  562.                 .zxdmaread(zx_dmaread),
  563.                 .zxdmawrite(zx_dmawrite),
  564.                 .dma_wr_data(dma_zxwr_data),
  565.                 .dma_rd_data(dma_zxrd_data),
  566.        
  567.                 .dma_req (dma_req_zx ),
  568.                 .dma_ack (dma_ack_zx ),
  569.                 .dma_end (dma_end_zx ),
  570.                 .dma_rnw (dma_rnw_zx ),
  571.                 .dma_rd  (dma_rd     ),
  572.                 .dma_wd  (dma_wd_zx  ),
  573.                 .dma_addr(dma_addr_zx)
  574.         );
  575.  
  576.  
  577.         dma_sd dma_sd
  578.         (
  579.                 .clk  (clk_fpga        ),
  580.                 .rst_n(internal_reset_n),
  581.        
  582.                 .sd_start   (dma_sd_start),
  583.                 .sd_rdy     (sd_rdy      ),
  584.                 .sd_recvdata(sd_dout     ),
  585.        
  586.                 .din          (dma_din_modules),
  587.                 .dout         (dma_dout_sd    ),
  588.                 .module_select(dma_select_sd  ),
  589.                 .write_strobe (dma_wrstb      ),
  590.                 .regsel       (dma_regsel     ),
  591.        
  592.                 .dma_addr(dma_addr_sd),
  593.                 .dma_wd  (dma_wd_sd  ),
  594.                 .dma_rnw (dma_rnw_sd ),
  595.                 .dma_req (dma_req_sd ),
  596.                 .dma_ack (dma_ack_sd ),
  597.                 .dma_end (dma_end_sd ),
  598.        
  599.                 .int_req(sd_int_req)
  600.         );
  601.  
  602.         dma_mp3 dma_mp3
  603.         (
  604.                 .clk  (clk_fpga        ),
  605.                 .rst_n(internal_reset_n),
  606.  
  607.                 .md_din  (dma_md_din  ),
  608.                 .md_start(dma_md_start),
  609.                 .md_rdy  (md_rdy      ),
  610.                 .md_dreq (mp3_req     ),
  611.  
  612.  
  613.                 .din          (dma_din_modules),
  614.                 .dout         (dma_dout_mp3   ),
  615.                 .module_select(dma_select_mp3 ),
  616.                 .write_strobe (dma_wrstb      ),
  617.                 .regsel       (dma_regsel     ),
  618.        
  619.                 .dma_addr(dma_addr_mp3),
  620.                 .dma_rd  (dma_rd      ),
  621.                 .dma_rnw (dma_rnw_mp3 ),
  622.                 .dma_req (dma_req_mp3 ),
  623.                 .dma_ack (dma_ack_mp3 ),
  624.                 .dma_end (dma_end_mp3 ),
  625.  
  626.                 .int_req(mp3_int_req)
  627.         );
  628.  
  629.  
  630.  
  631.  
  632.  
  633. // MEMMAP module
  634.  
  635.         memmap my_memmap
  636.         (
  637.                 .a14(a[14]),
  638.                 .a15(a[15]),
  639.                 .mreq_n(mreq_n),
  640.                 .rd_n(rd_n),
  641.                 .wr_n(wr_n),
  642.                 .mema14(memmap_a[14]),
  643.                 .mema15(memmap_a[15]),
  644.                 .mema16(memmap_a[16]),
  645.                 .mema17(memmap_a[17]),
  646.                 .mema18(memmap_a[18]),
  647.                 .mema21(memmap_a[21]),
  648.        
  649.                 .ram0cs_n(memmap_ramcs_n[0]),
  650.                 .ram1cs_n(memmap_ramcs_n[1]),
  651.                 .ram2cs_n(memmap_ramcs_n[2]),
  652.                 .ram3cs_n(memmap_ramcs_n[3]),
  653.                 .romcs_n(memmap_romcs_n),
  654.                 .memoe_n(memmap_memoe_n),
  655.                 .memwe_n(memmap_memwe_n),
  656.        
  657.                 .mode_ramro(mode_ramro),
  658.                 .mode_norom(mode_norom),
  659.                 .mode_pg0(mode_pg0),
  660.                 .mode_pg1(mode_pg1),
  661.                 .mode_pg2(mode_pg2),
  662.                 .mode_pg3(mode_pg3)
  663.         );
  664.  
  665.  
  666.  
  667. // PORTS module
  668.  
  669.         ports my_ports
  670.         (
  671.                 .dout(ports_dout),
  672.                 .din(d),
  673.                 .busin(ports_busin),
  674.                 .a(a),
  675.                 .iorq_n(iorq_n),
  676.                 .mreq_n(mreq_n),
  677.                 .rd_n(rd_n),
  678.                 .wr_n(wr_n),
  679.  
  680.                 .rst_n(internal_reset_n),
  681.                 .cpu_clock(clk_fpga),
  682.                
  683.                 .clksel0(clksel0),
  684.                 .clksel1(clksel1),
  685.                
  686.                 .snd_wrtoggle(snd_wrtoggle),
  687.                 .snd_datnvol(snd_datnvol),
  688.                 .snd_addr(snd_addr),
  689.                 .snd_data(snd_data),
  690.                 .mode_8chans(mode_8chans),
  691.                 .mode_pan4ch(mode_pan4ch),
  692.                 .mode_inv7b(mode_inv7b),
  693.                
  694.                 .command_port_input(command_zx2gs),
  695.                 .command_bit_input(command_bit_2gs),
  696.                 .command_bit_output(command_bit_2zx),
  697.                 .command_bit_wr(command_bit_wr),
  698.                 .data_port_input(data_zx2gs),
  699.                 .data_port_output(data_gs2zx),
  700.                 .data_bit_input(data_bit_2gs),
  701.                 .data_bit_output(data_bit_2zx),
  702.                 .data_bit_wr(data_bit_wr),
  703.                
  704.                 .mode_ramro(mode_ramro),
  705.                 .mode_norom(mode_norom),
  706.                 .mode_pg0(mode_pg0),
  707.                 .mode_pg1(mode_pg1),
  708.                 .mode_pg2(mode_pg2),
  709.                 .mode_pg3(mode_pg3),
  710.                
  711.                 .md_din(md_din),
  712.                 .md_start(md_start),
  713.                 .md_dreq(mp3_req),
  714.                 .md_halfspeed(md_halfspeed),
  715.                
  716.                 .mc_ncs(ma_cs),
  717.                 .mc_xrst(mp3_xreset),
  718.                 .mc_dout(mc_dout),
  719.                 .mc_din(mc_din),
  720.                 .mc_start(mc_start),
  721.                 .mc_speed(mc_speed),
  722.                 .mc_rdy(mc_rdy),
  723.                
  724.                 .sd_ncs(sd_cs),
  725.                 .sd_wp(sd_wp),
  726.                 .sd_det(sd_det),
  727.                 .sd_din(sd_din),
  728.                 .sd_dout(sd_dout),
  729.                 .sd_start(sd_start),
  730.                 .dma_sd_start(dma_sd_start),
  731.  
  732.  
  733.                 .dma_din_modules(dma_din_modules),
  734.                 .dma_regsel(dma_regsel),
  735.                 .dma_wrstb(dma_wrstb),
  736.                 //
  737.                 .dma_dout_zx (dma_dout_zx ),
  738.                 .dma_dout_sd (dma_dout_sd ),
  739.                 .dma_dout_mp3(dma_dout_mp3),
  740.                 //
  741.                 .dma_select_zx (dma_select_zx ),
  742.                 .dma_select_sd (dma_select_sd ),
  743.                 .dma_select_mp3(dma_select_mp3),
  744.                
  745.                 .led(led_diag),
  746.                 .led_toggle(led_toggle),
  747.  
  748.                 .timer_rate(timer_rate),
  749.  
  750.                 .intena_wr(intena_wr),
  751.                 .intreq_wr(intreq_wr),
  752.                 .intreq_rd(intreq_rd)
  753.         );
  754.  
  755.  
  756.  
  757. // SOUND_MAIN module
  758.  
  759.         sound_main my_sound_main( .clock(clk_24mhz),
  760.  
  761.                                   .mode_8chans(mode_8chans),
  762.                                   .mode_pan4ch(mode_pan4ch),
  763.                                   .mode_inv7b(mode_inv7b),
  764.  
  765.                                   .in_wrtoggle(snd_wrtoggle),
  766.                                   .in_datnvol(snd_datnvol),
  767.                                   .in_wraddr(snd_addr),
  768.                                   .in_data(snd_data),
  769.  
  770.                                   .dac_clock(dac_bitck),
  771.                                   .dac_leftright(dac_lrck),
  772.                                   .dac_data(dac_dat) );
  773.  
  774.  
  775.  
  776.         // interrupts module
  777.         interrupts my_interrupts
  778.         (
  779.                 .clk  (clk_fpga        ),
  780.                 .rst_n(internal_reset_n),
  781.  
  782.                 .m1_n  (m1_n  ),
  783.                 .iorq_n(iorq_n),
  784.  
  785.                 .int_n(int_n),
  786.  
  787.                 .din(d),
  788.                 .req_rd(intreq_rd),
  789.  
  790.                 .int_vector(int_vector),
  791.  
  792.                 .ena_wr(intena_wr),
  793.                 .req_wr(intreq_wr),
  794.  
  795.                 .int_stbs( {mp3_int_req, sd_int_req, timer_stb} )
  796.         );
  797.  
  798.         // timer
  799.         timer my_timer
  800.         (
  801.                 .clk_z80  (clk_fpga ),
  802.                 .clk_24mhz(clk_24mhz),
  803.  
  804.                 .rate(timer_rate),
  805.  
  806.                 .int_stb(timer_stb)
  807.         );
  808.  
  809.  
  810.  
  811.  
  812.  
  813. // MP3, SDcard spi modules
  814.  
  815.  
  816.         spi2 spi_mp3_data
  817.         (
  818.                 .clock(clk_fpga),
  819.                 .sck(mp3_clk),
  820.                 .sdo(mp3_dat),
  821.                 .bsync(mp3_sync),
  822.                 .din( dma_md_start ? dma_md_din : md_din),
  823.                 .start( md_start || dma_md_start ),
  824.                 .speed( {1'b0,md_halfspeed} ),
  825.                 .sdi(1'b0),
  826.                 .rdy(md_rdy),
  827.                 .dout()
  828.         );
  829.  
  830.         spi2 spi_mp3_control
  831.         (
  832.                 .clock(clk_fpga),
  833.                 .sck(ma_clk),
  834.                 .sdo(ma_do),
  835.                 .sdi(ma_di),
  836.                 .din(mc_din),
  837.                 .dout(mc_dout),
  838.                 .start(mc_start),
  839.                 .rdy(mc_rdy),
  840.                 .speed(mc_speed),
  841.                 .bsync()
  842.         );
  843.  
  844.         spi2 spi_sd
  845.         (
  846.                 .clock(clk_fpga),
  847.                 .sck(sd_clk),
  848.                 .sdo(sd_do),
  849.                 .sdi(sd_di),
  850.                 .din(sd_din),
  851.                 .dout(sd_dout),
  852.                 .start(sd_start|dma_sd_start),
  853.                 .speed(2'b00),
  854.                 .bsync(),
  855.                 .rdy(sd_rdy)
  856.         );
  857.  
  858.  
  859.  
  860.  
  861. endmodule
  862.  
  863.