Subversion Repositories pentevo

Rev

Blame | Last modification | View Log | Download | RSS feed | ?url?

  1. module main(
  2.  
  3.         // clocks
  4.         input fclk,
  5.         output clkz_out,
  6.         input clkz_in,
  7.  
  8.         // z80
  9.         input iorq_n,
  10.         input mreq_n,
  11.         input rd_n,
  12.         input wr_n,
  13.         input m1_n,
  14.         input rfsh_n,
  15.         output int_n,
  16.         output nmi_n,
  17.         output wait_n,
  18.         output res,
  19.  
  20.         inout [7:0] d,
  21.         input [15:0] a,
  22.  
  23.         // zxbus and related
  24.         output csrom,
  25.         output romoe_n,
  26.         output romwe_n,
  27.  
  28.         output rompg0_n,
  29.         output dos_n, // aka rompg1
  30.         output rompg2,
  31.         output rompg3,
  32.         output rompg4,
  33.  
  34.         input iorqge1,
  35.         input iorqge2,
  36.         output iorq1_n,
  37.         output iorq2_n,
  38.  
  39.         // DRAM
  40.         inout [15:0] rd,
  41.         output [9:0] ra,
  42.         output rwe_n,
  43.         output rucas_n,
  44.         output rlcas_n,
  45.         output rras0_n,
  46.         output rras1_n,
  47.  
  48.         // video
  49.         output [1:0] vred,
  50.         output [1:0] vgrn,
  51.         output [1:0] vblu,
  52.  
  53.         output vhsync,
  54.         output vvsync,
  55.         output vcsync,
  56.  
  57.         // AY control and audio/tape
  58.         output ay_clk,
  59.         output ay_bdir,
  60.         output ay_bc1,
  61.  
  62.         output beep,
  63.  
  64.         // IDE
  65.         output [2:0] ide_a,
  66.         inout [15:0] ide_d,
  67.  
  68.         output ide_dir,
  69.  
  70.         input ide_rdy,
  71.  
  72.         output ide_cs0_n,
  73.         output ide_cs1_n,
  74.         output ide_rs_n,
  75.         output ide_rd_n,
  76.         output ide_wr_n,
  77.  
  78.         // VG93 and diskdrive
  79.         output vg_clk,
  80.  
  81.         output vg_cs_n,
  82.         output vg_res_n,
  83.  
  84.         output vg_hrdy,
  85.         output vg_rclk,
  86.         output vg_rawr,
  87.         output [1:0] vg_a, // disk drive selection
  88.         output vg_wrd,
  89.         output vg_side,
  90.  
  91.         input step,
  92.         input vg_sl,
  93.         input vg_sr,
  94.         input vg_tr43,
  95.         input rdat_b_n,
  96.         input vg_wf_de,
  97.         input vg_drq,
  98.         input vg_irq,
  99.         input vg_wd,
  100.  
  101.         // serial links (atmega-fpga, sdcard)
  102.         output sdcs_n,
  103.         output sddo,
  104.         output sdclk,
  105.         input sddi,
  106.  
  107.         input spics_n,
  108.         input spick,
  109.         input spido,
  110.         output spidi,
  111.         output spiint_n
  112. );
  113.  
  114.  
  115.         wire zclk; // z80 clock for short
  116.         reg [2:0] zclk_gen; // make 3.5 mhz clock
  117.  
  118.         wire rst_n; // global reset
  119.  
  120.         wire rrdy;
  121.         wire cbeg;
  122.         wire [15:0] rddata;
  123.  
  124.         wire [4:0] rompg;
  125.  
  126.         wire [7:0] zports_dout;
  127.         wire zports_dataout;
  128.         wire porthit;
  129.  
  130.         wire [4:0] keys;
  131.         wire tape_in;
  132.  
  133.         wire [15:0] ideout;
  134.         wire [15:0] idein;
  135.  
  136.  
  137.         wire [7:0] zmem_dout;
  138.         wire zmem_dataout;
  139.  
  140.  
  141.         wire [7:0] sd_dout_to_zports;
  142.         wire start_from_zports;
  143.         wire sd_inserted;
  144.         wire sd_readonly;
  145.  
  146.  
  147.         reg [3:0] ayclk_gen;
  148.  
  149.  
  150.         wire [7:0] received;
  151.         wire [7:0] tobesent;
  152.  
  153.  
  154.         wire intrq,drq;
  155.         wire vg_wrFF;
  156.  
  157.  
  158.  
  159.  
  160.  
  161.         // Z80 clock control
  162.         assign zclk = clkz_in;
  163.         always @(posedge fclk)
  164.                 zclk_gen <= zclk_gen + 3'd1;
  165.         assign clkz_out = zclk_gen[2];
  166.  
  167.  
  168. /*      // RESETTER
  169.         resetter myrst( .clk(fclk),
  170.                         .rst_in1_n(1'b1),
  171.                         .rst_in2_n(1'b1),
  172.                         .rst_out_n(rst_n) );
  173.         defparam myrst.RST_CNT_SIZE = 6;
  174. */
  175.  
  176.         dram mydram( .clk(fclk),
  177.                      .rst_n(1'b1),
  178.                      .ra(ra),
  179.                      .rd(rd),
  180.                      .rwe_n(rwe_n),
  181.                      .rras0_n(rras0_n),
  182.                      .rras1_n(rras1_n),
  183.                      .rucas_n(rucas_n),
  184.                      .rlcas_n(rlcas_n),
  185.                      .req(1'b0),
  186.                      .rnw(1'b1)//,
  187.                      //.rrdy(rrdy),
  188.                      //.cbeg(cbeg),
  189.                      //.bsel({a[0],~a[0]}),
  190.                      //.wrdata({d,~d}),
  191.                      //.rddata(rddata),
  192.                      /*.addr({a[5:0],a[15:1]})*/ );
  193.  
  194.         assign int_n=1'b1;
  195.         assign nmi_n=1'b1;
  196.         assign wait_n=1'b1;
  197.         assign res=1'b1;
  198.         assign d=8'hZZ;
  199.  
  200.  
  201.         assign csrom=1'b0;
  202.         assign romoe_n=1'b1;
  203.         assign romwe_n=1'b1;
  204.  
  205.         assign iorq1_n=1'b1;
  206.         assign iorq2_n=1'b1;
  207.  
  208.  
  209.         assign rd=16'hZZZZ;
  210.  
  211.  
  212.         assign ay_bdir=1'b0;
  213.         assign ay_bc1=1'b0;
  214.  
  215.  
  216.         assign ide_d=16'hZZZZ;
  217.         assign ide_dir=1'b1;
  218.  
  219.         assign ide_rs_n = 1'b0;
  220.         assign ide_cs1_n = 1'b1;
  221.         assign ide_rd_n = 1'b1;
  222.         assign ide_wr_n = 1'b1;
  223.  
  224.         assign vg_cs_n=1'b1;
  225.         assign vg_res_n=1'b0;
  226.  
  227.  
  228.         assign sdcs_n=1'b1;
  229.  
  230.         assign spiint_n=1'b1;
  231.  
  232.  
  233.  
  234. //AY control
  235.         always @(posedge fclk)
  236.         begin
  237.                 ayclk_gen <= ayclk_gen + 4'd1;
  238.         end
  239.  
  240.         assign ay_clk = ayclk_gen[3];
  241.  
  242.  
  243.  
  244.  
  245.         reg [23:0] counter;
  246.         reg blinker;
  247.  
  248.  
  249.         always @(posedge fclk)
  250.         begin
  251.                 if( !counter )
  252.                 begin
  253.                         counter <= 24'd13999999;
  254.                         blinker <= ~blinker;
  255.                 end
  256.                 else
  257.                         counter <= counter - 24'd1;
  258.         end
  259.  
  260.  
  261.         assign ide_cs0_n = blinker;
  262.  
  263.  
  264.  
  265. endmodule
  266.