Gateware PHY¶
Pure-gateware, UTMI-compatible Full Speed PHY.
- class sol_usb.gateware.interface.gateware_phy.GatewarePHY(*args: Any, src_loc_at: int = 0, **kwargs: Any)¶
Gateware that implements a UTMI-compatible transceiver using raw FPGA I/O.
Clock Domains¶
- usb:
Our 12 MHz USB clock domain which will match each of the signals below. Should be phase-related to the 48MHz clock (e.g. divided down from it) to avoid the need for explicit synchronization on clock domain crossings.
- usb_io:
The core 48MHz clock domain in which USB clock recovery and sampling is performed. Must be phase related to our
usb
clock domain.
- Attributes:
tx_data (Signal(8), input) – data to be transmitted; valid when tx_valid is asserted
tx_valid (Signal(), input) – asserted when data is to be transmitted; indicates the data_in byte is valid; de-asserting this line terminates the transmission
tx_ready (Signal(), output) – indicates the the PHY is ready to accept a new byte of data, and that the transmitter should move on to the next byte after the given cycle
rx_data (Signal(8), output) – data received from the PHY; valid when rx_valid is asserted
rx_valid (Signal(), output) – indicates that the data present on rx_data is new and valid data; goes high for a single usb clock cycle to indicate new data is ready
rx_active (Signal(), output) – indicates that the PHY is actively receiving data from the host; data is only valid when :attr:
rx_valid
is highrx_error (Signal(), output) – indicates that an error has occurred in the current transmission
rx_complete (Signal(), output:) – strobe that goes high for one cycle when a packet rx is complete
line_state (Signal(2), output) – Indicates the current state of the D+ and D- lines. Matches the UTMI specification values, where 0 = SE0, 1 = K, and 2 = J.
vbus_valid (Signal(), output) – Indicates that a valid VBUS signal is present. This signal is valid iff the I/O parameter contains a
vbus_valid
element; otherwise it is hard connected to ‘1’session_end (Signal(), output) – Indicates that no VBUS signal is present. This signal is valid iff the I/O parameter contains a
vbus_valid
element; otherwise it is hard connected to ‘0’xcvr_select (Signal(2), input) – Selects the active USB speed. This transceiver only functions as a full speed transceiver; so this signal is effectively ignored. To support connection to high-speed gateware, this module will prevent the USB lines from being driven when this signal is 0b00; allowing the gateware to attempt a high-speed detection handshake without adverse affect.
term_select (Signal(), input) – When asserted, this will connect the device’s full speed pull-up resistor.
op_mode (Signal(2), input) – Selects the operating mode of the UTMI transceiver. A value of 0 causes normal operations; a value of 1 prevents D+ and D- from being driven; and a value of 2 disables bit-stuffing.
dm_pulldown (Signal(), input) – When asserted, this will indicate that the host-mode’s D- pulldown should be connected.
dm_pulldown (Signal(), input) – When asserted, this will indicate that the host-mode’s D+ pulldown should be connected.
- param io:
A record containing the raw I/O signals to be used to drive our I/O-based USB connection. The
d_p
andd_n
signals are mandatory; thepullup
,pulldown
, andvbus_valid
signals are optional.- type io:
Record(d_p, d_n, [pullup], [pulldown], [vbus_valid])