微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > cyclone V控制DDR3的读写,quartusII配置DDR3 ip核后,如何调用实现DDR3的读写呢,谢谢

cyclone V控制DDR3的读写,quartusII配置DDR3 ip核后,如何调用实现DDR3的读写呢,谢谢

时间:10-02 整理:3721RD 点击:
DDR3的IP核配置完毕后,产生了好多文件,请问如何调用这些文件实现DDR3的读写呢?看了一些文章,说是要等到local_init_done为高电平后,才能进行读写操作。请问DDR3的控制命令如RASn,CASn等,是IP核自动产生的么?要如何配置条件,给DDR3写入数据并读取DDR3的数据,谢谢,现在头绪不清,第一次做,拜托各位解惑了

没有用过Altera的芯片,只用过Xilinx的。但是原理应该差不多。所谓DDR3 IP核,实际上是DDR3控制器。这个控制器的接口有两类,一类面向用户,另一类直接连到DDR3芯片。它起什么作用呢?实际上就是简化DDR3的读写时序(因为直接实现DDR3读写时序太复杂了)。用户只要通过操作控制器的用户接口,就可以实现DDR3的读写操作了。控制器可以自动完成DDR3的初始化,并根据用户接口产生DDR3的读写时序,自动产生小编说的RASn,CASn,WE, DQ这些信号,从而实现DDR3的读写。一般配置完IP后,在该IP目录下会生成仿真文件,可以通过运行这个现成的仿真文件来熟悉DDR3 IP的使用。另外要有看user_guide的习惯,user_guide里会介绍IP的使用方法。

楼上的写得很好!让我明白了IP的作用!向你学习!还有什么相关资料吗

谢谢您的回答。您说的IP控制器产生的两类接口,altera的DDR3 ip产生的文件中生成的接口如下:
module ddr3ip (
                input  wire        pll_ref_clk,               //      pll_ref_clk.clk
                input  wire        global_reset_n,            //     global_reset.reset_n
                input  wire        soft_reset_n,              //       soft_reset.reset_n
                output wire        afi_clk,                   //          afi_clk.clk
                output wire        afi_half_clk,              //     afi_half_clk.clk
                output wire        afi_reset_n,               //        afi_reset.reset_n
                output wire        afi_reset_export_n,        // afi_reset_export.reset_n
                output wire [14:0] mem_a,                     //           memory.mem_a
                output wire [2:0]  mem_ba,                    //                 .mem_ba
                output wire [0:0]  mem_ck,                    //                 .mem_ck
                output wire [0:0]  mem_ck_n,                  //                 .mem_ck_n
                output wire [0:0]  mem_cke,                   //                 .mem_cke
                output wire [0:0]  mem_cs_n,                  //                 .mem_cs_n
                output wire [1:0]  mem_dm,                    //                 .mem_dm
                output wire [0:0]  mem_ras_n,                 //                 .mem_ras_n
                output wire [0:0]  mem_cas_n,                 //                 .mem_cas_n
                output wire [0:0]  mem_we_n,                  //                 .mem_we_n
                output wire        mem_reset_n,               //                 .mem_reset_n
                inout  wire [15:0] mem_dq,                    //                 .mem_dq
                inout  wire [1:0]  mem_dqs,                   //                 .mem_dqs
                inout  wire [1:0]  mem_dqs_n,                 //                 .mem_dqs_n
                output wire [0:0]  mem_odt,                   //                 .mem_odt
                output wire        avl_ready,                 //              avl.waitrequest_n
                input  wire        avl_burstbegin,            //                 .beginbursttransfer
                input  wire [25:0] avl_addr,                  //                 .address
                output wire        avl_rdata_valid,           //                 .readdatavalid
                output wire [63:0] avl_rdata,                 //                 .readdata
                input  wire [63:0] avl_wdata,                 //                 .writedata
                input  wire [7:0]  avl_be,                    //                 .byteenable
                input  wire        avl_read_req,              //                 .read
                input  wire        avl_write_req,             //                 .write
                input  wire [2:0]  avl_size,                  //                 .burstcount
                output wire        local_init_done,           //           status.local_init_done
                output wire        local_cal_success,         //                 .local_cal_success
                output wire        local_cal_fail,            //                 .local_cal_fail
                input  wire        oct_rzqin,                 //              oct.rzqin
                output wire        pll_mem_clk,               //      pll_sharing.pll_mem_clk
                output wire        pll_write_clk,             //                 .pll_write_clk
                output wire        pll_locked,                //                 .pll_locked
                output wire        pll_write_clk_pre_phy_clk, //                 .pll_write_clk_pre_phy_clk
                output wire        pll_addr_cmd_clk,          //                 .pll_addr_cmd_clk
                output wire        pll_avl_clk,               //                 .pll_avl_clk
                output wire        pll_config_clk,            //                 .pll_config_clk
                output wire        pll_mem_phy_clk,           //                 .pll_mem_phy_clk
                output wire        afi_phy_clk,               //                 .afi_phy_clk
                output wire        pll_avl_phy_clk            //                 .pll_avl_phy_clk
        );
其中的output wire [14:0] mem_a,                     //           memory.mem_a
                output wire [2:0]  mem_ba,                    //                 .mem_ba
                output wire [0:0]  mem_ck,                    //                 .mem_ck
                output wire [0:0]  mem_ck_n,                  //                 .mem_ck_n
                output wire [0:0]  mem_cke,                   //                 .mem_cke
                output wire [0:0]  mem_cs_n,                  //                 .mem_cs_n
                output wire [1:0]  mem_dm,                    //                 .mem_dm
                output wire [0:0]  mem_ras_n,                 //                 .mem_ras_n
                output wire [0:0]  mem_cas_n,                 //                 .mem_cas_n
                output wire [0:0]  mem_we_n,                  //                 .mem_we_n
                output wire        mem_reset_n,               //                 .mem_reset_n
                inout  wire [15:0] mem_dq,                    //                 .mem_dq
                inout  wire [1:0]  mem_dqs,                   //                 .mem_dqs
                inout  wire [1:0]  mem_dqs_n,                 //                 .mem_dqs_n
                output wire [0:0]  mem_odt,                   //                 .mem_odt
是DDR3的接口,请问您说的面向用户的接口产生读写时序,如实现向DDR3写数据操作,是我直接给DDR3的DQ赋给数据就可以么?哪些信号是用户接口用于实现写操作呢?
谢谢您啦,对DDR3这块儿真的是不太明白

你好,你的DDR3调试的怎么样了?最近我也在调,想咨询你几个问题

当然不能直接写,直接写还要MIG干啥,附图是你要配置的时序,MIG通过FIFO将用户数据和DDR相连,写数据时先将数据通过写入口或者双向口写入写FIFO,然后给写请求命令,MIG就会产生相应的时序将数据写入DDR,读的时候先给读请求命令,MIG会将数据读回来放在读FIFO里,然后再通过读出口读取数据



你好大神,最近在调试xilinx的ddr3,由于开发板的问题,我必须把生成的ddr差分时钟改为单端时钟然后在自己添加个pll的ip接到ddr上,我想知道怎么把ddr的差分时钟改为单端时钟,然后怎么和pll相连,敬请大神指点迷经。

大神们 小弟新人, 我最近在调试 ddr3,我这边用altera 生成ddr3的ip核  ,这边该怎么调试啊

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top