DDR 复位

将FPGA代码和实际的数字电路对应起来。

always @ (negedge clk_ref_200)

begin

if(ddr3_init_done)    //DDR3 没起来的时候,计数器开始计数。

ddr_init_cnt<=28‘b0;

else

ddr_init_cnt<=ddr_init_cnt+1;    //计数器

end

always @ (negedge clk_ref_200)

begin

if(ddr3_init_done)

begin

ddr_init_rst<=1‘b0;    //现在感觉这个多此一举。只需要根据计数器的情况对复位信号进行控制即可。

end

else

begin    //实际想实现的功能是,DDR3 的init done信号没起来的时候,计数器开始计数当记到一定数时复位DDR3,然后一段时间后释放复位。

if(ddr_init_cnt[27]==1‘b1)

ddr_init_rst<=1‘b0;

else if(ddr_init_cnt[27:26]==2‘b11)  //明显有问题,这两个判断条件相互冲突。并且是ddr_init_cnt[27:26]==2‘b11时将DDR3复位信号置1.但是释放复位的条件不对。

ddr_init_rst<=1‘b1;

end

end

RTL图可以看到,ddr_init_cnt[27:26]==2‘b11时,ddr_init_rst_i__0输出1,并且连接到ddr_init_rst_reg的set引脚上,产生DDR3 复位信号。

ddr_init_rst_i的S引脚上连接的是ddr3_init_done信号,当ddr3_init_done为1时,ddr_init_rst_i输出1,连接到ddr_init_rst_reg的rst引脚上。

修改代码后,

always @ (negedge clk_ref_200)

begin

if(ddr3_init_done)

begin

ddr_init_cnt<=28‘b0;

end

else

begin

ddr_init_cnt<=ddr_init_cnt+1;

end

end

always @ (negedge clk_ref_200)

begin

if(ddr3_init_done)

begin

ddr_init_rst<=1‘b0;

end

else

begin

if(ddr_init_cnt[27]==1‘b1)

ddr_init_rst<=1‘b1;

else if(ddr_init_cnt[27:26]==2‘b11)

ddr_init_rst<=1‘b0;

end

end

always @(posedge clk_ref_200) begin ddr_init_rst_r   <= ddr_init_rst    ; end

下图中可以看到,ddr_init_rst_i__0的S引脚上为2B‘11时输出1,然后ddr_init_rst_i__1的S引脚上为1‘b1时,输出1。因此

always @ (negedge clk_ref_200)

begin

if(ddr3_init_done)

begin

ddr_init_cnt<=28‘b0;

end

else

begin

ddr_init_cnt<=ddr_init_cnt+1;

end

end

always @ (negedge clk_ref_200)

begin

if(ddr3_init_done)   //实际上,ddr_init_rst复位是没有什么必要的。

begin

ddr_init_rst<=1‘b0;

end

else

begin

if(ddr_init_cnt[27:26]==1‘b10)   //应该是2‘b

ddr_init_rst<=1‘b1;

else if(ddr_init_cnt[27:26]==2‘b11 || ddr_init_cnt[27:26]==2‘b00 || ddr_init_cnt[27:26]==2‘b01)

ddr_init_rst<=1‘b0;

end

end

always @(posedge clk_ref_200) begin ddr_init_rst_r   <= ddr_init_rst    ; end

因为       if(ddr_init_cnt[27:26]==1‘b10)   //应该是2‘b  写错,导致下面ddr_init_rst_i和ddr_init_rst_i的S引脚上为“00”时输出为1。应该ddr_init_rst_i和ddr_init_rst_i的S引脚上为“10”时输出为1。

来自为知笔记(Wiz)

时间: 2024-08-11 07:32:33

DDR 复位的相关文章

DDR基础知识

1.前言 DDR的全称为Double Data Rate SDRAM,也就是双倍速率的SDRAM,SDRAM在一个CLK周期传输一次数据,而DDR在一个CLK周期传输两次数据,分别在上升沿和下降沿各传输一次数据,该概念称为预取,在描述DDR速度的时候一般使用MT/s单位,也就是每秒多少兆次数据传输. 2.DDR结构框图 接下来将以Micro的DDR3L芯片MT41K256M16进行结构框图的介绍,该芯片是一款512MB的DDR3L内存芯片,框图如下所示: 接下来对上面给出的框架图各个标号进行简单

关于王工小板的电路图中复位电路的错误 和 复位电路原理的学习

王工小板中对于stm32f411芯片的复位电路如下: 实际上这个电路是错误的,经过实测,stm32f411芯片运行时复位引脚为高电平,而在这个电路图里,实际上是把stm32f411芯片运行时复位引脚的电平看为了低电平,按照这个电路,按下按键,会引起电平跳转到高电平从而触发复位,然而实际上并不是这样,stm32f411复位引脚内接上拉电阻(经过实测),所以即使按键松开,其实RST引脚也是高电平,按键按下后,依然是高电平,故这个电路无法触发一个电平的跳变引发复位中断. 对上面说法的证明:目前复位按键

