关于双口RAM 中 rden的使用
在双口RAM例化中有两种选择,一种是带rden端口,另一种是不带rden端口的。带rden接口的,在使用时需要将rden=1’b1,双口RAM才能有数据输出。在例化时如果选择忽略rden,其实默认rden永远为1,这时只要地址给定,在双口RAM的数据端就会有数据输出。
可以启动RAM的例化过程,看看例化过程就知道。下图以Intel公司的器件为例进行介绍并介绍如何在Quartus II下进行设置,Xilinx Vavado有类似的设置。
图1 例化中不选择RDEN
在图1中,可以看到在例化时没有选择”create ‘rden_a and rden_b enable signals”
图2 例化中选择带rden
那么什么时候选择带rden,什么时候可以选择不带呢?
如果地址是在状态机中(或其它方式的时序逻辑)是按照需求与clock同步的,redn端口就可以选择不带,只要严格控制地址线的节拍,就可以控制数据的输出。
需要rden的场景也很多,举个简单的例子, 如果FPGA与MCU有接口,MCU需要读取Duel port RAM的数据, 由于两者是异步时钟域,首先同步化,其次还需要在MCU的rden_CPU 的上升沿前准备好数据,因此更可靠的做法,提取rden_cpu的下降沿(一个clock周期的单脉冲),延迟一定的时间后,读取Duel port RAM的数据锁存(但一定要在rden_cpu的上升沿之前),赋值给CPU的数据端口,在rden_cpu上升沿时刻,MCU把数据读走。
欢迎大家补充。
很好,在补充点Xilinx的器件用法就更好了