0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

优秀的 Verilog/FPGA开源项目之 USB通信

OpenFPGA 来源:OpenFPGA 作者:碎碎思 2021-11-02 14:54 次阅读

优秀的 Verilog/FPGA开源项目介绍(五)- USB通信

USB是我们生活中非常非常常见的接口,鼠标、键盘以及常见的U 盘等,可以说现在的USB设备已经渗透到生活中的方方面面,下面就介绍几个开源的USB IP,供大家学习。

0-官方网站

https://www.usb.org/

很多人花各种XX币下载各种标准,其实太浪费时间和精力了,这里介绍一个网站--usb.org。

USB Implementers Forum, Inc. 是一家非营利性公司,由开发通用串行总线规范的公司集团创立。USB-IF 的成立是为了为通用串行总线技术的进步和采用提供支持组织和论坛。该论坛促进了高质量兼容 USB 外围设备(设备)的开发,并促进了 USB 的优势和通过一致性测试的产品质量。

1-usbcorev

项目地址

https://github.com/avakar/usbcorev

项目简介

该IP可以将全速 (12Mbps) USB 2.0 设备内核嵌入到 FPGA 设计中。

接口部分

我们知道USB接口使用了差分结构,所以接口部分还是很复杂的。

980b5e2c-3b8a-11ec-82a9-dac502259ad0.png

由于 USB 在其半双工差分线上使用了一些奇怪的信号,因此需要做一些工作才能将其连接到核心。以下五个信号连接到USB 信号的 D+ 和 D- 。

  • input rx_j -- D+/D-线上的微分值

  • input rx_se0 -- 单端零检测:应在 D+ 和 D- 线均为零时设置

  • output tx_se0-- 在两条 USB 线上传输零;优先于tx_j

  • output tx_j-- 传输tx_j到 D+ 和~tx_jD-

  • output tx_en -- 启用发射器

如果使用的 FPGA 没有差分接收器,那么可以简单地使用两个引脚并按如下方式连接它们。但是,如果没有差分接收器,这将超出 USB 规范。

inoutusb_dp;
inoutusb_dn;

//...

wireusb_tx_se0,usb_tx_j,usb_tx_en;
usbusb0(
.rx_j(usb_dp),
.rx_se0(!usb_dp&&!usb_dn),

.tx_se0(usb_tx_se0),
.tx_j(usb_tx_j),
.tx_en(usb_tx_en));

