Subversion Repositories ngs

Rev

Rev 90 | Rev 94 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. // (c) NedoPC 2013
  2. //
  3. // top-level for testing NGS
  4.  
  5. `timescale 1ns/100ps
  6.  
  7. `define HALF_24MHZ (20.8)
  8. `define HALF_FPGA  (20.8)
  9.  
  10.  
  11. module tb;
  12.  
  13.         reg clk_24mhz;
  14.         reg clk_fpga;
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.         wire clksel0;
  22.         wire clksel1;
  23.  
  24.         reg warmres_n;
  25.  
  26.  
  27.         wire [ 7:0] d;
  28.         wire [15:0] a;
  29.  
  30.         wire iorq_n;
  31.         wire mreq_n;
  32.         wire rd_n;
  33.         wire wr_n;
  34.         wire m1_n;
  35.         wire int_n;
  36.         wire nmi_n;
  37.         wire busrq_n;
  38.         wire busak_n;
  39.         tri1 z80res_n;
  40.  
  41.  
  42.         wire mema14;
  43.         wire mema15;
  44.         wire mema16;
  45.         wire mema17;
  46.         wire mema18;
  47.         wire [3:0] ramcs_n;
  48.         wire mema21;
  49.         wire romcs_n;
  50.         wire memoe_n;
  51.         wire memwe_n;
  52.  
  53.  
  54.         tri0 [7:0] zxid;
  55.         tri0 [7:0] zxa;
  56.         tri0 zxa14;
  57.         tri0 zxa15;
  58.         tri1 zxiorq_n;
  59.         tri1 zxmreq_n;
  60.         tri1 zxrd_n;
  61.         tri1 zxwr_n;
  62.         wire zxcsrom_n;
  63.         wire zxblkiorq_n;
  64.         wire zxblkrom_n;
  65.         wire zxgenwait_n;
  66.         wire zxbusin;
  67.         wire zxbusena_n;
  68.  
  69.  
  70.         wire dac_bitck;
  71.         wire dac_lrck;
  72.         wire dac_dat;
  73.  
  74.  
  75.         wire sd_clk;
  76.         wire sd_cs;
  77.         wire sd_do;
  78.         tri1 sd_di;
  79.         tri1 sd_wp;
  80.         tri1 sd_det;
  81.  
  82.  
  83.         wire ma_clk;
  84.         wire ma_cs;
  85.         wire ma_do;
  86.         tri1 ma_di;
  87.  
  88.         wire mp3_xreset;
  89.         tri1 mp3_req;
  90.         wire mp3_clk;
  91.         wire mp3_dat;
  92.         wire mp3_sync;
  93.  
  94.         wire led_diag;
  95.  
  96.  
  97.  
  98.  
  99.         // clock gen
  100.         initial
  101.         begin
  102.                 clk_24mhz = 1'b1;
  103.                 forever #(`HALF_24MHZ) clk_24mhz = ~clk_24mhz;
  104.         end
  105.         //
  106.         initial
  107.         begin
  108.                 clk_fpga = 1'b1;
  109.                 forever #(`HALF_FPGA) clk_fpga = ~clk_fpga;
  110.         end
  111.  
  112.         // reset gen
  113.         initial
  114.         begin
  115.                 warmres_n = 1'b0;
  116.  
  117.                 #(1);
  118.                 repeat(2) @(posedge clk_fpga);
  119.  
  120.                 warmres_n <= 1'b1;
  121.         end
  122.  
  123.  
  124.         // DUT
  125.         top top
  126.         (
  127.                 .clk_fpga(clk_fpga),
  128.                 .clk_24mhz(clk_24mhz),
  129.                 .clksel0(clksel0),
  130.                 .clksel1(clksel1),
  131.                 .warmres_n(warmres_n),
  132.                 .d(d),
  133.                 .a(a),
  134.                 .iorq_n(iorq_n),
  135.                 .mreq_n(mreq_n),
  136.                 .rd_n(rd_n),
  137.                 .wr_n(wr_n),
  138.                 .m1_n(m1_n),
  139.                 .int_n(int_n),
  140.                 .nmi_n(nmi_n),
  141.                 .busrq_n(busrq_n),
  142.                 .busak_n(busak_n),
  143.                 .z80res_n(z80res_n),
  144.                 .mema14(mema14),
  145.                 .mema15(mema15),
  146.                 .mema16(mema16),
  147.                 .mema17(mema17),
  148.                 .mema18(mema18),
  149.                 .ram0cs_n(ramcs_n[0]),
  150.                 .ram1cs_n(ramcs_n[1]),
  151.                 .ram2cs_n(ramcs_n[2]),
  152.                 .ram3cs_n(ramcs_n[3]),
  153.                 .mema21(mema21),
  154.                 .romcs_n(romcs_n),
  155.                 .memoe_n(memoe_n),
  156.                 .memwe_n(memwe_n),
  157.                 .zxid(zxid),
  158.                 .zxa(zxa),
  159.                 .zxa14(zxa14),
  160.                 .zxa15(zxa15),
  161.                 .zxiorq_n(zxiorq_n),
  162.                 .zxmreq_n(zxmreq_n),
  163.                 .zxrd_n(zxrd_n),
  164.                 .zxwr_n(zxwr_n),
  165.                 .zxcsrom_n(zxcsrom_n),
  166.                 .zxblkiorq_n(zxblkiorq_n),
  167.                 .zxblkrom_n(zxblkrom_n),
  168.                 .zxgenwait_n(zxgenwait_n),
  169.                 .zxbusin(zxbusin),
  170.                 .zxbusena_n(zxbusena_n),
  171.                 .dac_bitck(dac_bitck),
  172.                 .dac_lrck(dac_lrck),
  173.                 .dac_dat(dac_dat),
  174.                 .sd_clk(sd_clk),
  175.                 .sd_cs(sd_cs),
  176.                 .sd_do(sd_do),
  177.                 .sd_di(sd_di),
  178.                 .sd_wp(sd_wp),
  179.                 .sd_det(sd_det),
  180.                 .ma_clk(ma_clk),
  181.                 .ma_cs(ma_cs),
  182.                 .ma_do(ma_do),
  183.                 .ma_di(ma_di),
  184.                 .mp3_xreset(mp3_xreset),
  185.                 .mp3_req(mp3_req),
  186.                 .mp3_clk(mp3_clk),
  187.                 .mp3_dat(mp3_dat),
  188.                 .mp3_sync(mp3_sync),
  189.                 .led_diag(led_diag)
  190.         );
  191.  
  192.  
  193.  
  194.         // Z80
  195.         z80 z80
  196.         (
  197.                 .rst_n(z80res_n),
  198.                 .clk  (clk_fpga),
  199.  
  200.                 .int_n  (int_n  ),
  201.                 .nmi_n  (nmi_n  ),
  202.                 .busrq_n(busrq_n),
  203.                 .wait_n (1'b1   ),
  204.                
  205.                 .a(a),
  206.                 .d(d),
  207.  
  208.                 .mreq_n(mreq_n),
  209.                 .iorq_n(iorq_n),
  210.                 .rd_n  (rd_n  ),
  211.                 .wr_n  (wr_n  ),
  212.  
  213.                 .m1_n   (m1_n   ),
  214.                 .rfsh_n (       ),
  215.                 .busak_n(busak_n),
  216.                 .halt_n (       )
  217.         );
  218.  
  219.  
  220.  
  221.  
  222.         // RAM blocks
  223.         wire [19:0] ram_a;
  224.         genvar ram_i;
  225.         //
  226.         assign ram_a = { mema21, mema18, mema17, mema16, mema15, mema14, a[13:0] };
  227.         //
  228.         generate
  229.         for(ram_i=0;ram_i<4;ram_i=ram_i+1)
  230.         begin : ram_block
  231.                 ram ram
  232.                 (
  233.                         .a(ram_a),
  234.                         .d(d    ),
  235.  
  236.                         .ce_n(ramcs_n[ram_i]),
  237.                         .oe_n(memoe_n       ),
  238.                         .we_n(memwe_n       )
  239.                 );
  240.         end
  241.         endgenerate
  242.  
  243.        
  244.         // ROM block
  245.         wire [18:0] rom_a;
  246.         assign rom_a = { mema18, mema17, mema16, mema15, mema14, a[13:0] };
  247.         rom
  248.         #(
  249. `ifdef TIMER_TEST
  250.                 .FILENAME("rom_loader.bin")
  251. `endif
  252.         )
  253.         rom
  254.         (
  255.                 .a(rom_a),
  256.                 .d(d    ),
  257.  
  258.                 .ce_n(romcs_n),
  259.                 .oe_n(memoe_n)
  260.         );
  261.  
  262.  
  263.  
  264.  
  265. endmodule
  266.  
  267.