Subversion Repositories zxusbnet

Rev

Rev 116 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. // ZXiznet project
  2. // (c) NedoPC 2012-2018
  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  [3: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.                 sl811_ms_n <= 1'b0;
  76.         end
  77.         else if( wrena && addr==2'b10 )
  78.         begin
  79.                 rommap_win <= wrdata[1:0];
  80.                 rommap_ena <= wrdata[2] & (~wrdata[4]);
  81.                
  82.                 w5300_a0inv <= wrdata[3];
  83.                 w5300_ports <= wrdata[4] & (~wrdata[2]);
  84. //              w5300_hi    <= wrdata[7:5];
  85.                 sl811_ms_n <= ~wrdata[6];
  86.         end
  87.  
  88.  
  89.         // wr #81AB
  90.         always @(posedge wrstb_n, negedge rst_n)
  91.         if( !rst_n )
  92.         begin
  93. //              sl811_ms_n  <= 1'b0;
  94.                 w5300_hi    <= 4'd0;
  95.         end
  96.         else if( wrena && addr==2'b01 )
  97.         begin
  98. //              sl811_ms_n  <= ~wrdata[0];
  99.                 w5300_hi    <= wrdata[3:0];
  100.         end
  101.  
  102.  
  103.  
  104.         // read ports
  105.         always @*
  106.         case(addr)
  107. //`ifndef NO_INTERRUPTS
  108.                 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 };
  109. /*`else
  110.                 2'b11: rddata = {         1'b0,          1'b0, sl811_rst_n, w5300_rst_n,          1'b0,          1'b0, sl811_intrq, ~w5300_int_n };
  111. `endif*/
  112. //              2'b10: rddata = { w5300_hi, w5300_ports, w5300_a0inv, rommap_ena, rommap_win[1:0] };
  113.                 2'b10: rddata = { usb_power, ~sl811_ms_n, 1'bX, w5300_ports, w5300_a0inv, rommap_ena, rommap_win[1:0] };
  114.  
  115. //              2'b01: rddata = { 6'bXXXXXX, usb_power, ~sl811_ms_n };
  116.                 2'b01: rddata = { 4'bXXXX, w5300_hi };
  117.  
  118.                 default: rddata = 8'bXXXX_XXXX;
  119.  
  120.         endcase
  121.  
  122.  
  123.  
  124.  
  125. endmodule
  126.  
  127.