Entity: usb_fs_tx

Diagram

clk_i rst_ni link_reset_i tx_osc_test_mode_i bit_strobe_i pkt_start_i [3:0] pid_i tx_data_avail_i [7:0] tx_data_i usb_oe_o usb_d_o usb_se0_o pkt_end_o tx_data_get_o

Description

Copyright lowRISC contributors. Copyright ETH Zurich. Copyright Luke Valenty (TinyFPGA project, https://github.com/tinyfpga/TinyFPGA-Bootloader). Licensed under the Apache License, Version 2.0, see LICENSE for details. SPDX-License-Identifier: Apache-2.0

Ports

Port name Direction Type Description
clk_i input A 48MHz clock is required to receive USB data at 12MHz it's simpler to juse use 48MHz everywhere
rst_ni input asyc reset
link_reset_i input USB reset, sync to 48 MHz, active high
tx_osc_test_mode_i input Oscillator test mode (constantly output JK)
bit_strobe_i input bit strobe from rx to align with senders clock
usb_oe_o output output enable to take ownership of bus and data out
usb_d_o output
usb_se0_o output
pkt_start_i input pulse to initiate new packet transmission
pkt_end_o output
pid_i input [3:0] pid_i to send
tx_data_avail_i input tx logic pulls data until there is nothing available
tx_data_get_o output
tx_data_i input [7:0]

Signals

Name Type Description
pid_q logic [3:0] /////////////////////// Signal Declarations // ///////////////////////
pid_d logic [3:0] /////////////////////// Signal Declarations // ///////////////////////
bitstuff logic
bitstuff_q logic
bitstuff_q2 logic
bitstuff_q3 logic
bitstuff_q4 logic
bit_history logic [5:0]
state_d state_e
state_q state_e
out_state_d out_state_e
out_state_q out_state_e
data_shift_reg_q logic [7:0]
data_shift_reg_d logic [7:0]
oe_shift_reg_q logic [7:0]
oe_shift_reg_d logic [7:0]
se0_shift_reg_q logic [7:0]
se0_shift_reg_d logic [7:0]
data_payload_q logic
data_payload_d logic
tx_data_get_q logic
tx_data_get_d logic
byte_strobe_q logic
byte_strobe_d logic
bit_history_d logic [4:0]
bit_history_q logic [4:0]
bit_count_d logic [2:0]
bit_count_q logic [2:0]
crc16_d logic [15:0]
crc16_q logic [15:0]
oe_q logic
oe_d logic
usb_d_q logic
usb_d_d logic
usb_se0_q logic
usb_se0_d logic
dp_eop_q logic [2:0]
dp_eop_d logic [2:0]
test_mode_start logic
serial_tx_data logic
serial_tx_oe logic
serial_tx_se0 logic
crc16_invert logic
pkt_end logic
out_nrzi_en logic

Types

Name Type Description
state_e enum logic [2:0] {
Idle,
Sync,
Pid,
DataOrCrc160,
Crc161,
Eop,
OscTest}
out_state_e enum logic [1:0] {
OsIdle,
OsWaitByte,
OsTransmit}

Processes

Type: always_ff

Description
save packet parameters at pkt_start_i

Type: always_ff

Type: always_comb

Description
/////// FSM // ///////

Type: always_comb

Type: always_comb

Type: always_ff

Description
///////////////////// Regular Registers // /////////////////////

Type: always_comb

Description
///////////////////////////////// nrzi and differential driving // ///////////////////////////////// Output FSM

Type: always_comb

Type: always_ff