|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
小弟刚开始鼓捣DDR3条子,老板的一个任务就是尝试使用AXI4总线完成DDR3的控制。如今学习一月有余,想贴出自己对这个问题的一些看法。希望各位走过路过的大侠小侠,抑或是同道中人能够跳出来指正小弟的。以期望相互学习,共同进步! 首先,功能描述:基于Xilinx 7系列690的FPGA开发一个DDR3控制器。要求,基于AXI4总线!根据小弟的理解,果断把老板的话翻译为:就是要我使用软件生成一个MIG核,然后,在MIG核上选择挂AIX4总线。这些,我只要读懂AXI4总线的接口,编写Master部分的控制器,然后直接实现功能即可。
于是乎,小弟就开始玩命的干活了(摸的办法,谁让是打工仔呢)。首先,我先搞了一个MIG核进入我的工程,然后我打开了example design进行了研读。我的妈呀,通过参考ug586文档,苦逼的读程序。结果吧,搞出来了一个整体设计方案,其实就是我要把traffic gen 改成自己想要实现的功能就行。不过我面对的接口是AXI4_wrapper文件。这时候,尼玛,搞的有点晕了,遇到了点问题,总结如下:
1.大家搞过ddr条子都知道,比如说我的4G的DDR3,位宽为64,地址位=rank+bank+col+row=29.尼玛,这就是说我的地址宽度如果是29就好了。可是这里我对着axi4总线设置地址宽度时出现了点问题,就是,尼玛选择的是32位宽的。那这两边怎么统一啊。然道mig 偷偷的帮我把活干完了,我直接睡觉就好了?!感觉,不可能啊!所以,求路过的大侠大哥大嫂们指点一二!跪拜ing!
再进一步,发现axi4总线地址算法会根据选择的模式算法有所不同。这样问题出来了:mig它说使用了AIX那个接口了吗?是AXI4,还是AXI-lite,还是axi4-stream???搞不懂,求讨论,求指导!
2,好家伙,搞不懂地址这边,那尼玛数据这边总可以吧。经过小弟的巴拉巴拉的啃代码,发现这里要基于一个原则:ddr3条子的内外位宽一样就行了。比如说我设置的控制:ddr的时钟频率比为:1:4.我条子burst length=8。那就是说(dq_width=64)8*64*1=512bit.那mig 那边也一此要过来512吧。而aix4过来的数据又是32位的宽度,尼玛我又蒙了。感觉我可以设置axi的一次burst发出的数据量也等于512.不知道这么理解行不行,求讨论,拍砖,也可以!
3.example design里的文件axi_wrapper.v真的是axi4总线的描述吗,我怎么觉得惶惶的呢,读了程序,感觉倒是像那么回事。可是,咳,求证实!
小弟发此贴,抛砖引玉,求各位在此讨论一二,大家有机会一起想想,如果能共同进步就更好了! |
|