sdram读写
源代码在线查看: sdram_wr_data.v
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Company :
// Engineer :
// Create Date :
// Design Name :
// Module Name : sdram_wr_data
// Project Name :
// Target Device: Cyclone EP1C3T144C8
// Tool versions: Quartus II 8.1
// Description : SDRAM数据读写模块
//
// Revision : V1.0
// Additional Comments :
//
////////////////////////////////////////////////////////////////////////////////
module sdram_wr_data(
clk,rst_n,
/*sdram_clk,*/sdram_data,
sys_data_in,sys_data_out,
work_state,cnt_clk
);
//系统信号
input clk; //系统时钟,100MHz
input rst_n; //复位信号,低电平有效
// SDRAM硬件接口
//output sdram_clk; // SDRAM时钟信号
inout[15:0] sdram_data; // SDRAM数据总线
// SDRAM封装接口
input[15:0] sys_data_in; //写SDRAM时数据暂存器
output[15:0] sys_data_out; //读SDRAM时数据暂存器
// SDRAM内部接口
input[3:0] work_state; //读写SDRAM时数据状态寄存器
input[8:0] cnt_clk; //时钟计数
`include "sdr_para.v" // 包含SDRAM参数定义模块
//assign sdram_clk = ~clk; // SDRAM时钟信号
//------------------------------------------------------------------------------
//数据写入控制
//------------------------------------------------------------------------------
reg[15:0] sdr_din; //突发数据写寄存器
reg sdr_dlink; // SDRAM数据总线输入输出控制
//将待写入数据送到SDRAM数据总线上
always @ (posedge clk or negedge rst_n)
if(!rst_n) sdr_din else if((work_state == `W_WRITE) | (work_state == `W_WD)) sdr_din
//产生双向数据线方向控制逻辑
always @ (posedge clk or negedge rst_n)
if(!rst_n) sdr_dlink else if((work_state == `W_WRITE) | (work_state == `W_WD)) sdr_dlink else sdr_dlink
assign sdram_data = sdr_dlink ? sdr_din:16'hzzzz;
//------------------------------------------------------------------------------
//数据读出控制
//------------------------------------------------------------------------------
reg[15:0] sdr_dout; //突发数据读寄存器
//将数据从SDRAM读出
always @ (posedge clk or negedge rst_n)
if(!rst_n) sdr_dout else if((work_state == `W_RD) /*& (cnt_clk > 9'd0) & (cnt_clk < 9'd257)*/) sdr_dout
assign sys_data_out = sdr_dout;
//------------------------------------------------------------------------------
endmodule