sdram读写

源代码在线查看: sdram_cmd.v

软件大小: 2845 K
上传用户: Whibrafy
关键词: sdram 读写
下载地址: 免注册下载 普通下载 VIP

相关代码

				`timescale 1ns / 1ps
				////////////////////////////////////////////////////////////////////////////////
				// Company		: 
				// Engineer		: 
				// Create Date	:
				// Design Name	: 
				// Module Name	: sdram_cmd
				// Project Name	: 
				// Target Device: Cyclone EP1C3T144C8 
				// Tool versions: Quartus II 9.1
				// Description	: SDRAM命令模块
				//				
				// Revision		: V1.0
				// Additional Comments	:  
				// 
				////////////////////////////////////////////////////////////////////////////////
				module sdram_cmd(
								clk,rst_n,
								sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n,sdram_ba,sdram_addr,
								sys_wraddr,sys_r_wn,sdwr_byte,sdrd_byte,cnt_clk,sys_rdaddr,
								init_state,work_state
							);
					//系统信号
				input clk;					//50MHz
				input rst_n;				//低电平复位信号
					// SDRAM硬件接口
				output sdram_cke;			// SDRAM时钟有效信号
				output sdram_cs_n;			//	SDRAM片选信号
				output sdram_ras_n;			//	SDRAM行地址选通脉冲
				output sdram_cas_n;			//	SDRAM列地址选通脉冲
				output sdram_we_n;			//	SDRAM写允许位
				output[1:0] sdram_ba;		//	SDRAM的L-Bank地址线
				output[11:0] sdram_addr;	// SDRAM地址总线
					// SDRAM封装接口
				//input[21:0] sys_addr;		// 读写SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 
				input[21:0] sys_wraddr;		// 写SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 
				input[21:0] sys_rdaddr;		// 读SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 
				input[8:0] sdwr_byte;		//突发写SDRAM字节数(1-256个)
				input[8:0] sdrd_byte;		//突发读SDRAM字节数(1-256个)
					// SDRAM内部接口
				input[4:0] init_state;		// SDRAM初始化状态寄存器
				input[3:0] work_state;		// SDRAM读写状态寄存器
				input sys_r_wn;			// SDRAM读/写控制信号
				input[8:0] cnt_clk;		//时钟计数	
				
				`include "sdr_para.v"		// 包含SDRAM参数定义模块
				
				//-------------------------------------------------------------------------------
				//-------------------------------------------------------------------------------
				reg[4:0] sdram_cmd_r;	//	SDRAM操作命令
				reg[1:0] sdram_ba_r;
				reg[11:0] sdram_addr_r;
				
				assign {sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n} = sdram_cmd_r;
				assign sdram_ba = sdram_ba_r;
				assign sdram_addr = sdram_addr_r;
				
				
				wire[21:0] sys_addr;		// 读写SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 	
				assign sys_addr = sys_r_wn ? sys_rdaddr:sys_wraddr;		//读/写地址总线切换控制
				//-------------------------------------------------------------------------------
					//SDRAM命令参数赋值
				always @ (posedge clk or negedge rst_n) begin
					if(!rst_n) begin
							sdram_cmd_r 							sdram_ba_r 							sdram_addr_r 						end
					else
						case (init_state)
							    //初始化等待状态
								`I_NOP,`I_TRP,`I_TRF1,`I_TRF2,`I_TRF3,`I_TRF4,`I_TRF5,`I_TRF6,`I_TRF7,`I_TRF8,`I_TMRD: begin
										sdram_cmd_r 										sdram_ba_r 										sdram_addr_r 									end
								`I_PRE: begin //预充电状态
										sdram_cmd_r 										sdram_ba_r 										sdram_addr_r 									end 
								//8次自刷新 
								`I_AR1,`I_AR2,`I_AR3,`I_AR4,`I_AR5,`I_AR6,`I_AR7,`I_AR8: begin
										sdram_cmd_r 										sdram_ba_r 										sdram_addr_r 									end 			 	
								`I_MRS: begin	//模式寄存器设置,可根据实际需要进行设置
										sdram_cmd_r 										sdram_ba_r 										sdram_addr_r 				                            2'b00,			//操作模式设置
				                            1'b0,			//操作模式设置(这里设置为A9=0,即突发读/突发写)
				                            2'b00,			//操作模式设置({A8,A7}=00),当前操作为模式寄存器设置
				                            3'b011,			// CAS潜伏期设置(这里设置为3,{A6,A5,A4}=011)
				                            1'b0,			//突发传输方式(这里设置为顺序,A3=b0)
				                            3'b111			//突发长度(这里设置为8,{A2,A1,A0}=011)
												};
									end	
								`I_DONE://初始化完成
									case (work_state)
										    //等待状态
											`W_IDLE,`W_TRCD,`W_CL,`W_TRFC,`W_RD,`W_WD,`W_TDAL: begin
													sdram_cmd_r 													sdram_ba_r 													sdram_addr_r 												end
											`W_ACTIVE: begin //行有效 送入BANK和行地址
													sdram_cmd_r 													sdram_ba_r 													sdram_addr_r 												end
											`W_READ: begin //列有效 送入BANK和列地址
													sdram_cmd_r 													sdram_ba_r 													sdram_addr_r 																	4'b0100,		// A10=1,设置写完成允许预充电
																	sys_addr[7:0]	//列地址  
																};
												end
											`W_WRITE: begin //列有效 送入BANK和列地址
													sdram_cmd_r 													sdram_ba_r 													sdram_addr_r 																	4'b0100,		// A10=1,设置写完成允许预充电
																	sys_addr[7:0]	//列地址  
																};
												end							
											`W_AR: begin //自刷新
													sdram_cmd_r 													sdram_ba_r 													sdram_addr_r 												end
											`W_RBST: begin //读突发停止
													sdram_cmd_r 													sdram_ba_r 													sdram_addr_r 												end
											`W_WBST: begin  //写突发停止	
													sdram_cmd_r 													sdram_ba_r 													sdram_addr_r 												end
											default: begin
													sdram_cmd_r 													sdram_ba_r 													sdram_addr_r 												end
										endcase
								default: begin
											sdram_cmd_r 											sdram_ba_r 											sdram_addr_r 										end
							endcase
				end
				
				endmodule
				
							

相关资源