做的 系统是一个光栅采集-USB 发送设计, USB发送 用的是 CY7C68013控制芯片, 采用SLAVE FIFO模式
大致FPGA内部 模块 如下:
数据输入- 数据处理- FIFO- USB接口;
用最简单的循环增一 写FIFO 然后上位机 通过USB软件接收 显示数据完全正确, 没一点问题。
然后由于前端 处理和接收数据的速度较快, 因此FIFO 选取的比较大 是16位的4096字的长度。
总资源量消耗不多, 逻辑资源288/4608, 才6%
存储资源 65536/119808 55%
现在问题就出现了, FIFO宏模块初始化设置中 有个选择 最小区域 或者 最快速度的选项,
当选最小区域选项时候 没问题, 然而选最快速度时 则会 AS下载灯一直亮, 即使拔了下载线 也不灭, 而且 同时 USB 接收不到任何数据, 这时什么问题呢?
还有另一个问题,在最小区域下:
我在目前的代码上基础上 新增一些模块 实现别的功能, 问题就来了, USB 的数据会丢包(如果用最简单的循环增一不会) , 我发送的数据格式如下:
3字节 的 数据 以及 3字节的计数, 正常情况下 3字节的计数值 是每次增一, 和循环增一那个一样, 但是 我修改代码后(我就贴出计数值的情况),经常出现:
0x00 0x00 0x02 0x00 0x00 0x02 0x00 0x00 0x04 0x00 0x00 0x04; 一次加两字节
更有时候是 0x00 0x00 0x02 0x00 0x00 0x02 0x00 0x00 0x02 0x00 0x00 0x02 0x00 0x00 0x06 0x00 0x00 0x06 0x00 0x00 0x06 0x00 0x00 0x06 ; 一次加4字节
而正常的应该是 0x00 0x00 0x02 0x00 0x00 0x03 0x00 0x00 0x04
我开始一直以为是代码中状态机时序问题, 有时改下 又能变好, 但别的模块代码变一下, 又变成这样, 现在我就发现 不能增加模块了,只要稍微改改别的模块代码, 这个就变这样, 这什么情况造成的。。。。。 哪位大神来帮我想下 是什么问题啊
|