Subversion Repositories zxusbnet

Rev

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

  1. // ZXiznet project
  2. // (c) NedoPC 2012
  3. //
  4. // top-level module
  5.  
  6. module top
  7. #(
  8.         parameter LCELLS = 1
  9. )
  10. (
  11.         // zxbus
  12.         input  wire [15:0] za,
  13.         inout  wire [ 7:0] zd,
  14.        
  15.         // buffered data bus for chips
  16.         inout  wire [ 7:0] bd,
  17.  
  18.         // zxbus control signals
  19.         input  wire        ziorq_n,
  20.         input  wire        zrd_n,
  21.         input  wire        zwr_n,
  22.         input  wire        zmreq_n,
  23.         output wire        ziorqge,
  24.         output wire        zblkrom,
  25.         input  wire        zcsrom_n,
  26.         input  wire        zrst_n,
  27.         output wire        zint_n,
  28.  
  29.         // buffered RD_N and WR_N for chips
  30.         output wire        brd_n,
  31.         output wire        bwr_n,
  32.  
  33.  
  34.         // w5300 Ethernet chip
  35.         output wire        w5300_rst_n,
  36.         output wire [ 9:0] w5300_addr,
  37.         output wire        w5300_cs_n,
  38.         input  wire        w5300_int_n,
  39.  
  40.  
  41.         // sl811 Usb chip
  42.         output wire        sl811_rst_n,
  43.         input  wire        sl811_intrq,
  44.         output wire        sl811_ms_n,
  45.         output wire        sl811_cs_n,
  46.         output wire        sl811_a0,
  47.  
  48.         // usb power presence
  49.         input  wire        usb_power
  50.  
  51.         // = total 56 pins (maximum is 66)
  52.         //   among them 27 outputs (maximum is 64)
  53. );
  54.  
  55.  
  56.  
  57.         wire ena_w5300_int;
  58.         wire ena_sl811_int;
  59.         wire ena_zxbus_int;
  60.         wire internal_int;
  61.  
  62.         wire [7:0] ports_wrdata;
  63.         wire [7:0] ports_rddata;
  64.         wire [1:0] ports_addr;
  65.         wire       ports_wrena;
  66.         wire       ports_wrstb_n;
  67.  
  68.         wire [1:0] rommap_win;
  69.         wire       rommap_ena;
  70.  
  71.         wire       w5300_a0inv;
  72.         wire       w5300_ports;
  73.         wire [2:0] w5300_hi;
  74.  
  75.  
  76.         wire zrd_n_lcell;
  77.         wire zwr_n_lcell;
  78.  
  79.         wire [LCELLS-1:0] zr;
  80.         wire [LCELLS-1:0] zw;
  81.  
  82.  
  83.  
  84.         // zx-bus
  85.         zbus
  86.         #(
  87.                 .LCELLS(LCELLS)
  88.         )
  89.         zbus
  90.         (
  91.                 .za(za),
  92.                 .zd(zd),
  93.                 //
  94.                 .bd(bd),
  95.                 //
  96.                 .ziorq_n (ziorq_n ),
  97.                 .zrd_n   (brd_n   ),
  98.                 .zwr_n   (bwr_n   ),
  99.                 .zmreq_n (zmreq_n ),
  100.                 .ziorqge (ziorqge ),
  101.                 .zblkrom (zblkrom ),
  102.                 .zcsrom_n(zcsrom_n),
  103.                 .zrst_n  (zrst_n  ),
  104.                 //
  105.                 .ports_wrena  (ports_wrena  ),
  106.                 .ports_wrstb_n(ports_wrstb_n),
  107.                 .ports_addr   (ports_addr   ),
  108.                 .ports_wrdata (ports_wrdata ),
  109.                 .ports_rddata (ports_rddata ),
  110.                 //
  111.                 .rommap_win(rommap_win),
  112.                 .rommap_ena(rommap_ena),
  113.                 //
  114.                 .sl811_cs_n(sl811_cs_n),
  115.                 .sl811_a0  (sl811_a0  ),
  116.                 //
  117.                 .w5300_cs_n (w5300_cs_n ),
  118.                 .w5300_ports(w5300_ports)
  119.         );
  120.  
  121.  
  122.         // map Z80 space to wiznet space
  123.         wizmap wizmap
  124.         (
  125.                 .za(za),
  126.  
  127.                 .w5300_a0inv(w5300_a0inv),
  128.                 .w5300_addr (w5300_addr ),
  129.                 .w5300_ports(w5300_ports),
  130.                 .w5300_hi   (w5300_hi   )
  131.         );
  132.  
  133.  
  134.         // ports
  135.         ports ports
  136.         (
  137.                 .rst_n(zrst_n),
  138.                 //
  139.                 .wrstb_n(ports_wrstb_n),
  140.                 .wrena  (ports_wrena  ),
  141.                 .addr   (ports_addr   ),
  142.                 .wrdata (ports_wrdata ),
  143.                 .rddata (ports_rddata ),
  144.                 //
  145.                 .ena_w5300_int(ena_w5300_int),
  146.                 .ena_sl811_int(ena_sl811_int),
  147.                 .ena_zxbus_int(ena_zxbus_int),
  148.                 //
  149.                 .w5300_int_n(w5300_int_n),
  150.                 .sl811_intrq(sl811_intrq),
  151.                 //
  152.                 .internal_int(internal_int),
  153.                 //
  154.                 .rommap_win(rommap_win),
  155.                 .rommap_ena(rommap_ena),
  156.                 //
  157.                 .w5300_a0inv(w5300_a0inv),
  158.                 .w5300_rst_n(w5300_rst_n),
  159.                 .w5300_ports(w5300_ports),
  160.                 .w5300_hi   (w5300_hi   ),
  161.                 //
  162.                 .sl811_ms_n (sl811_ms_n ),
  163.                 .sl811_rst_n(sl811_rst_n),
  164.                 //
  165.                 .usb_power(usb_power)
  166.         );
  167.  
  168.         genvar i;
  169.        
  170.         generate
  171.                 for(i=0;i<LCELLS;i=i+1)
  172.                 begin : gen_wait_cells
  173.                         if(i==0)
  174.                         begin
  175.                                 lcell lrd(zrd_n,zr[0]);
  176.                                 lcell lwr(zwr_n,zw[0]);
  177.                         end
  178.                         else
  179.                         begin
  180.                                 lcell lrd(zr[i-1],zr[i]);
  181.                                 lcell lwr(zw[i-1],zw[i]);
  182.                         end
  183.                 end
  184.         endgenerate
  185.        
  186.         assign zrd_n_lcell = zr[LCELLS-1];
  187.         assign zwr_n_lcell = zw[LCELLS-1];
  188.  
  189.         // buffered RD_N and WR_N
  190. //      assign brd_n = zrd_n & zrd_n_lcell;
  191. //      assign bwr_n = zwr_n & zwr_n_lcell;
  192.         lcell brd(zrd_n & zrd_n_lcell, brd_n);
  193.         lcell bwr(zwr_n & zwr_n_lcell, bwr_n);
  194.  
  195.  
  196.  
  197.  
  198.         // interrupt generation
  199.         assign internal_int = (ena_w5300_int & (~w5300_int_n)) |
  200.                               (ena_sl811_int &   sl811_intrq ) ;
  201.         //
  202.         assign zint_n = (internal_int & ena_zxbus_int) ? 1'b0 : 1'bZ;
  203.  
  204.  
  205. endmodule
  206.  
  207.