Subversion Repositories zxusbnet

Rev

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

  1. // ZXiznet project
  2. // (c) NedoPC 2012
  3. //
  4. // ports of card: #83AB, #82AB, #81AB (read/write),
  5. // correspond to addr=2'b11, 2'b10, 2'b01
  6.  
  7. module ports
  8. (
  9.         input  wire       rst_n,
  10.  
  11.         input  wire       wrstb_n, // write strobe for ports, latched at positive edge
  12.         input  wire       wrena,   // write enable for ports
  13.         //
  14.         input  wire [1:0] addr, // addressing: no port at 2'b00
  15.         //
  16.         input  wire [7:0] wrdata,
  17.         output reg  [7:0] rddata,
  18.  
  19.  
  20.         // inputs and outputs
  21.         output reg        ena_w5300_int,
  22.         output reg        ena_sl811_int,
  23.         output reg        ena_zxbus_int,
  24.         input  wire       w5300_int_n,
  25.         input  wire       sl811_intrq,
  26.         input  wire       internal_int,
  27.         //
  28.         output reg  [1:0] rommap_win,
  29.         output reg        rommap_ena,
  30.         output reg        w5300_a0inv,
  31.         output reg        w5300_rst_n,
  32.         output reg        w5300_ports,
  33.         output reg  [2:0] w5300_hi,
  34.  
  35.         //
  36.         output reg        sl811_ms_n,
  37.         output reg        sl811_rst_n,
  38.         //
  39.         input  wire       usb_power
  40. );
  41.  
  42.  
  43.  
  44.  
  45.         // wr #83AB
  46.         always @(posedge wrstb_n, negedge rst_n)
  47.         if( !rst_n )
  48.         begin
  49.                 ena_w5300_int <= 1'b0;
  50.                 ena_sl811_int <= 1'b0;
  51.                 ena_zxbus_int <= 1'b0;
  52.                 w5300_rst_n <= 1'b0;
  53.                 sl811_rst_n <= 1'b0;
  54.         end
  55.         else if( wrena && addr==2'b11 )
  56.         begin
  57.                 ena_w5300_int <= wrdata[2];
  58.                 ena_sl811_int <= wrdata[3];
  59.                 ena_zxbus_int <= wrdata[6];
  60.                 w5300_rst_n <= wrdata[4];
  61.                 sl811_rst_n <= wrdata[5];
  62.         end
  63.        
  64.  
  65.         // wr #82AB
  66.         always @(posedge wrstb_n, negedge rst_n)
  67.         if( !rst_n )
  68.         begin
  69.                 rommap_win <= 2'b00;
  70.                 rommap_ena <= 1'b0;
  71.                
  72.                 w5300_a0inv <= 1'b0;
  73.                 w5300_ports <= 1'b0;
  74.                 w5300_hi    <= 3'd0;
  75.         end
  76.         else if( wrena && addr==2'b10 )
  77.         begin
  78.                 rommap_win <= wrdata[1:0];
  79.                 rommap_ena <= wrdata[2] & (~wrdata[4]);
  80.                
  81.                 w5300_a0inv <= wrdata[3];
  82.                 w5300_ports <= wrdata[4] & (~wrdata[2]);
  83.                 w5300_hi    <= wrdata[7:5];
  84.         end
  85.  
  86.  
  87.         // wr #81AB
  88.         always @(posedge wrstb_n, negedge rst_n)
  89.         if( !rst_n )
  90.         begin
  91.                 sl811_ms_n  <= 1'b0;
  92.         end
  93.         else if( wrena && addr==2'b01 )
  94.         begin
  95.                 sl811_ms_n  <= ~wrdata[0];
  96.         end
  97.  
  98.  
  99.  
  100.         // read ports
  101.         always @*
  102.         case(addr)
  103. //`ifndef NO_INTERRUPTS
  104.                 2'b11: rddata = { internal_int, ena_zxbus_int, sl811_rst_n, w5300_rst_n, ena_sl811_int, ena_w5300_int, sl811_intrq, ~w5300_int_n };
  105. /*`else
  106.                 2'b11: rddata = {         1'b0,          1'b0, sl811_rst_n, w5300_rst_n,          1'b0,          1'b0, sl811_intrq, ~w5300_int_n };
  107. `endif*/
  108.                 2'b10: rddata = { w5300_hi, w5300_ports, w5300_a0inv, rommap_ena, rommap_win[1:0] };
  109.  
  110.                 2'b01: rddata = { 6'bXXXXXX, usb_power, ~sl811_ms_n };
  111.  
  112.                 default: rddata = 8'bXXXX_XXXX;
  113.  
  114.         endcase
  115.  
  116.  
  117.  
  118.  
  119. endmodule
  120.  
  121.