您现在的位置是:主页 > news > 想自己做个公司网站不知道怎么做/下百度安装
想自己做个公司网站不知道怎么做/下百度安装
admin2025/4/30 11:46:35【news】
简介想自己做个公司网站不知道怎么做,下百度安装,济南网站优化网站,响应式布局设计文章目录开发环境准备工作驱动固件GPIF II Designer写标志读标志CyU3PGpifSocketConfigure设置水印值测试下载固件读测试写测试测速固件固化到CYUSB3014总结福利开发环境 小梅哥AC6102开发板(内含CYUSB3014芯片)quartus prime17.1win10带usb3.0接口的电…
想自己做个公司网站不知道怎么做,下百度安装,济南网站优化网站,响应式布局设计文章目录开发环境准备工作驱动固件GPIF II Designer写标志读标志CyU3PGpifSocketConfigure设置水印值测试下载固件读测试写测试测速固件固化到CYUSB3014总结福利开发环境
小梅哥AC6102开发板(内含CYUSB3014芯片)quartus prime17.1win10带usb3.0接口的电…
文章目录
- 开发环境
- 准备工作
- 驱动
- 固件
- GPIF II Designer
- 写标志
- 读标志
- CyU3PGpifSocketConfigure设置水印值
- 测试
- 下载固件
- 读测试
- 写测试
- 测速
- 固件固化到CYUSB3014
- 总结
- 福利
开发环境
- 小梅哥AC6102开发板(内含CYUSB3014芯片)
- quartus prime17.1
- win10
- 带usb3.0接口的电脑
只要带CYUSB3014芯片的fpga开发板都可以参考本教程
准备工作
- 缓冲区可以通过固件来配置,上图是2缓存,每个缓冲区是1kB,为了提高性能,我在固件中设置的是4缓存,每个缓冲区16KB.数据总线32位宽,时钟100MHz,实测上下行通信都能达到338MB/s。
- CYUSB3014芯片与fpga连接还是和usb2.0的一样,使用的是GPIF接口,我们只需要把CYUSB3014当成fifo来使用即可。
驱动
- 先安装FX3_SDK_Windows_v1.3.3,这个软件安装目录,下面有简称为SDK
- 在SDK目录中,有提供很多文档、固件实例和相应的驱动
- 在进行试验前要先安装好cypress提供的usb驱动,插上usb后,电脑就会检测到未识别的设备,这时打开设备管理器,右键未识别的usb,然后手动选择驱动。
固件
- 对于固件这块,有兴趣的同学可以自己去研究一下,如果只是使用的话,就可以直接使用我写好的固件。使用本实例的固件,你就可以基本可以把当成usb2.0一样使用了,因为他们都是slave fifo模块。
- 如果自己想折腾一下的话,需要注意的就是标志信号的设置,usb标志信号比较灵活。下面主要讲解一下标志信号的设置。
GPIF II Designer
Cypress官方提供了一个软件,可以用来设置gpif接口信号(包括标志信号),本教程只针对slave fifo,其他的模式自己去查看文档。
- 打开GPIF II软件
点击红色圈的地方
- 想要编辑更多的信息,点击 File->Save project as Editable…
左边编辑区按上图设置,右边的框图主要是设置标志信号FLAGA/FLAGB/FLAGC/FLAGD.双击右边的标志,各标志设置如下所示:
- 四个标志都设置为低有效!!!初始值倒无所谓,并且都设置为专用标志
- 设置完后,只需要编译一下就可以了生成我们需要的头文件了。
- 将这个.h文件放到固件的工程中,替换固件相应的.h文件即可。
- 这些我都已经做好了,如果你没有说明特别的需要,就直接使用我的固件工程即可,就不需要自己再去设计GPIF接口了。
写标志
- flag_a和flag_b设置成线程0(P2U,即FPGA往CYUSB3014写)专用标志,flag_b为有水印值标志,
- 当写满时,正常的flag_a会拉低,但是拉低的时间有点迟了,导致fpga检测到flag_a为低时,已经写溢出了,而flag_b的水印值可以使标志提前拉低,以便fpga检测到flag_b为低,不会发生写溢出。
- 因为我们slwr信号是要根据flag来驱动的,假如没有水印值标志,使用flag_a,检测到flag_a == 0时,再将slwr拉高,是不是就会发生写溢出了。通过上图不难发现只需要将flag_a提前4个周期拉低就可以满足我们的要求了。所以我们设置水印值为4.到时候看看signal_tap抓的图就知道了
读标志
- flag_c 和 flag_d 设置成线程3(U2P,即FPGA从CYUSB3014读)专用标志,flag_d为有水印值标志,
- 当读空时,正常的flag_c会拉低,但是拉低的时间有点迟了,导致fpga检测到flag_a为低时,已经读空了,而flag_d的水印值可以使标志提前拉低,以便fpga检测到flag_b为低,不会发生读空。
- 和写操作类似,slrd信号是要根据flag来驱动的,假如没有水印值标志,使用flag_c,检测到flag_c == 0时,再将slrd拉高,是不是就会发生读空了。通过上图不难发现只需要将flag_c提前3个周期拉低就可以满足我们的要求了。所以我们设置水印值为3.到时候看看signal_tap抓的图就知道了
- 另外需要主要的地方是fifo_addr到数据有效有3个周期延迟
CyU3PGpifSocketConfigure设置水印值
- 打开ezUsbSuite.exe
- 导入本教程提供的固件工程
- 设置水印值很简单,使用CyU3PGpifSocketConfigure()函数即可。
- 最后再提醒一下,fifo的大小是16k,P2U的缓冲区设置为8个,U2P缓冲区设置为4个,这种配置可以最大的提高传输速度。需要注意的是,不管是写还是读,都是以16k为单位的,也就是说即便你只是想发送一个4字节的指令,你也要发送16k字节,多余发0就可以了。
- 设置完后,就可以编译了,画重点了,使用debug编译的速度大概在252MB/s,使用release编译的速度大概在338MB/s.
测试
本教程提供的固件,是同时支持读写的。
下载固件
在调试期间,先将引导方式设置为usb引导
打开control center软件
读测试
打开本教程提供的fpga程序,设置slrd下降沿触发。
因为读缓冲区的大小是16k字节,而我们发送数据一般都是一些指令,数据量比较小,所以我在数据结构做了个调整,前4个字节是你要发送的数据的长度(32位),在fpga中,有cmd_flag和cmd_data信号,根据这两个信号就知道读的数据了。具体自己看我的代码。
写测试
写测试就简单了,点击transfer data-in,pc就会读取16k数据。数据为0-16‘h0000_0FFF,
测速
打开streamer软件
可以看出读写速度都差不多在338MB/s左右。性能还是不错的咯
固件固化到CYUSB3014
- 前面调试完了后,就可以将固件通过SPI的方式固化了
- 再usb引导方式下,选择 program->FX3->SPI,选择release目录下的固件。注意SPI烧写固件需要几秒钟的,不要过早断电了,看到成功后再断电!!!
- 将板子断电,将引导方式切换到SPI即可
总结
- 前面介绍了有点过于详细了,基本都是“傻瓜式教学”,其实如果你没有说明特殊要求的话,是可以直接使用本教程的固件的,固件信息如下:
- 系统时钟100MHz
- 总线位宽32位
- P2U缓冲区大小为16k,个数位8
- U2P缓冲区大小为16k,个数位4
- 读写都要以16k为单位
- flag_a:线程0专用的满标志
- flag_b:线程0水印值为4的专用局部标志
- flag_c:线程3专用的空标志
- flag_d:线程3水印值为3的专用局部标志
- FPGA状态机编写参考我的就可以了,核心部分基本不用改
福利
为了能及时回复大家,现在获取源码方式如下:
微信扫描下面的二维码关注【春哥笔记】公众号,回复"usb3"即可Get源码的获取方式: