`timescale 1ns / 1ns
////////////////////////////////////////////////////////////////////////
// 实验平台: 野火FPGA开发板
// 公司 : http://www.embedfire.com
// 论坛 : http://www.firebbs.cn
// 淘宝 : https://fire-stm32.taobao.com
////////////////////////////////////////////////////////////////////////
module ddr_data(
input wire sys_clk , //系统时钟
input wire sys_rst_n , //系统复位,低电平有效
output reg wr_en , //写使能
output reg [15:0] wr_data , //写数据
output reg rd_en , //读使能
input wire [15:0] rd_data , //读数据
input wire data_rd_valid,//读取有效
output reg read_enable //写完成,开始读
);
//********************************************************************//
//***************************** Main Code ****************************//
//********************************************************************//
//读取数据
always@(posedge sys_clk or negedge sys_rst_n)
begin
if(sys_rst_n==1'b0)begin
rd_en<=1'b0;
end
//在读数据缓冲开始,并且读数据有效,fifo非空,开始读
else if(read_enable==1'b1&data_rd_valid==1'b1)begin
rd_en<=1'b1;
end
else begin
rd_en<=1'b0;
end
end
//写入数据
always@(posedge sys_clk or negedge sys_rst_n)
begin
if(sys_rst_n==1'b0)begin
wr_en<=1'b0;
wr_data<=16'd0;
read_enable<=1'b0;
end
else begin
if(wr_data==16'd1024) begin //写入到1024,结束写操作,进入读操作
wr_en<=1'b0; //拉低写使能
read_enable<=1'b1; //开始缓冲读数据
wr_data<=wr_data;
end
else begin
wr_en<=1'b1; //拉高写使能
read_enable<=1'b0;//禁止缓冲读数据
wr_data<=wr_data+16'd1;//数据累加
end
end
end
endmodule
ddr_data
最新推荐文章于 2024-08-20 10:58:19 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)