Subversion Repositories ngs

Rev

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

  1. // part of NeoGS flash programmer project (c) 2014 lvd^NedoPC
  2. //
  3. // top-level module
  4.  
  5. module top(
  6.  
  7.         input  wire clk_fpga,  // clocks
  8.         input  wire clk_24mhz, //
  9.  
  10.         output wire clksel0, // clock selection
  11.         output wire clksel1, //
  12.  
  13.         input  wire warmres_n, // warm reset
  14.  
  15.  
  16.         inout  wire [ 7:0] d, // Z80 data bus
  17.         output wire [15:0] a, // Z80 address bus
  18.  
  19.         input  wire iorq_n,   // Z80 control signals
  20.         input  wire mreq_n,   //
  21.         input  wire rd_n,     //
  22.         input  wire wr_n,     //
  23.         input  wire m1_n,     //
  24.         output wire int_n,    //
  25.         output wire nmi_n,    //
  26.         output wire busrq_n,  //
  27.         input  wire busak_n,  //
  28.         output wire z80res_n, //
  29.  
  30.  
  31.         output wire mema14,   // memory control
  32.         output wire mema15,   //
  33.         output wire mema16,   //
  34.         output wire mema17,   //
  35.         output wire mema18,   //
  36.         output wire ram0cs_n, //
  37.         output wire ram1cs_n, //
  38.         output wire ram2cs_n, //
  39.         output wire ram3cs_n, //
  40.         output wire mema21,   //
  41.         output wire romcs_n,  //
  42.         output wire memoe_n,  //
  43.         output wire memwe_n,  //
  44.  
  45.  
  46.         inout  wire [7:0] zxid,        // zxbus signals
  47.         input  wire [7:0] zxa,         //
  48.         input  wire       zxa14,       //
  49.         input  wire       zxa15,       //
  50.         input  wire       zxiorq_n,    //
  51.         input  wire       zxmreq_n,    //
  52.         input  wire       zxrd_n,      //
  53.         input  wire       zxwr_n,      //
  54.         input  wire       zxcsrom_n,   //
  55.         output wire       zxblkiorq_n, //
  56.         output wire       zxblkrom_n,  //
  57.         output wire       zxgenwait_n, //
  58.         output wire       zxbusin,     //
  59.         output wire       zxbusena_n,  //
  60.  
  61.  
  62.         output wire dac_bitck, // audio-DAC signals
  63.         output wire dac_lrck,  //
  64.         output wire dac_dat,  //
  65.  
  66.  
  67.         output wire sd_clk, // SD card interface
  68.         output wire sd_cs,  //
  69.         output wire sd_do,  //
  70.         input  wire sd_di,  //
  71.         input  wire sd_wp,  //
  72.         input  wire sd_det, //
  73.  
  74.  
  75.         output wire ma_clk, // control interface of MP3 chip
  76.         output wire ma_cs,
  77.         output wire ma_do,
  78.         input  wire ma_di,
  79.  
  80.         output wire mp3_xreset, // data interface of MP3 chip
  81.         input  wire mp3_req,    //
  82.         output wire mp3_clk,    //
  83.         output wire mp3_dat,    //
  84.         output wire mp3_sync,   //
  85.  
  86.         output wire led_diag // LED driver
  87. );
  88.  
  89.  
  90.  
  91.  
  92.  
  93.         wire init, init_in_progress;
  94.        
  95.         wire zxbus_rst_n;
  96.         wire rom_rst_n;
  97.  
  98.         wire       wr_addr;
  99.         wire       wr_data;
  100.         wire       rd_data;
  101.         wire [7:0] wr_buffer;
  102.         wire [7:0] rd_buffer;
  103.  
  104.         wire autoinc_ena;
  105.  
  106.  
  107.  
  108.  
  109.         // assign unused pins to safe values
  110.         assign clksel0 = 1'b1;
  111.         assign clksel1 = 1'b1;
  112.  
  113.         assign int_n = 1'b1;
  114.         assign nmi_n = 1'b1;
  115.  
  116.         assign ram0cs_n = 1'b1;
  117.         assign ram1cs_n = 1'b1;
  118.         assign ram2cs_n = 1'b1;
  119.         assign ram3cs_n = 1'b1;
  120.        
  121.         assign mema21 = 1'b0;
  122.  
  123.         assign zxblkrom_n  = 1'b1;
  124.         assign zxgenwait_n = 1'b1;
  125.  
  126.         assign dac_bitck = 1'b0;
  127.         assign dac_lrck  = 1'b0;
  128.         assign dac_dat   = 1'b0;
  129.  
  130.         assign sd_clk = 1'b0;
  131.         assign sd_cs  = 1'b1;
  132.         assign sd_do  = 1'b0;
  133.  
  134.         assign ma_clk = 1'b0;
  135.         assign ma_cs  = 1'b1;
  136.         assign ma_do  = 1'b0;
  137.  
  138.         assign mp3_xreset = 1'b0;
  139.         assign mp3_clk    = 1'b0;
  140.         assign mp3_sync   = 1'b0;
  141.  
  142.  
  143.  
  144.  
  145.  
  146.  
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.         // reset controller
  160.         reset reset
  161.         (
  162.                 .clk_fpga (clk_fpga ),
  163.                 .clk_24mhz(clk_24mhz),
  164.  
  165.                 .init            (init            ),
  166.                 .init_in_progress(init_in_progress),
  167.  
  168.                 .zxbus_rst_n(zxbus_rst_n),
  169.                 .rom_rst_n  (rom_rst_n  ),
  170.                 .z80_rst_n  (z80res_n   ),
  171.  
  172.                 .z80_busrq_n(busrq_n),
  173.                 .z80_busak_n(busak_n)
  174.         );
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.         // zxbus controller
  182.         zxbus zxbus
  183.         (
  184.                 .clk  (clk_24mhz  ),
  185.                 .rst_n(zxbus_rst_n),
  186.  
  187.                 .zxid       (zxid       ),
  188.                 .zxa        (zxa        ),
  189.                 .zxiorq_n   (zxiorq_n   ),
  190.                 .zxmreq_n   (zxmreq_n   ),
  191.                 .zxrd_n     (zxrd_n     ),
  192.                 .zxwr_n     (zxwr_n     ),
  193.                 .zxblkiorq_n(zxblkiorq_n),
  194.                 .zxbusin    (zxbusin    ),
  195.                 .zxbusena_n (zxbusena_n ),
  196.  
  197.                 .init            (init            ),
  198.                 .init_in_progress(init_in_progress),
  199.  
  200.                 .led(led_diag),
  201.  
  202.                 .autoinc_ena(autoinc_ena),
  203.  
  204.                 .wr_addr  (wr_addr  ),
  205.                 .wr_data  (wr_data  ),
  206.                 .rd_data  (rd_data  ),
  207.                 .wr_buffer(wr_buffer),
  208.                 .rd_buffer(rd_buffer)
  209.         );
  210.  
  211.  
  212.  
  213.  
  214.         // rom controller
  215.         rom rom
  216.         (
  217.                 .clk  (clk_24mhz),
  218.                 .rst_n(rom_rst_n),
  219.  
  220.                 .wr_addr  (wr_addr  ),
  221.                 .wr_data  (wr_data  ),
  222.                 .rd_data  (rd_data  ),
  223.                 .wr_buffer(wr_buffer),
  224.                 .rd_buffer(rd_buffer),
  225.  
  226.                 .autoinc_ena(autoinc_ena),
  227.  
  228.                 .rom_a   ({mema18,mema17,mema16,mema15,mema14,a[13:0]}),
  229.                 .rom_d   (d),
  230.                 .rom_cs_n(romcs_n),
  231.                 .rom_oe_n(memoe_n),
  232.                 .rom_we_n(memwe_n)
  233.         );
  234.  
  235.         assign a[15:14] = 2'bZZ;
  236.  
  237.  
  238.  
  239.  
  240. endmodule
  241.  
  242.