sdram读写

源代码在线查看: sdr_test.v

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

相关代码

				`timescale 1ns / 1ps
				////////////////////////////////////////////////////////////////////////////////
				// Company		: 
				// Engineer		: 
				// Create Date	: 
				// Design Name	: 
				// Module Name	: sdr_test
				// Project Name	: 
				// Target Device: Cyclone EP1C3T144C8 
				// Tool versions: Quartus II 9.1
				// Description	: 
				//				
				// Revision		: V1.0
				// Additional Comments	:  
				// 
				////////////////////////////////////////////////////////////////////////////////
				module sdr_test(
								clk,rst_n,
								sdram_clk,sdram_cke,sdram_cs_n,sdram_ras_n,sdram_cas_n,sdram_we_n,
								sdram_ba,sdram_addr,sdram_data,//sdram_udqm,sdram_ldqm	
								rs232_tx,sdram_ldqm,sdram_udqm, led,
					/*			sdram_rd_req,sdram_wr_ack,sdram_rd_ack,
								sys_data_out,sdram_busy,sys_data_in,sys_dout_rdy,
							*/	rdf_dout/*,rdf_rdreq*/
							);
				
				input clk;			//系统时钟,100MHz
				input rst_n;		//复位信号,低电平有效
				
					// FPGA与SDRAM硬件接口
				output sdram_clk;			//	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地址总线
				//output sdram_udqm;			// SDRAM高字节屏蔽
				//output sdram_ldqm;			// SDRAM低字节屏蔽
				inout[15:0] sdram_data;		// SDRAM数据总线
				
				output rs232_tx;		//RS232发送数据信号
				output[3:0] led;
				
				output sdram_udqm;
				output sdram_ldqm;
				
				assign sdram_ldqm=1'b0;
				assign sdram_udqm=1'b0;
				////////////////////////////////////////////////
					// SDRAM的封装接口测试引出
				/*output sdram_rd_req;			//系统读SDRAM请求信号
				output sdram_wr_ack;		//系统写SDRAM响应信号
				output sdram_rd_ack;		//系统读SDRAM响应信号	
				output[15:0] sys_data_in;	//写SDRAM时数据暂存器,4个突发读写字数据,默认为00地址bit15-0;01地址bit31-16;10地址bit47-32;11地址bit63-48
				
				output[15:0] sys_data_out;	//读SDRAM时数据暂存器,(格式同上)
				output sdram_busy;			// SDRAM忙标志,高表示SDRAM处于工作中
				output sys_dout_rdy;			// SDRAM数据输出完成标志
				*/
				output[15:0] rdf_dout;		//sdram数据读出缓存FIFO输出数据总线	
				//output rdf_rdreq;			//sdram数据读出缓存FIFO数据输出请求,高有效
				
				////////////////////////////////////////////////
				
				
					// SDRAM的封装接口
				wire sys_en;			//系统写SDRAM请求信号
				wire sys_r_wn;			//系统读SDRAM请求信号
				wire sdram_wr_ack;			//系统写SDRAM响应信号,作为wrFIFO的输出有效信号
				wire sdram_rd_ack;			//系统读SDRAM响应信号,作为rdFIFO的输写有效信号	
				//wire[21:0] sys_addr;		//读写SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 
				
				wire[8:0] sdwr_byte = 9'd256;		//突发写SDRAM字节数(1-256个)
				wire[8:0] sdrd_byte = 9'd256;		//突发读SDRAM字节数(1-256个)
				wire[21:0] sys_wraddr;		//写SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 
				wire[21:0] sys_rdaddr;		//读SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 
				wire[15:0] sys_data_in;		//写SDRAM时数据暂存器
				
				wire[15:0] sys_data_out;	//sdram数据读出缓存FIFO输入数据总线
				wire sdram_busy;			// SDRAM忙标志,高表示SDRAM处于工作中
				wire sys_dout_rdy;			// SDRAM数据输出完成标志
				
					//wrFIFO输入控制接口
				wire[15:0] wrf_din;		//sdram数据写入缓存FIFO输入数据总线
				wire wrf_wrreq;			//sdram数据写入缓存FIFO数据输入请求,高有效
					//rdFIFO输出控制接口
				wire[15:0] rdf_dout;		//sdram数据读出缓存FIFO输出数据总线	
				wire rdf_rdreq;			//sdram数据读出缓存FIFO数据输出请求,高有效
				
					//系统控制相关信号接口
				wire clk_25m;	//PLL输出25MHz时钟
				wire clk_100m;	//PLL输出100MHz时钟
				wire sys_rst_n;	//系统复位信号,低有效
				
				
				//------------------------------------------------
				//例化系统复位信号和PLL控制模块
				sys_ctrl		uut_sysctrl(
									.clk(clk),
									.rst_n(rst_n),
									.sys_rst_n(sys_rst_n),
									.clk_25m(clk_25m),
									.clk_100m(clk_100m),
									.sdram_clk(sdram_clk)
									);
				
				//------------------------------------------------
				//例化SDRAM封装控制模块
				
				sdram_top		uut_sdramtop(				// SDRAM
											.clk(clk_100m),
											.rst_n(sys_rst_n),
											.sys_en(sys_en),
											.sys_r_wn(sys_r_wn),
											.sdram_wr_ack(sdram_wr_ack),
											.sdram_rd_ack(sdram_rd_ack),	
											.sys_wraddr(sys_wraddr),
											.sys_rdaddr(sys_rdaddr),
											.sys_data_in(sys_data_in),
											.sys_data_out(sys_data_out),
											.sdwr_byte(sdwr_byte),
											.sdrd_byte(sdrd_byte),	
											.sdram_busy(sdram_busy),
											.sdram_cke(sdram_cke),
											.sdram_cs_n(sdram_cs_n),
											.sdram_ras_n(sdram_ras_n),
											.sdram_cas_n(sdram_cas_n),
											.sdram_we_n(sdram_we_n),
											.sdram_ba(sdram_ba),
											.sdram_addr(sdram_addr),
											.sdram_data(sdram_data)
										//	.sdram_udqm(sdram_udqm),
										//	.sdram_ldqm(sdram_ldqm)
									);	
				
				//------------------------------------------------
				//读写SDRAM数据缓存FIFO模块例化	
				sdfifo_ctrl			uut_sdffifoctrl(
										.clk_25m(clk_25m),
										.clk_100m(clk_100m),
										.rst_n(sys_rst_n),
										.wrf_din(wrf_din),//SDRAM wrfifo的数据输入总线,即外部数据存入SDRAM的数据总线
										.wrf_wrreq(wrf_wrreq),//SDRAM wrfifo的写请求信号
										.sdram_wr_ack(sdram_wr_ack),//SDRAM数据写入响应信号,数据在写入SDRAM时为高电平,写入完毕或读状态时为低,出现下降沿表示数据写入完成
										.sys_data_in(sys_data_in),//内部信号,SDRAM数据输入总线(wrfifo输出,SDRAM DATABUS输入)
										.sys_en(sys_en),//内部信号,sdram工作使能信号,0:SDRAM不工作
										.sys_data_out(sys_data_out),//内部信号,SDRAM数据输出总线(rdfifo输入,SDRAM DATABUS输出)
										.rdf_rdreq(rdf_rdreq),//用户读SDRAM rdfifo请求信号
										.sdram_rd_ack(sdram_rd_ack),//SDRAM数据读出响应信号,读SDRAM时为高电平
										.rdf_dout(rdf_dout),//sdram rdfifo数据输出
										.sys_r_wn(sys_r_wn),
										.syswr_done(syswr_done),
										.tx_start(tx_start)		
										);	
										
				//------------------------------------------------
				//例化模拟写入数据到sdram模块
				wire syswr_done;		//所有数据写入sdram完成标志位
				datagene			uut_datagene(
										.clk(clk_25m),
										.rst_n(sys_rst_n),
										.wrf_din(wrf_din),
										.wrf_wrreq(wrf_wrreq),
										.sys_wraddr(sys_wraddr),
										.sys_rdaddr(sys_rdaddr),
										.syswr_done(syswr_done),
										.sdram_busy(sdram_busy),
										.sdram_rd_ack(sdram_rd_ack)
									);
				
				
				//------------------------------------------------
				//例化串口数据发送控制模块
				wire tx_start;		//串口发送数据启动标志位,高有效
				uart_ctrl		uut_uartctrl(
									.clk(clk_25m),
									.rst_n(sys_rst_n),
									.tx_data(rdf_dout[7:0]),
									.tx_start(tx_start),		///////////
									.fifo232_rdreq(rdf_rdreq),
									.rs232_tx(rs232_tx)
									);
				
				led_test uut_led_test(
									.clk(clk_25m),
									.sys_rst_n(sys_rst_n),
									.led(led)
									);
				endmodule
							

相关资源