如何在Arria10中Get刷新技能!

电子说

1.2w人已加入

描述

从《黑客帝国》深入工程师世界,我们可以发现这些工程师其实都是爱做梦的孩子。他们在科幻的电子世界里“权倾一方”,像孩子一样打造着自己想要的美梦。今天,我们就来向这些长不大的孩子学习学习,如何在Arria10中Get刷新技能!

一般来说,定期刷新内存内容的要求通常是由内存控制器处理。然而,在Arria10中的用户控制刷新项还能够支持指定内存刷新的时间。因此,如果能够借助流量模式方面的特定知识,那么我们就可以指定刷新操作时间,从而避免打断读/写操作、提升效率。

在基于UNIPHY的内存控制器中,我们可以通过专用的用户控制刷新接口发送用户控制刷新请求。但由于该接口不支持Arria 10硬内存控制器,因此为了实现用户控制刷新,需要通过内存映射配置和状态寄存器接口(简称MMR接口)来发送请求。

那么该如何通过内存映射配置和状态寄存器接口(简称MMR接口)来发送请求呢?为此,我们得掌握如何在内存IP参数化过程中启用用户控制刷新选项。首先,需要在“一般”选项卡中选择硬PHY和硬控制器配置。

Attention: 只有DDR3、DDR4和LPDDR3协议支持该配置。

剩下的,就只是一些简单的程序操作,其目的就是正常实施内存IP的参数化。(详情步骤请参观前文视频。)

以上设置将为MMR接口开放附加端口,创建用于与这些端口通信的用户逻辑。(但此时的MMR接口并不支持空发读取/写入。)然后再将这些信号与GND进行绑定。不过由于该接口并不支持背压,因此“waitrequest”始终处于较低电平。只有在成功完成校准后,用户才能够访问MMR接口。

用于启动用户控制刷新的寄存器

Attention:地址以十六进制值列出。

将cfg_usr_rfsh_en字段设置为1来启用刷新。该字段对应地址19h的位数4。

mmr_refresh_req字段宽4位,每位对应每个队列接收的刷新请求。

我们可读取mmr_refresh_ack字段,了解刷新操作是否在进行中。该字段对应地址32h的位数0。

成功完成校准后向队列0发送刷新请求的预期时间图

如上图所示:将数据0x0000_0010写入cfg_usr_rfsh_en字段,是用于启用用户刷新。然后将数据0x0000_0001写入mmr_refresh_request字段,向队列0发送刷新请求。在32个时钟周期后,读取mmr_refresh_ack字段,直至显示readdatavalid信号。

若读取数据为1b’1,则表示刷新正在进行。而我们只能在看到确认信号后,才能再发出下一个刷新请求。当然,如果想要禁用刷新,则将数据0x0000_0000写入mmr_refresh_req字段即可。怎么样,这些操作还是挺简单的吧?

本期主题更多的是如何通过内存映射配置和状态寄存器接口(简称MMR接口)来发送请求。作为一名优秀的攻城狮,相信您掌握此方法自然很容易。但您是否还有其它更好的方法Get Arria10中的刷新技能呢? 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分