SDRAM控制器设计(数字控制器的两种设计方法)

FPGA之SDRAM控制器设计(二):刷新这次要来解决上次留下来的刷新问题,在100us后首先要经过两次刷新才进行模式寄存器设置。这颗SDRAM芯片需要每隔64ms对8192行(列地址10-位,行地址13位)的每一个存储电容进行一次刷新,因为不刷新电充会泄露电流导致存储信息丢失。那每一行的刷新时间为64/8192≈7810ns,注意刷新是以行为单位,器芯片内部有一个计数器,这个计数器不是时钟直接驱动的,而是AUTOPRECHARGE驱动,每发一次atuoprecharge命令这个计数器加1,我们是

大家好,又见面了,我是你们的朋友全栈君。

FPGA之SDRAM控制器设计(二):刷新

这次要来解决上次留下来的刷新问题,在100us后首先要经过两次刷新才进行模式寄存器设置。这颗SDRAM芯片需要每隔64ms对8192行(列地址10-位,行地址13位)的每一个存储电容进行一次刷新,因为不刷新电充会泄露电流导致存储信息丢失。那每一行的刷新时间为64/8192 ≈ 7810ns,注意刷新是以行为单位,器芯片内部有一个计数器,这个计数器不是时钟直接驱动的,而是AUTO PRECHARGE驱动,每发一次atuoprecharge命令这个计数器加1,我们是看不到的也无法对其直接置数,这个计数器一上电就进行初始化这是我们不需要关心的,我们要做的是在7810ns进行一次刷新操作就行了。所做的读和写就是在两次刷新间隔内进行的,这个会在下一节讲到。

SDRAM控制器设计(数字控制器的两种设计方法)

刷新模块的设计思路是:刷新的命令状态机和一个刷新标志产生的计数器,在此基础上要加上一个主控状态机,也就是控制何时上电刷新读写的一个模块。

刷新状态转移图:

SDRAM控制器设计(数字控制器的两种设计方法)

刷新状态机设计

`include	"head.v"
module ref_fsm(
		ref_done,ref_en,clk,ref_bus,soft_rst_n
);//刷新状态机
		input			clk;
		input			ref_en;
		input			soft_rst_n;
		output	reg		ref_done;
		output	[19:0]	ref_bus;
		
		reg		[12:0]	ref_a;
		reg		[1:0]	ref_ba;
		reg		[3:0]	ref_cmd;
		reg				ref_cke;
		
		assign	ref_bus = {ref_cmd,ref_a,ref_ba,ref_cke};
		
		reg		[14:0]	cnt;
		reg		[1:0]	state;
		localparam	s0 = 2'b00;
		localparam	s1 = 2'b01;
		localparam	s2 = 2'b10;
		
		
	always @(posedge clk)
		begin
			if(soft_rst_n == 1'b0)
				begin
					ref_done <= 1'b0;
					ref_ba <= 'd0;
					ref_cmd <= `NOP;
					ref_cke <= 1'b0;
					cnt <= 'd0;
					state <= s0;
				end
			else
				case(state)
					s0 : if(ref_en == 1'b0)
							begin
								ref_done <= 1'b0;
								state <= s0;
								
							end
						 else
						 	begin
						 		ref_cmd <= `PRE;
						 		ref_a[10] <= 1'b1;
						 		ref_done <= 1'b0;
						 		state <= s1;
						 		ref_cke <= 1'b1;//add
						 	end
					s1 : if(cnt < `tRP - 1)
							begin
								cnt	<= cnt + 1'b1;
								ref_cmd <= `NOP;
								state <= s1;
							end
						 else
						 	begin
						 		cnt	 <= 'd0;
						 		ref_cmd <= `REF;
						 		state <= s2;
						 	end
					s2 : if(cnt	< `tRFC - 1)
							begin
								cnt <= cnt + 1'b1;
								ref_cmd <= `NOP;
								state <= s2;	
							end
						 else
						 	begin
						 		cnt	<= 'd0;
						 		ref_done <= 1'b1;
						 		state <= s0;
						 	end
				endcase
		end
endmodule

定时模块设计

`include	"head.v"

module ref_time(
	clk,soft_rst_n,rt_en,rt_flag
);//刷新定时器
	input		clk;
	input		rt_en;
	input		soft_rst_n;
	output	reg	rt_flag;
	
	reg		[9:0]	cnt;

always @(posedge clk)begin
	if(soft_rst_n == 1'b0)
		begin
			cnt <= 'd0;
			rt_flag <= 1'b0;
		end
	else if(rt_en == 1'b1 )
			if(cnt < 780)
			begin
				cnt <= cnt + 1'b1;
				rt_flag <= 1'b0;
			end
			else begin
				cnt	 <= 'd0;
				rt_flag <= 1'b1;	
			end
		
end
endmodule

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/129213.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JS除法不是默认向下取整的

    JS除法不是默认向下取整的JS除法不是默认向下取整的今天刷题的时候,用到了二分,但是测试的时候居然超时了。。。然后我检查了好久,原来是我用除法获取中间索引值的时候,没有对中间索引值进行取整处理,后来查资料之后才知道javaScript中的除法和现实中的除法一样,不会自动向下取整,太坑了!!!下次一定记住!!!console.log(10/3);console.log(Math.floor(10/3));//向下取整console.log(Math.ceil(10/3));//向上取整console.log(Mat

    2022年6月21日
    44
  • NFV介绍_NFV技术

    NFV介绍_NFV技术转发自:https://zhuanlan.zhihu.com/p/26259440NFV全称是NetworkFunctionVirtualization。这又是一个与网络相关的故事。先来看看NFV的前世今生吧。在NFV之前,NF(NetworkFunction)是一直存在的,网络中,NF可以看成一个个独立的网元,实现着各自的功能。NF以固定的方式连接起来,统一提供的网络功能和服务。随便在网…

    2022年9月10日
    4
  • Linux 下查看java进程

    Linux 下查看java进程Linux下查看和停止所有java进程1.ps-ef|grepjava在Linux下查看所有java进程命令:ps-ef|grepjava停止特定java进程命令:kill-9java进程序号停止所有java进程命令:pkill-9java2.jpsjps-l-v比较常用的参数:-q只显示pid,不显示class名称,jar文件名和传递给main方…

    2022年8月24日
    9
  • android onresume函数,android – 在Activity中重新创建后未调用onResume

    android onresume函数,android – 在Activity中重新创建后未调用onResume在应用程序设置中进行某些更改时,我在recreate的onActivityResult中调用MainActivity。重新创建后,不调用onResume。我也收到错误:E/ActivityThread:Performingpauseofactivitythatisnotresumed从this问题开始,我了解到不能从onResume调用此函数。但是我从onActivityResul…

    2022年6月2日
    108
  • django 菜鸟篇+进阶篇[通俗易懂]

    django 菜鸟篇+进阶篇[通俗易懂]django自带webserver,故django开发的项目可以独立的运行,也可以安置在apache(+mod_python)下运行djangowikidjango主页django源码和apihello,worddemodjango官方文档django的官网手册http://www.djangobook.com/en/2.0/;对应的中文翻译版本

    2022年9月8日
    3
  • pycharm3.2激活码【在线注册码/序列号/破解码】

    pycharm3.2激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    150

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号