wjw576657631的个人空间 https://blog.eetop.cn/743817 [收藏] [复制] [分享] [RSS]

空间首页 动态 记录 日志 相册 主题 分享 留言板 个人资料

日志

仿真ram时应该注意的几点问题

已有 3675 次阅读| 2011-11-7 12:00 |个人分类:个人心得

程序设计过程中常用到缓存,利用 IP core生成ram 或自己动手编写ram 进行仿真就具有着非常重要的地位,以下几点需要注意。

1.实时缓存既可用两个ram进行乒乓操作,也可以利用bolck ram 或distributed ram生成tual dual ports ram(真双端口ram),A口只进B口只出,同样可以达到实时缓存的效果。

2.在用真双端口RAM进行实时缓存时,必须使读数据地址慢于写数据地址两个或两个以上的同期,即同一个地址上写两个或两个以上时钟之后再读,否刚造成地址冲突时钟之后的所有时钟都将出现读写数据错误,以下两图将说明该情况:

图1  读与写的地址相差两个周期以内写不进,读不出数据

图2  相差两个以上写和读就没有问题

3.在仿真的时候对ram读地址的激励不同会造成不同的仿真结果(写地址激励不同不会造成影响,原因见后文),如果读地址寄存器是在设计程序(非仿真程序)中变化,当然是非阻塞赋值,那么仿真读出数据将会滞后于读地址的变化一个时钟,而若读地址在仿真程序(test bench)中变化的话,当然是阻塞赋值,仿真读出的数据是随地址立即变化的,不存在滞后。图2和图3分别代表

图3  相对于图2,读出的数据滞后一个时钟

4.对于上述访问地址在设计程序中非阻塞赋值的情况,为什么读出数据出滞后而写入数据时没有滞后呢?这是因为写入的数据可以持续一个时钟周期,这样它足可以等到地址左式更新后把数据赋给相应的地址。而对于读数据时ram检测到地址后左式再更新,ram检测到的地址是左式更新前的值,而下一个时钟ram检测到的地址才是本次要读出数据的地址,故读出数据要滞后一个时钟。

 

对于图1,2,3,第一行,第三行分别为写地址和读地址。第二行和第四行分别为写入的数据和读出的数据。

 

 

 


点赞

发表评论 评论 (2 个评论)

回复 wbs605697131 2011-11-7 22:55
楼主,你是得技术热情真让我佩服啊!
回复 mafan88 2011-12-27 15:47
good work!以前没有注意这个,只是凑时钟

facelist

您需要登录后才可以评论 登录 | 注册

  • 关注TA
  • 加好友
  • 联系TA
  • 0

    周排名
  • 0

    月排名
  • 0

    总排名
  • 0

    关注
  • 1

    粉丝
  • 0

    好友
  • 1

    获赞
  • 33

    评论
  • 1523

    访问数
关闭

站长推荐 上一条 /1 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-18 05:18 , Processed in 0.017918 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
返回顶部