ddr_data

该代码段展示了一个在野火FPGA开发板上实现的DDR数据读写控制模块。模块通过系统时钟和复位信号进行控制,当写数据达到特定值(1024)时,会切换到读模式。读数据在数据有效和fifo非空的情况下被读取。
摘要由CSDN通过智能技术生成
`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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值