写在开头的话
因为已经复工的原因,已经怠惰了一周的时间没有进行博客的更新,(我才不会告诉你我休息的时间被我用来追英剧了😂),所以今天重点写一些RAM使用的干货来弥补一下。可以这么说,只要你的设计中使用了RAM,那么RAM的冲突处理就是必须要考虑的问题。
在设计芯片的过程中,RAM的使用也是尤为重要的,RAM的合理使用会影响到整片芯片的功耗,而使用RAM进行存储因为不同工艺库的原因,无论是功耗,位宽步进,延迟都不竞相同。那么不同延时的RAM自然会存在读写冲突的问题。
-
第一类冲突,直接的读写冲突
因为RAM延迟的原因,连线距离较远可能不能通过静态时序分析,所以我们会在中间进行打拍操作(插入寄存器),或是该RAM本身可能就无法一拍写入数据,那么假如同时刻读写同一地址便会出现冲突的情况。
理论上我已经向这个地址写入了数据,我希望我可以读到这个数据,而实际上,这个数据并没有写入RAM中,那么我读出来的可能是RAM默认值,或者是RAM该地址上一次的值,那么可能就不能满足逻辑的需求。
解决这种冲突其实很简单,也有很多种方法,这里介绍一种,假如是应逻辑需要,写操作之后,RAM该地址便应该认为已经为最新的写入值,那么我们可以用逻辑判断,如果同时读写的情况,便把写的值直接传给读的结果,这样便解决了那个冲突。如果说写需要多拍才能写入RAM,则可以先放入寄存器中。在该数据写入RAM中的几拍内,则均可将寄存器的值传递给读数据,完成这个