再一次验证FX2 68013的速度
上次由于使用外接时钟供IFCLK,性能平平(台机读/写34MB/s,老本读/写只有27MB/s),这次重写了一下,花了两天时间,特此总结一些现象,和FPGA新手们需要注意的一个仿真调试问题。一、先介绍一下新模块能达到的最高速度。老本读/写如果采用只收发不验证的方式,速度可以达到40MB/s,如果带有验证,速度仍然只有27MB/s,应该是老本CPU处理能力较弱,导致USB控制器没有用满带宽。台机未测试,但是根据经验,速度只会更快,预期可以达到50MB/s,即USB2.0在Windows系统上的极限。
二、介绍一下调试过程中遇到的一些小问题。
1、前一天用FIFO花了一天时间写了个模块,最后发现,如果想实现连续读写,那么必须得有一个数据泵把数据从FIFO中泵出(FIFO延时有3个周期),这样泵长度就达到了6,带来的是巨大的资源开销,写到最后,发现模块占用了近1000个slices,而且运行总出错,漏数据或多数据。搞了一天,最后放弃。
2、当天夜里重写了一个小的模块,这次没有使用FIFO,而是使用了两个BRAM,其中为了优化性能,采用地址和数据计数器分开的方式,地址和数据计数器分别计数,在写USB的FIFO满时,自动把地址减1,另外为了确保数据可以直接从端口读取,采用了一个延时计数器产生BUF非空信号,经过仿真和DEBUG,最后模块仿真OK。杯具的是没有进行后仿真,因此连同上一次实验室的一些故障都没有发现。
3、今天上午进行上板通讯测试。结果发现死活都不正常,数据似乎只有最后一个字是正确的。一次发一个字,测试正常,然而一次发一组字,数据是杂乱无章的。怀疑是建立时间不够引起的,然而建立时间高达10ns+,不可能是建立时间的问题。然后进入单独收发测试,发没问题,FPGA发的任何数据PC都可以正常收到。收用了一个4字LED,发一个字,正常,也没发现问题。再把Loop接起来,上板,发现还是数据错乱的问题,这次发现了最后一个字一般是正确的。见鬼了。
4、下午,无奈中做了一次后仿真(前仿没有任何错误),调出系统时钟信号。OMG,系统时钟经DLL之后,输入的偏移高达5ns+!难怪死活不工作了。但是这个时钟偏移哪来的?想了一想,之前用的是GCLK3输入,DLL是放在DLL3上,现在改为FX2的IFCLK输入之后,时钟接到了GCLK1上。难道是这个问题?用Chip Planner看一下,果然,时钟信号从GCLK1PIN上跨过长长的布线来到DLL3上,然后BUF再跨过长长的布线接回DLL3上。我晕,忘了调整DLL和BUFG的约束了。调好位置,再上板,只发现了一个字的偏移,调回来,再测,一切OK。
三、介绍一点经验。
老鸟们可能会认为这问题很幼稚,然而,在一个项目运作过程中,肯定会有各种各样的小更改,难免会遇到我的情况。新的FPGA一般都会自动摆放DLL/PLL和BUFG,但是老的FPGA有的不会(比如我用的Spartan-IIE)。因此,在进行功能验证前,应当首先对系统时钟树进行后仿真验证,然后再进行前仿真功能验证。调整时钟输入管脚时,如果对应的PLL/DLL和BUFG做了约束,则必须要重新调整位置,以免出现捉摸不到的现象。有的新手上来就爱问,“我要不要用ChipScope来调试啊?“诸如此类的问题,说句实话,片内在线调试,除了偶然性错误分析之外,一般用不到。后仿真绝大多数也是用不到的。通常情况下,只要前仿功能正常,再验证一下时钟,上板都能正常工作。我的疏忽在于,没有进行时钟验证,浪费了我一天时间啊。想我也写了上W行verilog了,结果却在这个地方栽了个小跟头。 学习了!
LZ控制时序是用状态机实现的吗?时钟多大? Coodool 发表于 2012-10-2 21:39 static/image/common/back.gif
学习了!
LZ控制时序是用状态机实现的吗?时钟多大?
肯定用状态机啊。要不然怎么控制逻辑。时钟是来自FX2的48M时钟,经过DLL同步之后就可以以边沿形式操作了。 wye11083 发表于 2012-10-2 22:17 static/image/common/back.gif
肯定用状态机啊。要不然怎么控制逻辑。时钟是来自FX2的48M时钟,经过DLL同步之后就可以以边沿形式操作了 ...
最近在维护一个代码,检测FIFO状态加+公司的协议控制,状态机时序开销好大。
我在想是否可以人工规划好时序,保证各信号间的相对时序,然后分块实现
这样可以减少状态机状态数目,或完全不用状态机。
之前写过一个Motorola借口控制时序,因为时序太紧,采用了上述手段,但是时序的确不太好控制,有点乱。
不知有没有什么其他的好办法? Coodool 发表于 2012-10-2 22:57 static/image/common/back.gif
最近在维护一个代码,检测FIFO状态加+公司的协议控制,状态机时序开销好大。
我在想是否可以人工规划好时 ...
没什么好方法,但是如果输入的时钟是稳定的,那就可以作为源同步来设计,这次我就用的源同步。只要控制好FIFO,麻烦还真有点。 请教下楼主, 根据SPEC, 建立时间最小需要18.5ns , 我看你写的是10ns+,你这个建立时间够吗? wye11083 发表于 2012-10-3 04:30 static/image/common/back.gif
没什么好方法,但是如果输入的时钟是稳定的,那就可以作为源同步来设计,这次我就用的源同步。只要控制好 ...
请教下楼主, 根据SPEC, 建立时间最小需要18.5ns , 我看你写的是10ns+,你这个建立时间够吗? 别误导啊. 你能达到50MB/s ??? 楼主有没有开发过基于68013的USB摄像头?能否提供一些资料? 请教LZ,GPIF和slave fifo哪个快? 看看。。。 jobsju 发表于 2013-1-30 11:08 static/image/common/back.gif
别误导啊. 你能达到50MB/s ???
我感觉到不了 CY7C68013A
SYN SLAVE FIFO 模式 16BIT
FPGA设置工作与IFCLK同频,状态机不间断发数据给68013A,
PC机驱动使用LIBUSB
VC单线程
实测上传速度达到是38MBYTE/S 。
我觉得这个速度基本是USB2.0极限了!
再高可能达到,但是我觉得不一定能长时间稳定。
页:
[1]