完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
你好,
我们有一个设计与FX2(CY68013A)和FPGA。我们使用从FIFO接口,主要是对高输出吞吐量感兴趣。 我目前有大约27 Mb/s,但尖叫的例子说它可以做32 Mb/s。我认为在PC方面,我已经拥有了尖叫的例子中的所有东西。 我使用一个几乎空的可编程标志,所以我可以保持SLRD连续活跃的大部分在FX2和FPGA之间的转移。 我在EP2和EP6上使用4X 512批量模式。 我正在使用一个运行在40MHz的外部IFCK。 我应该在哪里寻找改善?内部替代外部IFCK?更快的IFCK? 我还发现,当我使用两个设备时,组合吞吐量可以达到41 Mb/s。为什么一个FX2不能得到这个带宽? 感谢任何帮助, 马滕 以上来自于百度翻译 以下为原文 Hi, We have a design with an FX2 (CY68013A) and an FPGA. We use the Slave FIFO interface and are mainly interested in high OUT throughput. I currently have around 27 MB/s but the screamer example says it can do 32 MB/s. On the PC side I already have everything as in the screamer example, I think. I use a programmable flag for almost empty so I can keep SLRD active continuously for most of the transfer between FX2 and FPGA. I'm using 4x 512 Bulk mode on EP2 and EP6. I'm using an external IFCLK running at 40MHz. Where should I look for improvement? Internal instead of external IFCLK? Faster IFCLK? I also found out that when I use two devices the combined throughput can go up to 41 MB/s. Why can't a single FX2 get this bandwidth? Any help is appreciated, Maarten |
|
相关推荐
5个回答
|
|
|
|
|
|
当我使用带Keil演示板和CySal.IIC的拖缆时,我看到了32 Mb/s。
当我使用自己的应用程序发送4个16MB数据块时,我看到27 Mb/s。我已经将XFEXSIZE设置为1MB和4个循环的16个结果的StasXFER调用+等待16个WaWixFER和FinishXfer调用。Pseudocode: 对于i=1到4,获得j=1到16的启动时间(1MB,重叠),对于j=1到16 WaitXfer FinishXfer得到结束时间累积转移时间。 以上来自于百度翻译 以下为原文 When I use Streamer with the Keil demoboard and CYStream.iic I see 32 MB/s. When I use my own application which sends 4 chunks of 16MB data I see 27 MB/s. I've set XferSize to 1MB and time 4 loops of 16 consequentive StartXfer calls + wait for 16 WaitXfer and FinishXfer calls. Pseudocode: for i=1 to 4 get start time for j=1 to 16 StartXfer (1MB, overlapped) for j=1 to 16 WaitXfer FinishXfer get end time accumulate transfer times |
|
|
|
CySt流只是获取数据包并丢弃它。在OUT的情况下,它会产生被拖缆丢弃的垃圾包。
在你的情况下,你有其他依赖关系,即固件,主机应用程序做的东西与包和接口等是不同的。你应该能够改变VID/PID到04B4/1003,绑定到流和发送数据包。这将给你一个可以实现的吞吐量的好主意。 通过比较CyStase+ StuffER与你的应用程序+固件,我们比较两个未知数,即工作未知,隔离和理解可以在哪里进行改进。 当做, 阿南德 以上来自于百度翻译 以下为原文 Cystream just gets the packets and discards it. In the case of out it generates junk packets which are discarded by streamer. In your case you've other dependencies i.e. firmware, host app doing something with packet and interface etc etc is different. You should be able to change the VID/PID to 04B4/1003, bind to streamer and send packets. This would give you a good idea of the throughput achieveable. By comparing cystream + streamer with your application + firmware we're comparing two unknowns i.e. work the unknowns to isolate and understand where the improvement can be made... Regards, Anand |
|
|
|
虽然我发现很奇怪,但我越来越近了。
我有一个DLL,它有一个函数,它从一个Apple中提取数据,把它切成块,然后把它发送给FX2。当我传递一个数组gt;1MB,我访问数组中至少一个字节时,传输速度减慢。如果我不触摸数组内容,而是在DLL中使用一个哑数组,则传输速度很快。如果我在块和1MB中通过另一个函数填充这个哑,它会保持很快。如果我只通过一个大数组,传输就会变慢。在大数组访问和传输之间有多少时间似乎并不重要。看起来,当我通过一个大数组来减缓所有的事情时,就会触发某种保护算法。它甚至与数组的大小成比例。 有人知道我面对的是什么吗? 以上来自于百度翻译 以下为原文 Even though what I find is very weird, I am getting closer. I have a DLL with a function that takes the data from an apllication, chops it in chunks and sends it to the FX2. When I pass an array of >1MB and I access at least one byte in that array the transfer slows down. If I do not touch the array contents but instead use a dummy array within the DLL the transfer is fast. If I fill up this dummy through another function in chunks <1MB it stays fast. If I only once pass a large array the transfer becomes slower. It doesn't seem to matter how much time there is between the large array access and the transfer. It looks as if some protection algorithm is triggered once I pass a large array that slows everything down. It even scales with how much bigger the array is. Does anyone have an idea what it is I am facing here? |
|
|
|
我不确定你面临的1字节访问问题,
这很可能是由于OS或您的变量类型(在DLL)的保护机制,以避免数据损坏,即只允许句柄访问阵列一次。 关于大型阵列传递,最可能是由于主机控制器驱动器中的大小分配。默认情况下,CysB.Se请求在主机控制器驱动器中分配8*端点大小缓冲器,用于对应于特定端点的传输。假设你触发一个大的传输,每次缓冲区填充它将被传送到OS中的内存,然后只有主机控制器才能接受更多的数据。这个过程将减缓转移。 尝试使用XFIZSIZE变量更改此缓冲区分配。64K是推荐值。 当做, 阿南德 以上来自于百度翻译 以下为原文 I'm not sure about the 1 byte access problem you're facing, It is most probably due to the OS or your variable type (in your DLLs) protection mechanism to avoid data corruption i.e. allow only handle to access the array at a time. With regards to the large array passing, it is most probably due to the size allocation in the host controller driver. By default CyUSB.sys request allocation of 8*endpoint size buffer in the host controller driver for transfers corresponding to a particular endpoint. Say you trigger a large transfer, every time the buffer fills it will be transferred to memory in the OS and then only the host controller can accept more data. This process will slow down the transfer. Try changing this buffer allocation using XferSize variable. 64k is the recommended value. Regards, Anand |
|
|
|
只有小组成员才能发言,加入小组>>
754个成员聚集在这个小组
加入小组2106 浏览 1 评论
1853 浏览 1 评论
3671 浏览 1 评论
请问可以直接使用来自FX2LP固件的端点向主机FIFO写入数据吗?
1786 浏览 6 评论
1536 浏览 1 评论
CY8C4025LQI在程序中调用函数,通过示波器观察SCL引脚波形,无法将pin0.4(SCL)下拉是什么原因导致?
571浏览 2评论
CYUSB3065焊接到USB3.0 TYPE-B口的焊接触点就无法使用是什么原因导致的?
424浏览 2评论
CX3连接Camera修改分辨率之后,播放器无法播出camera的画面怎么解决?
438浏览 2评论
384浏览 2评论
使用stm32+cyw43438 wifi驱动whd,WHD驱动固件加载失败的原因?
916浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 11:55 , Processed in 0.973986 second(s), Total 88, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号