⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdfifo_ctrl.v

📁 sdram读写
💻 V
字号:
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Company		: 
// Engineer		: 
// Create Date	: 
// Design Name	: 
// Module Name	: sdfifo_ctrl
// Project Name	: 
// Target Device: Cyclone EP1C3T144C8 
// Tool versions: Quartus II 8.1
// Description	: SDRAM fifo控制模块						
//				
// Revision		: V1.0
// Additional Comments	:  
// 
////////////////////////////////////////////////////////////////////////////////
module sdfifo_ctrl(
				clk_25m,clk_100m,rst_n,
				wrf_din,wrf_wrreq,
				sdram_wr_ack,/*sys_addr,*/sys_data_in,sys_en,
				sys_data_out,rdf_rdreq,sdram_rd_ack,rdf_dout,sys_r_wn,
				syswr_done,tx_start
			);

input clk_25m;	//PLL输出25MHz时钟
input clk_100m;	//PLL输出100MHz时钟
input rst_n;
	//wrfifo
input[15:0] wrf_din;		//sdram数据写入缓存FIFO输入数据总线
input wrf_wrreq;			//sdram数据写入缓存FIFO数据输入请求,高有效
input sdram_wr_ack;			//系统写SDRAM响应信号,作为wrFIFO的输出有效信号
input sdram_rd_ack;
//output[21:0] sys_addr;		//读写SDRAM时地址暂存器,(bit21-20)L-Bank地址:(bit19-8)为行地址,(bit7-0)为列地址 
output[15:0] sys_data_in;	//sdram数据写入缓存FIFO输出数据总线,即写SDRAM时数据暂存器
output sys_en;		//系统写SDRAM请求信号

	//rdfifo
input[15:0] sys_data_out;	//sdram数据读出缓存FIFO输入数据总线
input rdf_rdreq;			//sdram数据读出缓存FIFO数据输出请求,高有效
output sys_r_wn;			//系统读SDRAM响应信号,作为rdFIFO的输写有效信号

output[15:0] rdf_dout;		//sdram数据读出缓存FIFO输出数据总线


input syswr_done;		//所有数据写入sdram完成标志位
output tx_start;		//串口发送数据启动标志位,高有效

//------------------------------------------------
wire[8:0] wrf_use;			//sdram数据写入缓存FIFO已用存储空间数量
wire[8:0] rdf_use;			//sdram数据读出缓存FIFO已用存储空间数量	

//assign sys_addr = 22'h1a9e21;	//测试用
wire sdram_wr_req = ((wrf_use >= 9'd256) & ~syswr_done);	//FIFO(8个16bit数据)即发出写SDRAM请求信号
wire sdram_rd_req = ((rdf_use < 9'd256) & syswr_done);	//sdram写入完成且FIFO半空(256个16bit数据)即发出读SDRAM请求信号
assign tx_start = ((rdf_use != 9'd0) & syswr_done);		//启动串口发送数据

reg sys_en;
reg sys_r_wn;
always @(posedge clk_100m or negedge rst_n)
	if(!rst_n)	begin
		sys_r_wn<=1'b0;
		sys_en<=1'b0;
	end
	else
		case({sdram_wr_req,sdram_rd_req})
			2'b01: begin
				sys_en=1'b1;
				sys_r_wn=1'b1;
			end
			2'b10: begin
				sys_en=1'b1;
				sys_r_wn=1'b0;
			end
			default: begin
				sys_en=1'b0;
				sys_r_wn=1'b0;
			end
		endcase
//------------------------------------------------
//例化SDRAM写入数据缓存FIFO模块
wrfifo			uut_wrfifo(
					.data(wrf_din),
					.rdclk(clk_100m),
					.rdreq(sdram_wr_ack),
					.wrclk(clk_25m),
					.wrreq(wrf_wrreq),
					.q(sys_data_in),
					.wrusedw(wrf_use)
					);	

//------------------------------------------------
//例化SDRAM读出数据缓存FIFO模块
rdfifo			uut_rdfifo(
					.data(sys_data_out),
					.rdclk(clk_25m),
					.rdreq(rdf_rdreq),
					.wrclk(clk_100m),
					.wrreq(/*rdf_wrreq*/sdram_rd_ack),
					.q(rdf_dout),
					.wrusedw(rdf_use)
					);	

endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -