Subversion Repositories zxusbnet

Rev

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

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