Subversion Repositories ngs

Rev

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

  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.         reg [7:0] sdmp3_chk [$]; // fifo for checking data from SD to MP3
  99.  
  100.  
  101.  
  102.         // clock gen
  103.         initial
  104.         begin
  105.                 clk_24mhz = 1'b1;
  106.                 forever #(`HALF_24MHZ) clk_24mhz = ~clk_24mhz;
  107.         end
  108.         //
  109.         initial
  110.         begin
  111.                 clk_fpga = 1'b1;
  112.                 forever #(`HALF_FPGA) clk_fpga = ~clk_fpga;
  113.         end
  114.  
  115.         // reset gen
  116.         initial
  117.         begin
  118.                 warmres_n = 1'b0;
  119.  
  120.                 #(1);
  121.                 repeat(2) @(posedge clk_fpga);
  122.  
  123.                 warmres_n <= 1'b1;
  124.         end
  125.  
  126.  
  127.         // DUT
  128.         top top
  129.         (
  130.                 .clk_fpga(clk_fpga),
  131.                 .clk_24mhz(clk_24mhz),
  132.                 .clksel0(clksel0),
  133.                 .clksel1(clksel1),
  134.                 .warmres_n(warmres_n),
  135.                 .d(d),
  136.                 .a(a),
  137.                 .iorq_n(iorq_n),
  138.                 .mreq_n(mreq_n),
  139.                 .rd_n(rd_n),
  140.                 .wr_n(wr_n),
  141.                 .m1_n(m1_n),
  142.                 .int_n(int_n),
  143.                 .nmi_n(nmi_n),
  144.                 .busrq_n(busrq_n),
  145.                 .busak_n(busak_n),
  146.                 .z80res_n(z80res_n),
  147.                 .mema14(mema14),
  148.                 .mema15(mema15),
  149.                 .mema16(mema16),
  150.                 .mema17(mema17),
  151.                 .mema18(mema18),
  152.                 .ram0cs_n(ramcs_n[0]),
  153.                 .ram1cs_n(ramcs_n[1]),
  154.                 .ram2cs_n(ramcs_n[2]),
  155.                 .ram3cs_n(ramcs_n[3]),
  156.                 .mema21(mema21),
  157.                 .romcs_n(romcs_n),
  158.                 .memoe_n(memoe_n),
  159.                 .memwe_n(memwe_n),
  160.                 .zxid(zxid),
  161.                 .zxa(zxa),
  162.                 .zxa14(zxa14),
  163.                 .zxa15(zxa15),
  164.                 .zxiorq_n(zxiorq_n),
  165.                 .zxmreq_n(zxmreq_n),
  166.                 .zxrd_n(zxrd_n),
  167.                 .zxwr_n(zxwr_n),
  168.                 .zxcsrom_n(zxcsrom_n),
  169.                 .zxblkiorq_n(zxblkiorq_n),
  170.                 .zxblkrom_n(zxblkrom_n),
  171.                 .zxgenwait_n(zxgenwait_n),
  172.                 .zxbusin(zxbusin),
  173.                 .zxbusena_n(zxbusena_n),
  174.                 .dac_bitck(dac_bitck),
  175.                 .dac_lrck(dac_lrck),
  176.                 .dac_dat(dac_dat),
  177.                 .sd_clk(sd_clk),
  178.                 .sd_cs(sd_cs),
  179.                 .sd_do(sd_do),
  180.                 .sd_di(sd_di),
  181.                 .sd_wp(sd_wp),
  182.                 .sd_det(sd_det),
  183.                 .ma_clk(ma_clk),
  184.                 .ma_cs(ma_cs),
  185.                 .ma_do(ma_do),
  186.                 .ma_di(ma_di),
  187.                 .mp3_xreset(mp3_xreset),
  188.                 .mp3_req(mp3_req),
  189.                 .mp3_clk(mp3_clk),
  190.                 .mp3_dat(mp3_dat),
  191.                 .mp3_sync(mp3_sync),
  192.                 .led_diag(led_diag)
  193.         );
  194.  
  195.  
  196.  
  197.         // SD and MP3 test modules
  198.         mp3 mp3
  199.         (
  200.                 .clk (mp3_clk ),
  201.                 .sync(mp3_sync),
  202.                 .data(mp3_dat ),
  203.                 .req (mp3_req )
  204.         );
  205.         //
  206.         sd sd
  207.         (
  208.                 .clk(sd_clk),
  209.                 .sdi(sd_do ),
  210.                 .sdo(sd_di )
  211.         );
  212.  
  213.  
  214.         // Z80
  215.         z80 z80
  216.         (
  217.                 .rst_n(z80res_n),
  218.                 .clk  (clk_fpga),
  219.  
  220.                 .int_n  (int_n  ),
  221.                 .nmi_n  (nmi_n  ),
  222.                 .busrq_n(busrq_n),
  223.                 .wait_n (1'b1   ),
  224.                
  225.                 .a(a),
  226.                 .d(d),
  227.  
  228.                 .mreq_n(mreq_n),
  229.                 .iorq_n(iorq_n),
  230.                 .rd_n  (rd_n  ),
  231.                 .wr_n  (wr_n  ),
  232.  
  233.                 .m1_n   (m1_n   ),
  234.                 .rfsh_n (       ),
  235.                 .busak_n(busak_n),
  236.                 .halt_n (       )
  237.         );
  238.  
  239.  
  240.  
  241.  
  242.         // RAM blocks
  243.         wire [19:0] ram_a;
  244.         genvar ram_i;
  245.         //
  246.         assign ram_a = { mema21, mema18, mema17, mema16, mema15, mema14, a[13:0] }; // 4mb
  247.         //assign ram_a = { 1'b0, mema18, mema17, mema16, mema15, mema14, a[13:0] }; // 2mb
  248.         //
  249.         generate
  250.         for(ram_i=0;ram_i<4;ram_i=ram_i+1)
  251.         begin : ram_block
  252.                 ram ram
  253.                 (
  254.                         .a(ram_a),
  255.                         .d(d    ),
  256.  
  257.                         .ce_n(ramcs_n[ram_i]),
  258.                         .oe_n(memoe_n       ),
  259.                         .we_n(memwe_n       )
  260.                 );
  261.         end
  262.         endgenerate
  263.  
  264.        
  265.         // ROM block
  266.         wire [18:0] rom_a;
  267.         assign rom_a = { mema18, mema17, mema16, mema15, mema14, a[13:0] };
  268.         rom
  269.         #(
  270. `ifdef TIMER_TEST
  271.                 .FILENAME("timer_test.bin")
  272. `elsif PAGE_TEST
  273.                 .FILENAME("page_test.bin")
  274. `elsif SDMP3_TEST
  275.                 .FILENAME("sdmp3_test.bin")
  276. `endif
  277.         )
  278.         rom
  279.         (
  280.                 .a(rom_a),
  281.                 .d(d    ),
  282.  
  283.                 .ce_n(romcs_n),
  284.                 .oe_n(memoe_n)
  285.         );
  286.  
  287.  
  288.  
  289.  
  290. endmodule
  291.  
  292.