OpenCores
URL https://opencores.org/ocsvn/usbhostslave/usbhostslave/trunk

Subversion Repositories usbhostslave

[/] [usbhostslave/] [trunk/] [RTL/] [slaveController/] [USBSlaveControlBI.v] - Diff between revs 12 and 14

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 12 Rev 14
Line 92... Line 92...
input [1:0] endP1NAKTransTypeReg;
input [1:0] endP1NAKTransTypeReg;
input [1:0] endP2TransTypeReg;
input [1:0] endP2TransTypeReg;
input [1:0] endP2NAKTransTypeReg;
input [1:0] endP2NAKTransTypeReg;
input [1:0] endP3TransTypeReg;
input [1:0] endP3TransTypeReg;
input [1:0] endP3NAKTransTypeReg;
input [1:0] endP3NAKTransTypeReg;
output [3:0] endP0ControlReg;
output [4:0] endP0ControlReg;
output [3:0] endP1ControlReg;
output [4:0] endP1ControlReg;
output [3:0] endP2ControlReg;
output [4:0] endP2ControlReg;
output [3:0] endP3ControlReg;
output [4:0] endP3ControlReg;
input [7:0] EP0StatusReg;
input [7:0] EP0StatusReg;
input [7:0] EP1StatusReg;
input [7:0] EP1StatusReg;
input [7:0] EP2StatusReg;
input [7:0] EP2StatusReg;
input [7:0] EP3StatusReg;
input [7:0] EP3StatusReg;
output [6:0] SCAddrReg;
output [6:0] SCAddrReg;
Line 141... Line 141...
wire [1:0] endP1NAKTransTypeReg;
wire [1:0] endP1NAKTransTypeReg;
wire [1:0] endP2TransTypeReg;
wire [1:0] endP2TransTypeReg;
wire [1:0] endP2NAKTransTypeReg;
wire [1:0] endP2NAKTransTypeReg;
wire [1:0] endP3TransTypeReg;
wire [1:0] endP3TransTypeReg;
wire [1:0] endP3NAKTransTypeReg;
wire [1:0] endP3NAKTransTypeReg;
reg [3:0] endP0ControlReg;
reg [4:0] endP0ControlReg;
reg [3:0] endP1ControlReg;
reg [4:0] endP1ControlReg;
reg [3:0] endP2ControlReg;
reg [4:0] endP2ControlReg;
reg [3:0] endP3ControlReg;
reg [4:0] endP3ControlReg;
wire [7:0] EP0StatusReg;
wire [7:0] EP0StatusReg;
wire [7:0] EP1StatusReg;
wire [7:0] EP1StatusReg;
wire [7:0] EP2StatusReg;
wire [7:0] EP2StatusReg;
wire [7:0] EP3StatusReg;
wire [7:0] EP3StatusReg;
reg [6:0] SCAddrReg;
reg [6:0] SCAddrReg;
Line 191... Line 191...
reg EP3SetReady;
reg EP3SetReady;
reg EP0SendStall;
reg EP0SendStall;
reg EP1SendStall;
reg EP1SendStall;
reg EP2SendStall;
reg EP2SendStall;
reg EP3SendStall;
reg EP3SendStall;
 
reg EP0IsoEn;
 
reg EP1IsoEn;
 
reg EP2IsoEn;
 
