Lattice DDR3 ip 注意事项

Lattice DDR3 ip 注意事项

  1. do ddr3_ip_eval.do 之后报错!
    Lattice DDR3 ip 注意事项_第1张图片
    Lattice DDR3 ip 注意事项_第2张图片
    Lattice DDR3 ip 注意事项_第3张图片
    Lattice DDR3 ip 注意事项_第4张图片
    Lattice DDR3 ip 注意事项_第5张图片
    需要将work 的路径手动修改至当前路径下。
    Lattice DDR3 ip 注意事项_第6张图片
    =>
    终于!
    Lattice DDR3 ip 注意事项_第7张图片
    Lattice DDR3 ip 注意事项_第8张图片
    ========================

  2. 为什么app_cmd和datain_rdy不对齐?
    在这里插入图片描述Lattice DDR3 ip 注意事项_第9张图片
    Lattice DDR3 ip 注意事项_第10张图片
    难怪cmd和data是不对齐的,cmd和地址对齐。因为cmd发完之后就一直在等ipcore输出相应的使能了,和A家和X家都不一样!
    如果datain_rdy拉高,则将数据延迟一拍后打进ipcore的write_data口。
    如果read_data_valid拉高,则同拍的数据会被打出在read_data口。

    ========================

  3. cmd_burst_cnt为8,什么意思?为什么一次写命令发完之后,会出来16拍64bit数?
    在这里插入图片描述
    Lattice DDR3 ip 注意事项_第11张图片
    Cmd_burst_cnt为突发次数,这里ddr3 ipcore里设定的是8突发, 8(突发次数)*8(突发长度)16(ddr位宽) = 1664
    所以这里是16个64bit数。
    ========================

  4. 为什么我ddr物理位宽是16位的,但实际ddr ipcore给出来的却是64bit的?
    在这里插入图片描述
    从表中可以,总带宽一定,800M*16bit/200M = 64bit。

    这其实就是为了降低时钟频率而采取的增加数据位宽的措施。DP ipcore也有类似的概念,dual,quad。

    ========================

  5. 可以看到ddr ip的接口是有eclk和sclk, 但是test_mem_ctrl.v 中和仿真模型连接的ddr ip的顶层却只有一个输入时钟,是100M。而公司里用的也是有两个时钟的,懵逼了!
    Lattice DDR3 ip 注意事项_第12张图片
    以前公司也用的是有两个时钟的
    Lattice DDR3 ip 注意事项_第13张图片
    但是在自带的仿真里边却只看到一个时钟,到底顶层是哪个呢?
    Lattice DDR3 ip 注意事项_第14张图片
    其实仿真的顶层是这个文件ddr3_sdram_mem_top_wrapper_ddr3_ip.v
    它的模块名字和文件名字还不一样,草!!!
    Lattice DDR3 ip 注意事项_第15张图片
    Lattice DDR3 ip 注意事项_第16张图片

    ===
    ddr3_sdram_mem_top_wrapper_ddr3_ip.v(输入为一个时钟), 中包含ddr3_ip.v(输入为两个时钟)。
    Lattice DDR3 ip 注意事项_第17张图片

    公司为什么要把它拿出来呢?
    => 拿出来之后就可以跟外部共用PLL了,不然在ddr3_sdram_mem_top_wrapper_ddr3_ip.v浪费一个PLL

    ========================

  6. 自己加逻辑,说必须超过200us,才能给复位。但是它自带的测试又不是这样的。
    在这里插入图片描述
    Lattice DDR3 ip 注意事项_第18张图片
    它自带的仿真开始好像发了power相关的cmd, 我仿真是没有发的。
    在这里插入图片描述
    但实际上板不需要发,同样能读能写。

    ========================

  7. app_bridge代码中fixed固定为4,否则代码就得改。
    在这里插入图片描述

    ========================

  8. bridge就是在外边包一层,3家(Xilinx,altera,lattice) 的DDR ipcore 用同一个bridge 接口,那么外部的代码即可通用。
    我外部只要发wrreq以及wrlen,wraddr,内部就会自动发app_en,app_cmd,app_addr等,当然还会回一个wrgnt表示当前是否处于忙的状态。
    只要内部映射到关系即可。
    以写为例。
    Lattice DDR3 ip 注意事项_第19张图片

    ========================
    cmd命令
    Lattice DDR3 ip 注意事项_第20张图片

    ========================

你可能感兴趣的:(DDR3,单片机,fpga开发)