小弟是新人,先说下我的进展:
要设计的系统是FPGA和PC通过FX3进行USB3.0通信,FX3的firmware是用的slave FIFO,小弟摸索了一阵子,终于可以实现用cypress的测试工具和FPGA做到BULKIN和BULKOUT,用streamer测试,速度也很满意,上下行近400MB/s。
然后小弟开始摸索利用CyAPI.lib在VS里的USB驱动设计,网上例子很多,我初步用XFer系列函数实现了BULKIN和BULKOUT,当然了,系统主要还是采集,所以对BULKIN更看重,在我的使用中,发现一些疑问,因为小弟经验不足,特地来请教大神:
1、我设计的FX3 buffer是16kB,FX3的firmware中,BULKOUT必须16kB,这个没有问题,但BULKIN按照协议,可以很灵活,4B~16kB,FPGA可以用PKT_END脚来实现发送任意4Byte长度的packet,例如我用FPGA发送32kB给FX3,然后利用上位机XFer函数固定收32kB的BULKIN包,则上位机能收到正确的32kB数据,那疑问来了,因为FPGA是可以通过PKT_END实现发送任意短包,而上位机XFer函数只能指定一个固定length,那么XFer函数就不能随时待命接收“未知”length的packet? 必须按照确定的length进行接收? 就是说,FPGA每次发送的数据必须是length的整数倍,上位机Xfer函数才能实现全部数据的接收? 请问是不是这样?
因为小弟开始没有关注过上位机XFer函数的规则,只是根据FPGA一侧的规则开始了设计,FPGA传输的packet因为种类的不同可能呈现不同的长度,现在是否要都修改成某个固定长度?
2、如果上述成立,那一般上位机和FPGA的高速(注意是高速,我希望速度能达到至少300MB/s)通信数据协议应该怎样设计? 希望各位大神给点实际经验。
谢谢了! |