打印
[FPGA]

可用串口配置的SDRAM控制器,附实现工程、源码和仿真~~

[复制链接]
6485|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mhanchen|  楼主 | 2014-2-15 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 mhanchen 于 2014-2-25 19:33 编辑

        自己写的SDRAM控制器,用的是黑金的DB2C5开发板,Hynix的SDRAM(HY57V641620ET-H),不过仿真时用了一个Micron的SDRAM(mt48lc1m16a1)仿真模型,代码编辑器用的gvim。配置模块用了标准的UART协议进行SDRAM数据、地址和命令的控制,用这个的朋友可以从串口助手向FPGA写入你想要的地址和命令,然后送到SDRAM。因为开发板上也只能用串口和PC连接,串口模块也是很久以前写的了,懒得改所以导致配置过程稍麻烦,用的时候需要耐心一点。仿真的话直接运行/sim/目录下的批处理文件就行了,当然你要先确认你的仿真器环境变量设置正确而且file list中的库文件目录和你的安装目录吻合。
        顺便有一个问题需要请教一下:我做实验是设置的模式是CL=3,而且仿真时没有问题,时序一切正常,但是用Signal TAP抓信号的时候发现SDRAM的tAC参数远大于DataSheet上的标准,这就导致我在读SDRAM时必须晚一个是时钟从数据线DQ上采数。也就是说我设置CL=3以后,仿真模型是正常的,但是板上的Hynix片子出数要晚一个周期,Hynix的datasheet比较坑,我到现在也没找到原因,不知道哪位用过这两款芯片的能给解释一下,我觉得不应该是它们的参数意义不同。
        最后欢迎大家积极交流,第一次分享自己写的东西,求支持~~~
sdram_ctrl.part02.rar (2.86 MB)
sdram_ctrl.part03.rar (171.49 KB)
sdram_ctrl.part01.rar (2.86 MB)


相关帖子

沙发
GoldSunMonkey| | 2014-2-17 21:26 | 只看该作者
感谢,支持,加精了

使用特权

评论回复
板凳
GoldSunMonkey| | 2014-2-17 21:26 | 只看该作者
欢迎以后常来啊

使用特权

评论回复
地板
mhanchen|  楼主 | 2014-2-17 21:33 | 只看该作者
GoldSunMonkey 发表于 2014-2-17 21:26
感谢,支持,加精了

猴哥太给力了,等我搞定LX9上的LPDDR再发一个哈

使用特权

评论回复
5
GoldSunMonkey| | 2014-2-17 21:34 | 只看该作者
mhanchen 发表于 2014-2-17 21:33
猴哥太给力了,等我搞定LX9上的LPDDR再发一个哈

以后上来啊

使用特权

评论回复
6
gocoer| | 2014-2-18 12:38 | 只看该作者
整体风格不错
但要注意两点:
1 RTL代码中尽量不要用#dlay ,仿真工具会自动帮你处理,这样会解决一致性的问题。
2 还有缩进用空格,如果你是tab键缩进最后可以整体转换一下。

使用特权

评论回复
7
mhanchen|  楼主 | 2014-2-18 19:41 | 只看该作者
gocoer 发表于 2014-2-18 12:38
整体风格不错
但要注意两点:
1 RTL代码中尽量不要用#dlay ,仿真工具会自动帮你处理,这样会解决一致性的问 ...

看的很仔细袄,谢谢建议。
回复:
1.#DLY是为了功能仿真以后看波形方便,这个东西对FPGA实现一点儿影响没有
2.TAB比较明显而且再GVIM下也更方便,我不知道你用的什么编辑器,我用的GVIM,不同的编辑器会因为一些特殊字符的差别导致你打开以后看到的代码不整齐,你可以试一下,在GVIM下应该是没有任何问题的

使用特权

评论回复
8
GoldSunMonkey| | 2014-2-18 21:04 | 只看该作者
mhanchen 发表于 2014-2-18 19:41
看的很仔细袄,谢谢建议。
回复:
1.#DLY是为了功能仿真以后看波形方便,这个东西对FPGA实现一点儿影响没 ...

我也是Gvim.哈哈,同道中人啊

使用特权

评论回复
9
mhanchen|  楼主 | 2014-2-18 21:18 | 只看该作者
GoldSunMonkey 发表于 2014-2-18 21:04
我也是Gvim.哈哈,同道中人啊

以前UE,后来发现vim才是王道啊:lol

使用特权

