FPGA实现USB2.0通信——基于CY7C68013A芯片

1.简介

FPGA使用USB2.0芯片较为简单,本次使用的USB2.0芯片为CY7C68013A,该芯片内部具有一个增强型的8051内核,对该CPU烧写不同的固件程序可以实现不同的模式,如Bulk模式,Streaming模式等等,使用该芯片需要安装FX2的标准驱动程序以及CySuite USB_3_4_7_B204,这里面有该USB2.0芯片的一些常用固件,如果自己想写固件的话需要下载keil,没错,这就是我们常用的51,32等单片机使用的keil,来编写固件并生成可执行程序,同时要烧写固件需要用到上位机Control Center软件,这里我将上面提到的三个软件打包放在这里了,需要的可以自信去下载,下载地址:FPGA驱动USB2.0芯片需要的驱动,固件以及上位机软件资源-CSDN文库

其中上位机的使用很简单,当USB连接电脑并且驱动安装完成,上位机可以自动识别,如下图所示:

在Program->FX2下可以选择固件进行烧写,其中RAM是用来烧写hex文件的,断电后会消失,而64KB EEPROM是用来烧写iic文件的,属于永久烧写,烧写成功之后在上位机左下角会出现Programming succeeded表明烧写成功,并且在识别到的USB下,可以使用上位机读写其内部的fifo,如下图所示。

2.CY7C68013A芯片介绍

该芯片内部硬件结构如下图所示:

在USB芯片烧写完固件之后,对于FPGA来说,其就相当于一个半双工的同步FIFO,FPGA只需要像读写fifo那样读写该芯片就可以。

3.实验环境简介

本次使用的开发板为锆石科技的FPGA A4_plus,下面对该芯片的部分引脚进行简单介绍:

IFCLK:slave fifo的同步时钟信号,在USB工作在slave模式下,FIFO的同步信号,也是本次实验中使用的时钟引号。

FLAGB:FIFO的满信号

FLAGC:FIFO的空信号

SLCS:USB芯片的片选信号,低电平使能

SLWR:USB芯片等价FIFO的写信号,低电平有效

SLRD:USB芯片等价FIFO的读信号,低电平有效

SLOE:USB芯片输出的使能信号,该信号为低电平时,USB芯片作为输出,高电平作为输入。

FIFOADR:该款USB芯片相当于4个FIFO,该信号控制着哪一个FIFO被选择,4个FIFO的编号是2,4,6,8分别对应00,01,10,11。具体哪个FIFO被选择是由固件所确定的,在上位机软件上可以查看。

其读写时序较为简单,这里就不在赘述了,直接贴源码。

USB2.0写代码:

cpp 复制代码
/*
 * 作者:王志川
 * 功能:USB2.0通信
 * 时间:2024.10.15
 */
 
 module usb2_0(
	input clk,
	input reset,
	input ifclk,   //slave fifo同步时钟信号
	input flagb,   //fifo满信号
	input flagc,   //fifo空信号
	output sloe,   //低电平作为输入,高电平作为输出
	output slwr,   //写信号,低电平有效
	output slrd,   //读信号,低电平有效
	output slcs,   //片选信号,低电平使能
	output [1:0]fifo_addr,  //4个fifo编号为2,4,6,8分别对应00,01,10,11
	output reg[15:0]data   //接收和发送数据信号,input为向usb读数据,output为向usb写数据
	//input [15:0]data
 );

//写数据部分
 assign slcs = 1'b0;
 assign slwr = (flagb == 1'b0);
 assign slrd = 1'b1;
 assign sloe = 1'b1;
 assign fifo_addr = 2'b10;


always @(posedge ifclk or negedge reset)
    if(reset == 1'b0)
        data <= 16'd0;
    else if(slwr == 1'b0)
        data <= data + 1'b1;
    else
        data <= data;

USB2.0读代码:

cpp 复制代码
/*
 * 作者:王志川
 * 功能:USB2.0通信
 * 时间:2024.10.15
 */
 
 module usb2_0(
	input clk,
	input reset,
	input ifclk,   //slave fifo同步时钟信号
	input flagb,   //fifo满信号
	input flagc,   //fifo空信号
	output sloe,   //低电平作为输入,高电平作为输出
	output slwr,   //写信号,低电平有效
	output slrd,   //读信号,低电平有效
	output slcs,   //片选信号,低电平使能
	output [1:0]fifo_addr,  //4个fifo编号为2,4,6,8分别对应00,01,10,11
	//output reg[15:0]data   //接收和发送数据信号,input为向usb读数据,output为向usb写数据
	input [15:0]data
 );

//写数据部分
//assign slcs = 1'b0;
//assign slwr = (flagb == 1'b0);
//assign slrd = 1'b1;
//assign sloe = 1'b1;
//assign fifo_addr = 2'b10;
//
//
//always @(posedge ifclk or negedge reset)
//    if(reset == 1'b0)
//        data <= 16'd0;
//    else if(slwr == 1'b0)
//        data <= data + 1'b1;
//    else
//        data <= data;

//读数据部分
reg [15:0]read_data;

assign slcs = 1'b0;
assign slwr = 1'b1;
assign slrd = (flagc == 1'b0);
assign sloe = 1'b0;
assign fifo_addr = 2'b00;

always @(posedge ifclk)
	read_data <= data;
 
 endmodule

4.实验结果

实验结果如下图所示:

相关推荐
威视锐科技3 小时前
软件定义无线电36
网络·网络协议·算法·fpga开发·架构·信息与通信
JINX的诅咒3 小时前
CORDIC算法:三角函数的硬件加速革命——从数学原理到FPGA实现的超高效计算方案
算法·数学建模·fpga开发·架构·信号处理·硬件加速器
Qwertyuiop20165 小时前
搭建开源笔记平台:outline
笔记·开源
说私域6 小时前
消费品行业创新创业中品类创新与数字化工具的融合:以开源 AI 智能客服、AI 智能名片及 S2B2C 商城小程序为例
人工智能·小程序·开源
说私域6 小时前
开源AI大模型赋能的S2B2C商业生态重构研究——基于智能名片系统的体验认知与KOC背书机制
人工智能·小程序·重构·开源
云山工作室6 小时前
基于FPGA的智能垃圾分类装置(论文+源码)
单片机·fpga开发·毕业设计·毕设
vonchenchen18 小时前
nara wpe去混响学习笔记
机器学习·音视频·音频·信息与通信·信号处理
阳光普照世界和平9 小时前
为什么需要开源成分分析?库博同源分析工具介绍
开源
陈哥聊测试15 小时前
国产化替代是个伪命题?被误解多年的开源软件,如今怎么样了?
程序员·开源·产品
AORO_BEIDOU18 小时前
防爆平板:工业数字化转型的战略支点与低碳革命先锋
网络·5g·电脑·信息与通信