unity3d 赛车游戏——复位点检测

一直没有时间写博客 昨天我的CarWaypoints插件也告一段落了 今年没回家,过年就我一个人 挺无聊的,那就休息一天写几篇博客吧 我的代码可能很少,但是思路很重要 希望不懂的朋友别只copy代码 赛车游戏的话赛车难免会冲出跑道.掉入水坑.卡在障碍物上....等情况 那么问题来了,遇到这些情况怎么办呢? 玩家玩得好好的,难道就因为遇到这些情况要退出游戏重新进入吗? 那当然是不现实的,要是我的话果断卸载游戏 还要骂一句做游戏的人是脑残啊 我想你不希望玩家骂你是脑残吧,哈哈哈 新技能,赶快GET起

zedboard如何从PL端控制DDR读写(一)

看了一段时间的DDR手册,感觉大体有一点了解了,想要实际上板调试,然而实验室可用的开发板不多,拿了一块zynq板看了看,DDR确实有,但是已经集成了控制器,而且控制器还放到了PS端,PL只能通过AXI接口访问.     无奈另外两块开发板也这样,索性就用AXI去控制吧,正好还能再复习一遍AXI. 先简单介绍一下zynq,其全称是ZedBoard Zynq Evaluation and Development Kit  , FPGA芯片型号为xc7z020clg484-1. 片内包含一个丰富特性的

深入分析DDR(转载)

文/IT168评测室特约 Myddn [IT168评测室]最近,假如你仔细的观察PC领域发生的变化,你就会注意的一个新鲜的术语“DDR2”频频出现.顾名思义,DDR2就是第二代双倍速率同步动态随机存储器,这个名字听上去很拗口,实际上我们只要知道它的缩写是DDR SDRAM就行了.就目前的发展看来,DDR2绝对不是纸上谈兵,它的平台已经准备好了,不出意外的话,Intel七月份就会发布支持DDR2的芯片组925X和915.明年,DDR2就会成为PC上普遍使用,甚至是主流的内存类型. 因此,我们应该了

zedboard如何从PL端控制DDR读写(五)

有了前面的一堆铺垫.现在终于开始正式准备读写DDR了,开发环境:VIVADO2014.2 + SDK. 一.首先要想在PL端通过AXI去控制DDR,我们必须要有一个AXI master,由于是测试,就不自己写了,直接用package IP生成,方法如下: 1.选择package IP工具 2.创建新的AXI外设 3.接口类型选择Full,模式选择master,如果你不关心里面的详细实现过程,那么直接finish就好了.(后面我们会继续分析里面的过程) 二.创建好了IP,自然要加入到IP库里,如图

DDR的前世与今生(二)

SDRAM与DDR SDRAM SDRAM是比较久远的事情了,但我们一说到它肯定不会和DDR混淆,我们通常理解的SDRAM其实是SDR SDRAM,为SDRAM的第一代,而DDR1则为第二代,乃至到我们现在使用的DDR4,其实为第五代SDRAM,在此需要澄清一下.以示区别,后续文章里面用SDR来特指SDR SDRAM,而DDR就特指DDR SDRAM了. 就像很多人回复的一样,他们的本质区别就是周期操作方式(也称时钟采样)的差异,这就导致后面设计上很大的不同.SDR都是"单数据传输模式"

异步复位同步释放

同步复位与异步复位的优缺点 同步复位的优点: 一般能够确保电路是百分之百同步的. 确保复位只发生在有效时钟沿,可以作为过滤掉毛刺的手段. 同步复位的缺点: 复位信号的有效时长必须大于时钟周期,才能真正被系统识别并完成复位.同时还要考虑如:时钟偏移.组合逻辑路径延时.复位延时等因素. 由于大多数的厂商目标库内的触发器都只有异步复位端口,采用同步复位的话,就会耗费较多的逻辑资源. 异步复位优点: 异步复位信号识别方便,而且可以很方便的使用全局复位. 由于大多数的厂商目标库内的触发器都有异步复位端口,

i.MX6开发板的DDR参数设置-迅为

DDR Stress Test Tool 提供了两种用途.首先,它可以用来对校准DDR3,以便于MMDC PHY delay settings和PCB配对,来达到最佳的DRAM新能.整个过程是全自动的,因此客户可以在较短的时间内让他们的DDR3工作起来. 另外,该工具可以运行内存压力测试,用来验证DDR3的功能和可靠性.压力测试可以用来验证硬件连接.MMDC寄存器参数和DDR3模式寄存器设置.测试最重要的目的是让客户验证DDR3在他们的自己的板子上运行稳定.Calibration 在i.MX6处