评论回复
10
luyaker| | 2014-2-19 20:11 | 只看该作者
楼上歪楼了啊,我也想仿真一下SDRAM,借鉴一下楼主的!

使用特权

评论回复
11
mhanchen|  楼主 | 2014-2-19 20:37 | 只看该作者
luyaker 发表于 2014-2-19 20:11
楼上歪楼了啊,我也想仿真一下SDRAM,借鉴一下楼主的!

对外设的操作光仿真有时候看不出问题,有条件还是玩玩板子比较靠谱:lol

使用特权

评论回复
12
newnew97| | 2014-2-23 22:23 | 只看该作者
三星的MT48LC...?咳,粗心的楼主...
现代后缀-H的是慢速PC100的吧?这个真记不得了,现代Tac应该是标定的最小时延而不是周期数,恐怕是你板子跑的过快?

使用特权

评论回复
13
mhanchen|  楼主 | 2014-2-24 20:43 | 只看该作者
newnew97 发表于 2014-2-23 22:23
三星的MT48LC...?咳,粗心的楼主...
现代后缀-H的是慢速PC100的吧?这个真记不得了,现代Tac应该是标定的最小 ...

我用三星的模型仿真是因为找不到现代的,不过你说的问题我还是仔细核对一下。。

使用特权

评论回复
14
mhanchen|  楼主 | 2014-2-24 20:47 | 只看该作者
newnew97 发表于 2014-2-23 22:23
三星的MT48LC...?咳,粗心的楼主...
现代后缀-H的是慢速PC100的吧?这个真记不得了,现代Tac应该是标定的最小 ...

Tac标定的是最大时延,也就是最大不能超过这个值,但是我测出来的时延比这个大一个周期,就是多出10ns,我用的100M时钟,-H的片子最大应该是133M,所以时钟应该没问题。

使用特权

评论回复
15
newnew97| | 2014-2-25 16:07 | 只看该作者
MT48LC是镁光的型号.

如果时钟没错的话,FPGA内部的时钟要慢出一点相位差,基本要考虑到板级延时和IO的tPD(actel的描述方式,就是输入的时延),否则你FPGA CORE当然是只能在第四个时钟抓到CL=3的正确数据.你的代码我没看,估计就是这里不小心了.其实第几个时钟采到问题不大,突发的时候多一个时钟而已.

使用特权

评论回复
16
mhanchen|  楼主 | 2014-2-25 19:32 | 只看该作者
newnew97 发表于 2014-2-25 16:07
MT48LC是镁光的型号.

如果时钟没错的话,FPGA内部的时钟要慢出一点相位差,基本要考虑到板级延时和IO的tPD(a ...

好吧好吧。。丢人了。。Micron。。。
正常应该是第三个上升沿去采数据,我现在就是用第四个,从抓出来的信号来看也是第三个出数据,第四个刚好是采样

使用特权

评论回复
17
mhanchen|  楼主 | 2014-2-25 19:35 | 只看该作者
newnew97 发表于 2014-2-25 16:07
MT48LC是镁光的型号.

如果时钟没错的话,FPGA内部的时钟要慢出一点相位差,基本要考虑到板级延时和IO的tPD(a ...

你说的板级延时和IO的tPD我确实没考虑,这个地方应该怎么做处理?像我说的那样人为的将采样的时刻延后一个周期么?还是通过一些约束之类的控制?

使用特权

评论回复
18
lsq334421| | 2014-2-26 08:17 | 只看该作者
额 很好很强大

使用特权

评论回复
19
mhanchen|  楼主 | 2014-3-1 22:33 | 只看该作者
本帖最后由 mhanchen 于 2014-3-1 22:35 编辑

发现了一个很严重的问题:
    我的这个demo里配置数据时的过程是这样,发送映射地址(同时使能信号置有效)→向寄存器写数据→发送映射地址(同时使能信号置无效),配置其他数据的步骤都是重复这三个操作,今天发现第二个步骤中的数据如果和前一个步骤中的映射地址相同,那么第一个步骤中写入的数据会被第二个步骤修改,但是我的tb中恰巧没有仿出这种状况,这个是会出错的!!!
等我修改以后会更新附件!!用串口来配置实在是很麻烦,一不小心就会乱掉,哪位用过的同学有更好的方法希望可以留言。

使用特权

评论回复
20
jimodunanhua| | 2014-3-5 17:50 | 只看该作者
先看看,谢谢啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

30

主题

252

帖子

2

粉丝