reg EP3IsoEn;
reg EP0DataSequence;
reg EP0DataSequence;
reg EP1DataSequence;
reg EP1DataSequence;
reg EP2DataSequence;
reg EP2DataSequence;
reg EP3DataSequence;
reg EP3DataSequence;
reg EP0Enable;
reg EP0Enable;
Line 208... Line 212...
 
 
 
 
//sync write demux
//sync write demux
always @(posedge clk)
always @(posedge clk)
begin
begin
 
  if (rst == 1'b1) begin
 
    EP0IsoEn <= 1'b0;
 
    EP0SendStall <= 1'b0;
 
    EP0DataSequence <= 1'b0;
 
    EP0Enable <= 1'b0;
 
    EP1IsoEn <= 1'b0;
 
    EP1SendStall <= 1'b0;
 
    EP1DataSequence <= 1'b0;
 
    EP1Enable <= 1'b0;
 
    EP2IsoEn <= 1'b0;
 
    EP2SendStall <= 1'b0;
 
    EP2DataSequence <= 1'b0;
 
    EP2Enable <= 1'b0;
 
    EP3IsoEn <= 1'b0;
 
    EP3SendStall <= 1'b0;
 
    EP3DataSequence <= 1'b0;
 
    EP3Enable <= 1'b0;
 
    SCControlReg <= 6'h00;
 
    SCAddrReg <= 7'h00;
 
    interruptMaskReg <= 5'h00;
 
  end
 
  else begin
  clrNAKReq <= 1'b0;
  clrNAKReq <= 1'b0;
  clrSOFReq <= 1'b0;
  clrSOFReq <= 1'b0;
  clrResetReq <= 1'b0;
  clrResetReq <= 1'b0;
  clrResInReq <= 1'b0;
  clrResInReq <= 1'b0;
  clrTransDoneReq <= 1'b0;
  clrTransDoneReq <= 1'b0;
Line 221... Line 247...
  EP3SetReady <= 1'b0;
  EP3SetReady <= 1'b0;
  if (writeEn == 1'b1 && strobe_i == 1'b1 && slaveControlSelect == 1'b1)
  if (writeEn == 1'b1 && strobe_i == 1'b1 && slaveControlSelect == 1'b1)
  begin
  begin
    case (address)
    case (address)
      `EP0_CTRL_REG : begin
      `EP0_CTRL_REG : begin
        EP0SendStall <= dataIn[3];
          EP0IsoEn <= dataIn[`ENDPOINT_ISO_ENABLE_BIT];
        EP0DataSequence <= dataIn[2];
          EP0SendStall <= dataIn[`ENDPOINT_SEND_STALL_BIT];
        EP0SetReady <= dataIn[1];
          EP0DataSequence <= dataIn[`ENDPOINT_OUTDATA_SEQUENCE_BIT];
        EP0Enable <= dataIn[0];
          EP0SetReady <= dataIn[`ENDPOINT_READY_BIT];
 
          EP0Enable <= dataIn[`ENDPOINT_ENABLE_BIT];
      end
      end
      `EP1_CTRL_REG : begin
      `EP1_CTRL_REG : begin
        EP1SendStall <= dataIn[3];
          EP1IsoEn <= dataIn[`ENDPOINT_ISO_ENABLE_BIT];
        EP1DataSequence <= dataIn[2];
          EP1SendStall <= dataIn[`ENDPOINT_SEND_STALL_BIT];
        EP1SetReady <= dataIn[1];
          EP1DataSequence <= dataIn[`ENDPOINT_OUTDATA_SEQUENCE_BIT];
        EP1Enable <= dataIn[0];
          EP1SetReady <= dataIn[`ENDPOINT_READY_BIT];
 
          EP1Enable <= dataIn[`ENDPOINT_ENABLE_BIT];
      end
      end
      `EP2_CTRL_REG : begin
      `EP2_CTRL_REG : begin
        EP2SendStall <= dataIn[3];
          EP2IsoEn <= dataIn[`ENDPOINT_ISO_ENABLE_BIT];
        EP2DataSequence <= dataIn[2];
          EP2SendStall <= dataIn[`ENDPOINT_SEND_STALL_BIT];
        EP2SetReady <= dataIn[1];
          EP2DataSequence <= dataIn[`ENDPOINT_OUTDATA_SEQUENCE_BIT];
        EP2Enable <= dataIn[0];
          EP2SetReady <= dataIn[`ENDPOINT_READY_BIT];
 
          EP2Enable <= dataIn[`ENDPOINT_ENABLE_BIT];
      end
      end
      `EP3_CTRL_REG : begin
      `EP3_CTRL_REG : begin
        EP3SendStall <= dataIn[3];
          EP3IsoEn <= dataIn[`ENDPOINT_ISO_ENABLE_BIT];
        EP3DataSequence <= dataIn[2];
          EP3SendStall <= dataIn[`ENDPOINT_SEND_STALL_BIT];
        EP3SetReady <= dataIn[1];
          EP3DataSequence <= dataIn[`ENDPOINT_OUTDATA_SEQUENCE_BIT];
        EP3Enable <= dataIn[0];
          EP3SetReady <= dataIn[`ENDPOINT_READY_BIT];
 
          EP3Enable <= dataIn[`ENDPOINT_ENABLE_BIT];
      end
      end
      `SC_CONTROL_REG : SCControlReg <= dataIn[5:0];
      `SC_CONTROL_REG : SCControlReg <= dataIn[5:0];
      `SC_ADDRESS : SCAddrReg <= dataIn[6:0];
      `SC_ADDRESS : SCAddrReg <= dataIn[6:0];
      `SC_INTERRUPT_STATUS_REG : begin
      `SC_INTERRUPT_STATUS_REG : begin
        clrNAKReq <= dataIn[4];
          clrNAKReq <= dataIn[`NAK_SENT_INT_BIT];
        clrSOFReq <= dataIn[3];
          clrSOFReq <= dataIn[`SOF_RECEIVED_BIT];
        clrResetReq <= dataIn[2];
          clrResetReq <= dataIn[`RESET_EVENT_BIT];
        clrResInReq <= dataIn[1];
          clrResInReq <= dataIn[`RESUME_INT_BIT];
        clrTransDoneReq <= dataIn[0];
          clrTransDoneReq <= dataIn[`TRANS_DONE_BIT];
      end
      end
      `SC_INTERRUPT_MASK_REG  : interruptMaskReg <= dataIn[4:0];
      `SC_INTERRUPT_MASK_REG  : interruptMaskReg <= dataIn[4:0];
    endcase
    endcase
  end
  end
end
end
 
end
 
 
//interrupt control 
//interrupt control 
always @(posedge clk)
always @(posedge clk)
begin
begin
 
  if (rst == 1'b1) begin
 
    NAKSentInt <= 1'b0;
 
    SOFRxedInt <= 1'b0;
 
    resetEventInt <= 1'b0;
 
    resumeInt <= 1'b0;
 
    transDoneInt <= 1'b0;
 
  end
 
  else begin
  if (NAKSentIn == 1'b1)
  if (NAKSentIn == 1'b1)
    NAKSentInt <= 1'b1;
    NAKSentInt <= 1'b1;
  else if (clrNAKReq == 1'b1)
  else if (clrNAKReq == 1'b1)
    NAKSentInt <= 1'b0;
    NAKSentInt <= 1'b0;
 
 
Line 286... Line 325...
  if (transDoneIn == 1'b1)
  if (transDoneIn == 1'b1)
    transDoneInt <= 1'b1;
    transDoneInt <= 1'b1;
  else if (clrTransDoneReq == 1'b1)
  else if (clrTransDoneReq == 1'b1)
    transDoneInt <= 1'b0;
    transDoneInt <= 1'b0;
end
end
 
end
 
 
//mask interrupts
//mask interrupts
always @(interruptMaskReg or transDoneInt or resumeInt or resetEventInt or SOFRxedInt or NAKSentInt) begin
always @(interruptMaskReg or transDoneInt or resumeInt or resetEventInt or SOFRxedInt or NAKSentInt) begin
  transDoneIntOut <= transDoneInt & interruptMaskReg[`TRANS_DONE_BIT];
  transDoneIntOut <= transDoneInt & interruptMaskReg[`TRANS_DONE_BIT];
  resumeIntOut <= resumeInt & interruptMaskReg[`RESUME_INT_BIT];
  resumeIntOut <= resumeInt & interruptMaskReg[`RESUME_INT_BIT];
Line 299... Line 339...
end
end
 
 
//end point ready, set/clear
//end point ready, set/clear
always @(posedge clk)
always @(posedge clk)
begin
begin
 
  if (rst == 1'b1) begin
 
    EP0Ready <= 1'b0;
 
    EP1Ready <= 1'b0;
 
    EP2Ready <= 1'b0;
 
    EP3Ready <= 1'b0;
 
  end
 
  else begin
  if (EP0SetReady == 1'b1)
  if (EP0SetReady == 1'b1)
    EP0Ready <= 1'b1;
    EP0Ready <= 1'b1;
  else if (clrEP0Ready == 1'b1)
  else if (clrEP0Ready == 1'b1)
    EP0Ready <= 1'b0;
    EP0Ready <= 1'b0;
 
 
Line 319... Line 366...
  if (EP3SetReady == 1'b1)
  if (EP3SetReady == 1'b1)
    EP3Ready <= 1'b1;
    EP3Ready <= 1'b1;
  else if (clrEP3Ready == 1'b1)
  else if (clrEP3Ready == 1'b1)
    EP3Ready <= 1'b0;
    EP3Ready <= 1'b0;
end
end
 
end
 
 
//break out control signals
//break out control signals
always @(SCControlReg) begin
always @(SCControlReg) begin
  SCGlobalEn <= SCControlReg[`SC_GLOBAL_ENABLE_BIT];
  SCGlobalEn <= SCControlReg[`SC_GLOBAL_ENABLE_BIT];
  TxLineState <= SCControlReg[`SC_TX_LINE_STATE_MSBIT:`SC_TX_LINE_STATE_LSBIT];
  TxLineState <= SCControlReg[`SC_TX_LINE_STATE_MSBIT:`SC_TX_LINE_STATE_LSBIT];
Line 330... Line 378...
  fullSpeedPol <= SCControlReg[`SC_FULL_SPEED_LINE_POLARITY_BIT];
  fullSpeedPol <= SCControlReg[`SC_FULL_SPEED_LINE_POLARITY_BIT];
  fullSpeedRate <= SCControlReg[`SC_FULL_SPEED_LINE_RATE_BIT];
  fullSpeedRate <= SCControlReg[`SC_FULL_SPEED_LINE_RATE_BIT];
end
end
 
 
//combine endpoint control signals 
//combine endpoint control signals 
always @(EP0SendStall or EP0Ready or EP0DataSequence or EP0Enable or
always @(EP0IsoEn or EP0SendStall or EP0Ready or EP0DataSequence or EP0Enable or
  EP1SendStall or EP1Ready or EP1DataSequence or EP1Enable or
  EP1IsoEn or EP1SendStall or EP1Ready or EP1DataSequence or EP1Enable or
  EP2SendStall or EP2Ready or EP2DataSequence or EP2Enable or
  EP2IsoEn or EP2SendStall or EP2Ready or EP2DataSequence or EP2Enable or
  EP3SendStall or EP3Ready or EP3DataSequence or EP3Enable)
  EP3IsoEn or EP3SendStall or EP3Ready or EP3DataSequence or EP3Enable)
begin
begin
  endP0ControlReg <= {EP0SendStall, EP0DataSequence, EP0Ready, EP0Enable};
  endP0ControlReg <= {EP0IsoEn, EP0SendStall, EP0DataSequence, EP0Ready, EP0Enable};
  endP1ControlReg <= {EP1SendStall, EP1DataSequence, EP1Ready, EP1Enable};
  endP1ControlReg <= {EP1IsoEn, EP1SendStall, EP1DataSequence, EP1Ready, EP1Enable};
  endP2ControlReg <= {EP2SendStall, EP2DataSequence, EP2Ready, EP2Enable};
  endP2ControlReg <= {EP2IsoEn, EP2SendStall, EP2DataSequence, EP2Ready, EP2Enable};
  endP3ControlReg <= {EP3SendStall, EP3DataSequence, EP3Ready, EP3Enable};
  endP3ControlReg <= {EP3IsoEn, EP3SendStall, EP3DataSequence, EP3Ready, EP3Enable};
end
end
 
 
 
 
      // async read mux
      // async read mux
always @(address or
always @(address or

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.