assignusb_dp=usb_tx_en?(usb_tx_se0?1'b0:usb_tx_j):1'bz;
assignusb_dn=usb_tx_en?(usb_tx_se0?1'b0:!usb_tx_j):1'bz;

对于 Xilinx Spartan 6 系列,使用四个物理引脚如下。

//Thesepinsareconfiguredasdifferentialinputs.Unfortunately,
//youcan'tusesingle-endedreceiversnortransmittersonthesepins.
inputusb_sp;
inputusb_sn;

//Thesepinsaresingle-endedinouts.
inoutusb_dp;
inoutusb_dn'

//...

IBUFDSusb_j_buf(.I(usb_sp),.IB(usb_sn),.O(usb_rx_j_presync));
synchusb_j_synch(clk_48,usb_rx_j_presync,usb_rx_j);
synchusb_se0_synch(clk_48,!usb_dp&&!usb_dn,usb_rx_se0);

wireusb_tx_se0,usb_tx_j,usb_tx_en;
usbusb0(
.rx_j(usb_rx_j),
.rx_se0(usb_rx_se0),

.tx_se0(usb_tx_se0),
.tx_j(usb_tx_j),
.tx_en(usb_tx_en));

assignusb_dp=usb_tx_en?(usb_tx_se0?1'b0:usb_tx_j):1'bz;
assignusb_dn=usb_tx_en?(usb_tx_se0?1'b0:!usb_tx_j):1'bz;

注意接收器之后的同步。

无论在哪个引脚上传输,都需要在线路上增加串阻,通常大约 27 欧姆就可以了。

还需要将 D+ 线增加1.5K的 3.3V 上拉。如果您想动态连接/分离到总线,可以直接或通过 FPGA 上的引脚拉动它。确保永远不要下拉线路,上拉引脚的唯一有效输出是1'b1和1'bz。

2-no2usb

https://github.com/no2fpga/no2usb

该项目是Lattice众多拥簇的一员的项目,平台也是运行在ice40中,之前我也做了一个开发板(),奈何国内对这个感兴趣的不过,也就没怎么推广。

下面简单介绍一下这个项目。

概述

该 fpga 内核仅使用普通 FPGA CMOS IO 实现 USB 全速 SIU(Server Interface Unit)。

  • 小巧高效(最初针对 ice40)
  • 灵活,动态 EP 配置
  • 时钟

该项目目前只运行在ice40芯片(Apple曾使用的)上,目前在适配ecp5(lattice)。

说明

https://github.com/smunaut/ice40-playground/tree/master/cores

3-tinyfpga_bx_usbserial(USB转串口 SPI)

https://github.com/davidthings/tinyfpga_bx_usbserial

这个项目的起源也很有意思,ice40系列FPGA是使用SPI接口烧写程序的(类似JTAG),使用时需要一个USB转SPI芯片作为“JTAG”,常用的就是FT232/FT2232等,但是FTDI的芯片价格普遍比较贵(差不多和ICE40一样价格甚至更贵),本项目的起源就是为了节省这一芯片,使用FPGA本身实现USB-SPI。

项目起源地址

https://github.com/tinyfpga/TinyFPGA-Bootloader

简介

Lawrie Griffiths 深入研究了这段代码的"暗盒",并做了大量工作将其更改为 USB - SERIAL 桥接器,将用户视为串行端口,而不是 SPI 主机。他还创造了一些很好的例子,他的工作在这里:

https://github.com/lawrie/tiny_usb_examples

本项目针对以上两个项目做了一些改善。并且做了很多改善,不仅使用ICE40系列FPGA还适配了XIlinx A7 FPGA,同时ECP5(Lattice)也可以使用。

项目资源使用如下:

Info:Deviceutilisation:
Info:ICESTORM_LC:1093/768014%
Info:ICESTORM_RAM:2/326%
Info:SB_IO:9/2563%
Info:SB_GB:8/8100%
Info:ICESTORM_PLL:1/250%
Info:SB_WARMBOOT:0/10%

项目的README中有详细的介绍及使用教程,这里就介绍的这里,毕竟不是完整的USB通信。

4-众多IP核

https://github.com/ultraembedded/cores

这个项目不仅不包括了USB(主要是USB1.1),还包括很多常见的低速接口-SPI UART I2S等等

每个IP都有完整的说明,自己去看吧,非常适合新手调试接口。

5-usb_cdc(设备类)

https://github.com/ultraembedded/core_usb_cdc

USB的CDC类是USB通信设备类 (Communication Device Class)的简称。CDC类是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通信设备)使用的USB子类。

简介

该项目是一个简单的 USB 外设接口(设备)实现,可枚举为高速 (480Mbit/s) 或全速 (12Mbit/s) CDC-ACM 设备。

该 IP 具有用于输入和输出数据的简单 FIFO 接口(有效、数据、接受),以及用于连接到 USB PHY 的 UTMI 接口。

特征

  • 高速或全速 USB CDC 设备。
  • 硬件枚举 - 无需软件干预。
  • UTMI PHY 接口
  • 具有握手功能的简单 8 位数据输入/输出接口(符合 8 位宽 AXI4-Stream 接口)。
  • 配置/要求(全速(12Mbit/s))

文件说明

Configuration/Requirements(FullSpeed(12Mbit/s))

Top:usb_cdc_core
Clock:clk_i-48MHzor60MHz
Reset:rst_i-Asynchronous,activehigh
VID/PIDcanbechangedinusb_desc_rom.v
Param:USB_SPEED_HS="False"
Configuration/Requirements(HighSpeed(480Mbit/s))

Top:usb_cdc_core
Clock:clk_i-60MHz
Reset:rst_i-Asynchronous,activehigh
VID/PIDcanbechangedinusb_desc_rom.v
Param:USB_SPEED_HS="True"

该项目在仿真下验证,在 FPGA 上针对 Linux、Windows 和 MAC OS-X 进行了测试。

6-www-asics-ws的项目

https://github.com/www-asics-ws

www-asics-ws项目中包含了USB1.1和USB2.0设备类USB IP。
usb1_device

  • USB 1.1 兼容功能
  • 支持硬件枚举
  • 无需微控制器/CPU
  • 基于 FIFO 的接口
  • 用 Verilog 编写
  • 完全可合成
  • 仿真及硬件测试

usb2_dev

这是一个符合 USB 2.0 标准的内核。由于接口速度高,此内核需要外部 PHY。已开发出用于 USB 的行业标准 PHY 接口。该接口称为USB Transceiver Macrocell Interface或简称UTMI。USB 内核的主机接口符合 WISHBONE SoC 标准。有关 USB 标准和完整规范的更多信息,请访问www.usb.org。有关 WISHBONE SoC 的更多信息和完整规范,请访问www.opencores.org。UTMI 规范(以及其他各种有用的 USB 文件)可以从这里下载:https : //www.intel.com/content/www/us/en/io/universal-serial-bus/universal-serial-bus-specifications .html

参考意义不大,不能直接在FPGA中使用,需要搭配PHY使用。

7-usbhostslave

https://github.com/freecores/usbhostslave

该项目已使用 Quartus 6.0 成功编译并且USBHostSlave 已经在 SystemC 和 Altera Nios 开发套件 Cyclone 版中进行了测试。

整个项目文档说明很少,但是看提交记录该项目完成度很高,还是适合入坑。

优秀的 Verilog/FPGA开源项目介绍(四)- Ethernet

9-core_usb_sniffer

https://github.com/ultraembedded/core_usb_sniffer

这个内核是一个 HS/FS USB2.0 分析器(USB 总线嗅探器)。

内核监控 UTMI 接口,并通过 AXI-4 总线主接口将看到的流量记录到内存缓冲区。

可以连续提取日志格式(连续捕获模式),也可以在内存缓冲区已满时内核停止捕获(一次性模式)。

IP 的配置是使用 AXI4-Lite 从接口执行的。

该内核已用于生产USB 2.0 捕获设备(https://github.com/ultraembedded/usb2sniffer)这是实现的案例。

10-商业IP

https://www.synopsys.com/designware-ip/interface-ip/usb.html

商业IP肯定首推来自老牌大厂新思,新思科技在2018年推出基于HAPS-80 FPGA的硬件原型验证平台上部署了USB 3.2设备IP和主机IP。这些FPGA硬件原型验证平台在FinFET工艺节点的FPGA中使用了USB PHY。解决方案如下:

有需要的可以去上面的网站了解,需要money的IP,所以我就不过多介绍了,个人也不会选用,大公司自然有销售对接。

以上就是今天推荐的项目,这里建议第一个和第五个项目可以入坑,其他看自己需求。

最后,还是感谢各个大佬开源的项目,让我们受益匪浅。后面有什么感兴趣方面的项目,大家可以在后台留言或者加微信留言,今天就到这,我是爆肝的碎碎思,期待下期文章与你相见。

编辑:jq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1624

    文章

    21604

    浏览量

    601070
  • USB 2.0
    +关注

    关注

    1

    文章

    23

    浏览量

    17393
  • IP
    IP
    +关注

    关注

    5

    文章

    1598

    浏览量

    149219
  • PHY
    PHY
    +关注

    关注

    2

    文章

    301

    浏览量

    51649

原文标题:优秀的 Verilog/FPGA开源项目介绍(五)- USB通信

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGA加速深度学习模型的案例

    名称 :DE5Net_Conv_Accelerator 应用场景 :面向深度学习的开源项目,实现了AlexNet的第一层卷积运算加速。 技术特点 : 采用了Verilog语言进行编程,与PCIe接口相集成,可以直接插入到
    的头像 发表于 10-25 09:22 90次阅读

    怎么样提高verilog代码编写水平?

    优秀代码:在网上查找开源的、经过验证的高质量 Verilog 代码,学习他人的编程风格、代码结构和设计思路。 实践项目:尝试自己设计和实现一些较为复杂的
    发表于 09-25 20:05

    FPGA芯片架构和资源有深入的理解,精通Verilog HDL、VHDL

    岗位职责 1.负责FPGA的架构设计、代码编写、仿真等; 2.协同软、硬件工程师完成系统联调和测试; 3.负责项目FPGA设计的相关文档编写及维护; 任职要求 1.硕士及以上学历,电子、通信
    发表于 09-15 15:23

    如何用FPGA实现一个通信系统的发射端接收机?

    基础(略懂verilog语法和通信原理)的人该怎么一步步学习? A:对于这个问题,分两部分回答,一部分是如何设计以及思路,另一部分是规划学习路线。拙见,仅供参考。 如何设计以及思路如下: 以下是使用 FPGA
    发表于 09-10 19:15

    【招聘】verilog vhdl FPGA

    1.熟悉FPGA架构及应用,熟悉图像算法的FPGA实现。 2.熟悉verilog vhdl,熟悉Xilinx或Intel等开发工具。 3.有AI算法 fpga实现经验优先。 4.本科及
    发表于 09-02 15:50

    FPGA开源项目Verilog常用可综合IP模块库

    所有代码在典型的 FPGA 和主流 FPGA 供应商中都具有高度可重用性。 可以出于任何目的对文件进行重新混合、转换和构建,甚至是商业用途。
    发表于 03-29 11:31 788次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>开源</b><b class='flag-5'>项目</b>:<b class='flag-5'>Verilog</b>常用可综合IP模块库

    fpga是用c语言还是verilog

    FPGA(现场可编程逻辑门阵列)开发主要使用的编程语言是硬件描述语言(HDL),其中Verilog是最常用的编程语言之一。而C语言通常用于传统的软件编程,与FPGA的硬件编程有所区别。
    的头像 发表于 03-27 14:38 1655次阅读

    如何排查FPGAUSB之间的芯片通信问题?

    ”,而在SBBulkSourceSink固件中没有显示这个错误,可不可以证明我的FPGAUSB之间通信成功?另外,我该如何排查FPGAUSB
    发表于 02-27 06:46

    优秀Verilog/FPGA开源项目开发-CAN通信

    CAN总线有两个ISO国际标准:ISO11898 和 ISO11519。
    的头像 发表于 02-22 09:32 1771次阅读
    <b class='flag-5'>优秀</b>的<b class='flag-5'>Verilog</b>/<b class='flag-5'>FPGA</b><b class='flag-5'>开源</b><b class='flag-5'>项目</b>开发-CAN<b class='flag-5'>通信</b>篇

    FPGA? 开搞!

    。 该工具链使用 Yosys 和 OpenFPGALoader 等开源工具,并与 Cologne Chip 合作开发实施和比特流生成工具。在设计输入方面,工程师可以使用 Verilog、VHDL(通过
    发表于 01-11 00:52

    关于FPGA开源项目介绍

    Hello,大家好,之前给大家分享了大约一百多个关于FPGA开源项目,涉及PCIe、网络、RISC-V、视频编码等等,这次给大家带来的是不枯燥的娱乐项目,主要偏向老的游戏内核使用
    的头像 发表于 01-10 10:54 1295次阅读
    关于<b class='flag-5'>FPGA</b>的<b class='flag-5'>开源</b><b class='flag-5'>项目</b>介绍

    开源FPGA项目有哪些

    请问开源FPGA项目有哪些?
    发表于 12-26 12:09

    书写开源魂|2023 年活力开源贡献者、开源项目揭晓

    ,共同构筑可持续发展的开源生态。 11 月 9 日,2023 年贡献者与开源项目评选正式启动。为感谢广大贡献者坚持不懈的努力和贡献,2023 年活力开源贡献者、
    的头像 发表于 12-22 09:26 595次阅读
    书写<b class='flag-5'>开源</b><b class='flag-5'>之</b>魂|2023 年活力<b class='flag-5'>开源</b>贡献者、<b class='flag-5'>开源</b><b class='flag-5'>项目</b>揭晓

    书写开源魂|2023年活力开源贡献者、开源项目揭晓

    ,共同构筑可持续发展的开源生态。 11月9日,2023年贡献者与开源项目评选正式启动。为感谢广大贡献者坚持不懈的努力和贡献,2023年活力开源贡献者、
    的头像 发表于 12-18 15:55 455次阅读

    FPGA优质开源模块-SRIO IP核的使用

    本文介绍一个FPGA常用模块:SRIO(Serial RapidIO)。SRIO协议是一种高速串行通信协议,在我参与的项目中主要是用于FPGA和DSP之间的高速
    的头像 发表于 12-12 09:19 1987次阅读
    <b class='flag-5'>FPGA</b>优质<b class='flag-5'>开源</b>模块-SRIO IP核的使用