项目中需要设计一个直方图,分析直接采用Altera的双口RAM就可以实现,为了控制简单,就采用了单时钟(即读写同时钟)接口。例化Altera的双口RAM后,分析其给出的读写时序图,应该是读操作的下一个时钟输出端口就会出现该读操作的数据,而实际情况是读操作后的第二个时钟才有数据。
下图为Altera给出的时序图
下图是我在CII器件上实现的时候通过SignalTapII抓取的结果:
看Altera给出的时序图应该是当前读时刻的下一个时钟出结果,而看实际SignalTapII探测是当前读时刻的下下一个时钟出结果。这在一般数据存储的时候也许可以忽略该问题,但是在直方图设计的时候这是致命的,因为直方图就是统计双口RAM“地址”出现的频率。这涉及到读出数据后还要将该读出的数据进行更新统计后重新写回到原来的位置。所以时序不同对于直方图的控制也会不一样,一个简单的直方图调试确实花费不少功夫。
虽然花费些功夫找到并解决了问题,但是不清楚为何官方的时序图跟实际使用的时候会不一致?!!
######################################################################
这个问题是我自己被SignalTapII迷惑了,时序是正确的,仔细分析Altera给出的时序图,能发现在读操作采样时钟对应时刻地址是有效的(不像SignalTapII当中时钟上升沿对齐地址变化时刻),但是我给出的第二幅图中SignalTapII截图中第一个蓝圈处正好是地址从C1到CC的转变,也就是说此刻有效地址是C1而不是CC。回过头来看看自己的程序确实是这个过程:
双口RAM读端口的数据输出时序:第一个时钟地址变化,第二个时钟地址有效,第三个时钟数据有效并被读出。
上述时序的后两个时钟对应于Altera给出的时序关系。
用户377235 2016-1-7 17:48
根据altera给的memory资料进行读写,资料上确实显示当双口使用同一个时钟时,读数据时,地址在第一个时钟上升沿有效,在第四个时钟上升沿才可以稳定的出现在数据端口
用户1303485 2010-7-30 23:21
用户1395232 2010-1-26 10:59