blob: 382f6a765e0e160a6393fba8c989b074cba5bd30 [file] [log] [blame]
/*
USB Serial
Wrapping usb/usb_uart_ice40.v to create a loopback.
*/
module usbserial_tbx (
input pin_clk,
inout pin_usb_p,
inout pin_usb_n,
output pin_pu,
output pin_led,
output [3:0] debug
);
wire clk_48mhz;
wire clk_locked;
// Use an icepll generated pll
pll pll48( .clock_in(pin_clk), .clock_out(clk_48mhz), .locked( clk_locked ) );
// LED
reg [22:0] ledCounter;
always @(posedge clk_48mhz) begin
ledCounter <= ledCounter + 1;
end
assign pin_led = ledCounter[ 22 ];
// Generate reset signal
reg [5:0] reset_cnt = 0;
wire reset = ~reset_cnt[5];
always @(posedge clk_48mhz)
if ( clk_locked )
reset_cnt <= reset_cnt + reset;
// uart pipeline in
wire [7:0] uart_in_data;
wire uart_in_valid;
wire uart_in_ready;
// assign debug = { uart_in_valid, uart_in_ready, reset, clk_48mhz };
wire usb_p_tx;
wire usb_n_tx;
wire usb_p_rx;
wire usb_n_rx;
wire usb_tx_en;
// usb uart - this instanciates the entire USB device.
usb_uart uart (
.clk_48mhz (clk_48mhz),
.reset (reset),
// pins
.pin_usb_p( pin_usb_p ),
.pin_usb_n( pin_usb_n ),
// uart pipeline in
.uart_in_data( uart_in_data ),
.uart_in_valid( uart_in_valid ),
.uart_in_ready( uart_in_ready ),
.uart_out_data( uart_in_data ),
.uart_out_valid( uart_in_valid ),
.uart_out_ready( uart_in_ready )
//.debug( debug )
);
// USB Host Detect Pull Up
assign pin_pu = 1'b1;
endmodule