想做个DDR设计不?想还是不想?你要知道FPGA这种东西,片内存储资源终究有限,实在谈不上海量存储。万一哪天你想要海量存储数据了咋办?你是不是得用DRAM条子啊?什么?你还想用SRAM?今年已经2013年了童鞋~关于DRAM,或许是SDRAM,或许是DDR1(再次提醒你,2013年了已经),或许是DDR2或者DDR3。这些条子都有一套控制协议,这套协议对不同的条子大同小异,但是里面又有各种细节的区别,这些你都搞懂了吗?没搞懂?其实,你不需要搞懂。现在的EDA设计不需要你从基础知识开始研究。这个时代,你要生存要发展,最佳的办法是站在巨人的肩膀上,而不是亲自长成个巨人。DDR设计太常用了,只要你在搞FPGA,自然有人给你搞定一套IP,免费的给你用。你不会还想自己从底层写起吧?多花些时间在没有免费IP用的协议合算法上吧。现在进入正题:我刚刚讲的免费IP,在哪里?怎么用的?(小白问题,IP是什么,IP地址吗?)这里的IP就是IntelligenceProperty说白了就是xilinx里的coregen(对应于altera里面的megawizard)这个文档就举一个例子来讲,选哪家呢?本人是xilinx和altera都来一个?条子选啥?SDR?DDR1?各种条子全都写一套?(你以为写这个文档容易吗,是不是要连chipscope怎么用也一起出个文档啊?全部都写一套可以,先往我账户上打五千块钱,然后我再考虑考虑。记住这个世界上没有白吃的午餐,你要看白痴都能看会的DDR教程,你就得听我在这里唠叨)本教程选择一个例子来讲,那就是xilinx平台下用DDR3(常见的笔记本内存条)接下来是你玩转这个教程所必须要准备的工具:xilinxISE14.1或者更高版本(不好意思,比14.1还低的版本我没试过。vivado当然也可以,不过我是用的ISE)modelsimSE6.6a或者更高版本(更低版本我负责的告诉你不可以,因为无法正常生成编译库,所以,6.5版本或者更低的你干脆就别装了)有鉴于这个文档的面相对象设定为连chiscope都不太会用的人,就是那种刚毕业不到一两年甚至还在校的,我必须郑重的告诉你一下这两个工具上哪里去下载:网上下载,百度股沟搜索会不会?什么?你告诉我搜不到?我给你跪了,菜鸟兄XILINXISE14.4这里下载破解文件:这里下载(要注册和花积分的):=232457破解文件:(注意,时间长了以后这几个链接是可能失效的,比如你可能在2015年看到这个2013年11月写的文档,到时候可能只能自己找下载了)PPT翻了一页了,工具都装完了吗亲?已经装完了啊?很好哦,那我们就开始吧!你知道用ISE做DDR设计的第一步是啥吗?当然是打开工具了——我估计这你肯定知道打开工具之后做啥?当然是生成一个IP,对xilinx来说也就是coregen了我估计你即便是新手上路,这个也是知道的——因为我前面刚刚讲过了嘛那么coregen生成完了之后呢?是不是要仿真啊?仿真需要什么?当然是modelsim了——我还是刚刚讲过,哈哈那你知道用modelsim仿真DDR的coregen,是需要xilinx仿真库的吗?什么?你不知道啥叫仿真库?乖乖隆地洞,我还是给你讲讲啥叫仿真库吧先关于FPGA的仿真库本人不是学校里的学究,本人是工程师所以用工程师的语言告诉你啥叫仿真库FPGA本身是一种特定的芯片,这个芯片里有很多特定的基本电路单元。对一个DDRIP来说,是需要用到这些FPGA专用的电路单元来实现的。你要知道,ISE是xilinx公司的软件,modelsim是mentor公司的软件,不是一家公司哦。所以,这些FPGA独有的电路单元,modelsim原本不知道啊。你要用modelsim仿真xilinx的IP,就会涉及到IP调用的这些基本电路单元。你就得告诉modelsim,xilinx的IP用到的特定基本电路单元,都有哪些。这个过程,就是在modelsim环境下建立FPGA(这个例子里是xilinx)的基本电路单元参考书。这样modelsim在做DDRIP的仿真的时候,一旦遇上这些IP里用到的FPGA专用的基本电路单元,就可以到查这个参考书。xilinx用了哪些基本电路单元,对modelsim就像一门外语。必须要你去告诉modelsim这门外语是怎么解读的,具体就是给它一本外语词典,这个词典就是仿真库。怎么告诉modelsim,xilinx专用的电路单元都有哪些?换一句专业点的话,怎么在modelsim环境下添加xilinx的仿真库?以上两行是同一个意思,嗯下面真的开始了注意,你跟着我的每一个步骤走,就一定可以成功你自己要创一条自己的路来,你就只能自求多福了右边是我自己电脑的截图用的是ISE14.1进开始菜单,找一样的目录,点图上选中的simulationlibrarycompilationwizard图标什么?你找不到这个图标?我的个乖乖,给我使劲儿找使出吃奶的劲儿来否则点右上角吧看图说话时间到继续看图说话,进入下一步的时候别忘了点next哦最后在你指定的xlib目录下,会出现这么一堆东西,这就是库,已经生成了不过现在还有一个问题,那就是,modelsim现在还是认不出个库。这个咋办?其实吧,文本方式打开就是直接点开...打开之后你会看到这个注意红框里面的部分,这部分你先选中,然后ctrl+c什么,你不知道ctrl+c是干啥的?ctrl+c就是复制...复制到哪里呢,复制到剪切板...至于剪切板是什么....唉,你还是百度吧....进入上一级目录也就是modelsim的安装目录(参见上面的红圈)找到modelsim自己的ini文件(参见中间的红圈)在这个ini文件上点右键,然后去掉只读属性,改为可以修改的非只读。因为接下来要把刚才复制的内容添加进去。现在modelsim和仿真库准备好,就开始建立DDR的仿真环境了换句话说,我们要开始搞coregen了是不是很期待啊?嘿嘿coregen有两种做法,你可以直接用coregenerater工具,也可以先建立工程,然后新建一个IPcore我这里举例用的是第二种,个人习惯吧,条条大路通罗马。那么,建立一个ISE工程会不会啊?要不要教啊?啊,你已经会了?很好!那我就直接从新建好的ISE工程开始吧看,这就是你新建好的ISE工程,里面空空如也,啥也没有。工程的参数一览无余,用的是K7325T然后你要往里面添加一个DDR3的coregen这一步我相信你也是会的这一步你还是会的到这一步了,咋选?下一页揭晓~接下来当然是点finish了,点完之后ISE就开始菊花闪闪,要运行一阵子之后出现MIG的配置界面现在知道MIG是个啥玩意儿了不?这界面左边蓝色大字体就是解释。从这里就必须提用户手册了。用户手册懂不?点进去之后打开一个PDF,但那还不是真的用户手册,只是给你最新版用户手册的在线下载地址目前(2013年11月)用户手册的下载地址:绝对不要无视这个东西,没这个根本就没戏,现在赶紧下载备份!赶紧的!下载完了之后回到原先的MIG配置界面,然后点next下去(这一步不用配图了吧?)嗯,好的,那就不配图了,下面继续。这部分参照用户手册,还有界面上的英文说明,自己内心翻译一遍不能随便就这么过去,起码看明白大概意思。下一页会有较为详细的说明还有一些说明因为这里时钟比率选了4:1而台式机内存条的数据宽度是64bit,并且还是上下沿都能打数据。那么用户数据接口宽度就是64X4X2=512bit。这里X4是4:1造成的,X2是因为DDR接口上下沿都能打数据,而用户接口不可以这么干,只能老老实实的上沿打数据。和SODIMM一同可选的RDIMM和UDIMM是服务器和台式机用的内存条。component是贴片内存片儿对支持datamask的内存条不选datamask不会影响仿真不过实际上板子阶段可能导致内存条初始化不成功奇怪不,为啥冒出来一个参考时钟?下页说明关于参考时钟:刚刚提到的福利在于:如果你的ISE版本是14.4(其实14.2以上就行)的话,那么你如果你把晶振时钟选成200M,那么在参考时钟选择的下拉菜单里,会发现一个“usesystemclock”的选择。那么你就不用管这个参考时钟了。不过我这个例子是ISE14.1,参考时钟还是要的。所以应该给一个稳定的200M时钟这个参考时钟还得和用于倍频为主时钟的晶振时钟来自不同的管脚。这是因为倍频之后的时钟质量下降,所以还要用没倍频的200M来作为系统运行的基准,计算系统延迟啥的。独立参考时钟或许不接也没问题,这个我没试过。乖乖,你还是装个ISE14.4,然后选“usesystemclock”吧...省事儿很多...所有的管教都可以自行分配啊,哈哈!每个BANK(不会不知道啥叫bank吧?)里面有T0-T3四个区域,根据开发板资料慢慢选吧。只有你管角分配合理,才能点NETX哦。考虑到有些人没开发板,什么板子都没有,不想上板子,只想仿真一下。你还是退回图上这一步(点back),然后选newdesign吧,它会帮助你快速分配管脚,让你尽快生成DDRIP这一步之后,ISE会继续菊花闪闪好久一阵...终于在ISE的design栏里出现了DDR3的IPcore接下来,关掉ISE,准备仿真了列位看官,请你猜猜sim.do到底是在哪里?其实就算你之前没怎么在modelsim里敲过do文件,你也应该能通过上下文猜出来,这个sim.do文件,就在你建立这个modelsim工程的目录下面对我这个例子来说,就是F:\DDR3\DDR3\ipcore_dir\DDR3\example_design\sim你或许不是装在F盘,工程名跟我不一样没关系你的工程刚刚指定建立在哪个目录,你就进去找这个sim文件夹sim上一级路径必然是example_design万一找不到,你搜一下就可以了这个工程到目前为止,只有一个sim文件夹,里面只有一个sim.do文件找到他,然后用文本方式打开(可以用modelsim打开的)时间一分一秒的过去...真实时间的十几分钟之后,仿真时间过了不到70000000000(别数了,十个零)fs(飞秒),init_calib_complete拉高了,DDR初始化成功,traffic_gen开始读写数据,然后校验结果...对了,这traffic_gen是啥呢?traffic_gen是xilinx自带的一个测试DDR的模块随机的读写DDR,然后校验读取和写入的数值是不是一样。如果有错,会拉高tg_compare_error来报警仿真波形里面,tg_compare_error就在init_calib_complete下面仿真testbench就是刚建立仿真工程目录(那个sim目录)下面的sim_tb_top.v打开看看吧,仿真到此为止已经成功,接下来怎么用DDR,看你的了,去研究一下之前coregen阶段就让你保存的用户手册吧: