顶层模块为fifo_ctrl 和sdram_ctrl的例化。
CKE为时钟使能信号,作用屏蔽时钟。
CS#(#表示低电平有效)片选信号,屏蔽使能输入输出。高电平时候屏蔽输入命令。
RAS# 行选通信号。行地址
CAS# 列选通信号。列地址
WE# 写使能信号,写操作和预充电。
以上为控制信号。
sdram_top
(
input wire sys_clk,
input wire sys_rst_n,
input wire clk_out,
//写fifo信号
input wire wr_fifo_wr_clk,
input wire wr_fifo_wr_req,
input wire [15:0]wr_fifo_wr_data,
input wire [23:0]sdram_wr_b_addr,
input wire [23:0]sdram_wr_e_addr,
input wire [9:0]wr_brust_len,
input wire wr_rst,
//读fifo
input wire rd_fifo_rd_clk,
input wire rd_fifo_rd_req,
input wire [23:0]sdram_rd_e_addr,
input wire [23:0]sdram_rd_b_addr,
input wire [9:0]rd_brust_len,
input wire rd_rst,
input wire read_vaild,
output wire [15:0]rd_fifo_rd_data,
output wire [9:0]rd_fifo_num,
//sdram硬件接口
output wire sdram_clk,
output wire sdram_cke,
output wire sdram_cs_n,
output wire sdram_ras_n,
output wire sdram_cas_n,
output wire sdram_we_n,
output wire [1:0]sdram_ba,
output wire [12:0]sdram_addr,
//掩码信号 未使用
output wire sdram_dqm,
input wire [15:0]sdram_dq
);
assign sdram_clk = clk_out;
assign sdram_dqm = 2'b00;
wire init_end;
wire sdram_wr_ack;
wire sdram_wr_req;
wire [23:0]sdram_wr_addr;
wire [15:0]sdram_data_in;
wire sdram_rd_ack;
wire sdram_rd_req;
wire [15:0]sdram_data_out;
wire [23:0]sdram_rd_addr;
sdram_ctrl sdram_ctrl_inst
(
//时钟 复位 初始化结束信号
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
.init_end(init_end),
//sdram 写端口
.sdram_wr_req(sdram_wr_req),
.sdram_wr_addr(sdram_wr_addr),
.wr_burst_len(wr_burst_len),
.sdram_data_in(sdram_data_in),
.sdram_wr_ack(sdram_wr_ack),
//sdram读端口
.sdram_rd_req(sdram_rd_req),
.sdram_rd_addr(sdram_rd_addr),
.rd_burst_len(rd_burst_len),
.sdram_data_out(sdram_data_out),
.sdram_rd_ack(sdram_rd_ack),
//sdram硬件连接接口
.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_dq(sdram_dq)
);
fifo_ctrl fifo_ctrl_inst
(
.sys_clk(sys_clk),
.sys_rst_n(sys_rst_n),
//写fifo信号
.wr_fifo_wr_clk(wr_fifo_wr_clk),
.wr_fifo_wr_req(wr_fifo_wr_req),
.wr_fifo_wr_data(wr_fifo_wr_data),
.sdram_wr_b_addr(sdram_wr_b_addr),
.sdram_wr_e_addr(sdram_wr_e_addr),
.wr_brust_len(wr_brust_len),
.wr_rst(wr_rst),
//读fifo信号
.rd_fifo_rd_clk(rd_fifo_rd_clk),
.rd_fifo_rd_req(rd_fifo_rd_req),
.sdram_rd_e_addr(sdram_rd_e_addr),
.sdram_rd_b_addr(sdram_rd_b_addr),
.rd_brust_len(rd_brust_len),
.rd_rst(rd_rst),
.init_end(init_end),
.read_vaild(read_vaild),
.rd_fifo_rd_data(rd_fifo_rd_data),
.rd_fifo_num(rd_fifo_num),
//sdram 写信号
.sdram_wr_ack(sdram_wr_ack),
.sdram_wr_req(sdram_wr_req),
.sdram_wr_addr(sdram_wr_addr),
.sdram_data_in(sdram_data_in),
//sdram 读信号
.sdram_rd_ack(sdram_rd_ack),
.sdram_rd_req(sdram_rd_req),
.sdram_data_out(sdram_data_out),
.sdram_rd_addr(sdram_rd_addr)
);
endmodule