微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!

时间:10-02 整理:3721RD 点击:
SDRAM的控制器还好一些,但他的DDR Controller有明显的问题:
(1)DDR SDRAM已经不存在Page Mode操作问题,但他的代码却已然存在Page操作模式。
(2)模式寄存器和扩展模式寄存器设置:DDR SDRAM的模式寄存器跟SDRAM的模式寄存器有很大区别,各个位的含义也不太一样,而参考中好像跟SDRAM一样一样的。
(3)待续。
不久我将给出我修改过的代码,欢迎大家参与讨论,共同提高!

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
ddr
always @(posedge CLK or negedge RESET_N)
begin
        if (RESET_N == 0)
        begin
                oe_shift <= 0;
                oe1      <= 0;
                oe2      <= 0;
                OE       <= 0;
        end
        else
        begin
                if (do_writea1 == 1)
                begin
                        if (SC_BL == 1)                          //  Set the shift register to the appropriate
                                oe_shift <= 1;                   // value based on burst length.
                        else if (SC_BL == 2)
                                oe_shift <= 3;
                        else if (SC_BL == 4)
                                oe_shift <= 15;
                                oe1 <= 1;
                end
                else
                begin
                        oe_shift[6:0] <= oe_shift[7:1];          // Do the shift operation
                        oe_shift[7]   <= 0;
                        oe1  <= oe_shift[0];
                        oe2  <= oe1;
                        oe3  <= oe2;
                        oe4  <= oe3;
                        if (SC_RC == 2)
                                OE   <= oe3;
                        else
                                OE   <= oe4;
                end
        end
end
sdram
always @(posedge CLK or negedge RESET_N)
begin
        if (RESET_N == 0)
        begin
                oe_shift <= 0;
                oe1      <= 0;
                oe2      <= 0;
                OE       <= 0;
        end
        else
        begin
                if (SC_PM == 0)
                begin
                        if (do_writea1 == 1)
                        begin
                                if (SC_BL == 1)                       //  Set the shift register to the appropriate
                                        oe_shift <= 0;                // value based on burst length.
                                else if (SC_BL == 2)
                                        oe_shift <= 1;
                                else if (SC_BL == 4)
                                        oe_shift <= 7;
                                else if (SC_BL == 8)
                                        oe_shift <= 127;
                                oe1 <= 1;
                        end
                        else
                        begin
                                oe_shift[6:0] <= oe_shift[7:1];       // Do the shift operation
                                oe_shift[7]   <= 0;
                                oe1  <= oe_shift[0];
                                oe2  <= oe1;
                                oe3  <= oe2;
                                oe4   <= oe3;
                                if (SC_RC == 2)
                                        OE <= oe3;
                                else
                                        OE <= oe4;
                        end
                end
                else
                begin
                        if (do_writea1 == 1)                                    // OE generation for page mode accesses
                                oe4   <= 1;
                        else if (do_precharge == 1 | do_reada == 1 | do_refresh)
                                oe4   <= 0;
                        OE <= oe4;
                end
                              
        end
end

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
[这个贴子最后由atuhappy在 2004/05/13 10:29am 第 1 次编辑]
altera的代码只是一个参考,并不一定能用,买ip才行
估计是同一个人写的代码
自己用,还是要自己设计的

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
                               SA[10] <= !SC_PM;           // set SA[10] for autoprecharge read/write or for a precharge all command
                                                         // don't set it if the controller is in page mode.  
ddr中用于充电或刷新设置,是整个芯片还是当前行

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
Precharge All是刷新整个芯片。
我想在这个参考设计的基础上进行修改,你觉得可行不?
还有他的整个设计没有使用状态机,使用状态机改进一下可能更好一些。

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
你的ddr控制器是用在什么地方。
当然可以在这个基础上修改了。
用不用状态机问题不大。如果有主机完全控制,状态机没必要,否则还是加上的好

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
用于信号产生,有DSP控制。

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
用于信号发生器?

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
对阿!把DDR当做SRAM使用。

Altera的SDRAM Controller及DDR SDRAM Controller参考代码大讨论,欢迎参与!
好象有片文章写的就是用ddr做信号发生器的
你可以参考以下

在哪儿可以看到?

谢谢分享

还在学习中

弱弱的问下,cmd_ack什么时候发出,有何作用?

谢谢!小编!
谢谢!小编!

關於他的東西...
真要要在在一下是不是有跟自己的DESIGN相符才能用...

呵呵,正好用到.

学习中...............

学习中!

thanks

good 1

goodjjjj

我自己写了一个SDRAM的控制器,目前正在写DDR2。我写的时候将模块分成了4个,用户界面模块,FSM,刷新控制模块,器件接口模块。目前已经调通,只用了1500行代码,BL   clk什么的都可配置,呵呵。感觉写出来了就简单得很

顶!

关注中...

fffffffffffffffffffffff

SDRAM的时序很难啊! 我菜鸟啊! 不是很理解啊! SDRAM的时序怎么写啊?谢谢啊!

23楼 能否把sdram的代码拿出来参考下啊,只是为了加强学习用,谢谢了! 不方便分享,邮箱也行kuku_sss@126.com



代码永远都是简单的,STA才是挑战。我刚写了个DDR2-800控制器(含PHY),代码2天就写完了,时序调了8天才跑上800MHz。

路过学习~

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

网站地图

Top