该组件是一个简单的 USB 外设接口(设备)实现,枚举为高速 (480Mbit/s) 或全速 (12Mbit/s) CDC-ACM 设备。
该 IP 具有用于输入和输出数据的简单 FIFO 接口(有效、数据、接受),以及用于连接到 USB PHY 的 UTMI 接口。
特征
- 高速或全速 USB CDC 设备。
- 硬件枚举 – 无需软件干预。
- UTMI PHY 接口(请参阅我的 UTMI 到 ULPI 转换包装器项目以允许连接到 ULPI PHY,例如 USB3300)
- 具有握手功能的简单 8 位数据输入/输出接口(兼容 8 位宽 AXI4-Stream 接口)。
配置/要求(全速 (12Mbit/s))
- 顶部:usb_cdc_core
- 时钟:clk_i – 48MHz 或 60MHz
- 复位:rst_i – 异步,高电平有效
- VID/PID 可以在 usb_desc_rom.v 中更改
- 参数:USB_SPEED_HS = “假”
配置/要求(高速 (480Mbit/s))
- 顶部:usb_cdc_core
- 时钟:clk_i – 60MHz
- 复位:rst_i – 异步,高电平有效
- VID/PID 可以在 usb_desc_rom.v 中更改
- 参数:USB_SPEED_HS = “真”
限制
- 真正基本的 USB-CDC 类设备实现,将忽略封装、线路状态和线路编码更改请求!
- USB 挂起/恢复将无法正常工作。
测试
经过仿真验证,然后在 FPGA 上针对 Linux、Windows 和 MAC OS-X 进行测试。
FuseSoC 支持
USB CDC 可以使用 verilator 进行 linted,也可以使用 FuseSoC 通过 OpenLANE 制成 GDSII。快速 FuseSoC 说明
#install FuseSoC
pip3 install fusesoc
#Create and enter a new workspace
mkdir workspace && cd workspace
#Register usb cdc as a library in the workspace
fusesoc library add usb_cdc /path/to/core_usb_cdc
#...if repo is available locally or...
fusesoc library add usb_cdc https://github.com/ultraembedded/core_usb_cdc
#...to get the upstream repo
#To run linter
fusesoc run --target=lint ultraembedded:core:usb_cdc
#List all targets
fusesoc core show ultraembedded:core:usb_cdc
#Create a GDSII using a dockerized OpenLANE
#Requires the sky130 PDK and an Edalize launcher script
export PDK_ROOT=/path/to/sky130_pdk
export EDALIZE_LAUNCHER=/path/to/openlane_runner.py
fusesoc run --target=sky130 ultraembedded:core:usb_cdc
没有回复内容