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

📄 mem_interface_top_data_write_0.txt

📁 利用fpga读写ddr的源代码 实测可以使用
💻 TXT
字号:
///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2005 Xilinx, Inc.
// This design is confidential and proprietary of Xilinx, All Rights Reserved.
///////////////////////////////////////////////////////////////////////////////
//   ____  ____
//  /   /\/   /
// /___/  \  /   Vendor             : Xilinx
// \   \   \/    Version            : $Name: mig_v1_7 $
//  \   \        Application        : MIG
//  /   /        Filename           : mem_interface_top_data_write_0.v
// /___/   /\    Date Last Modified : $Date: 2007/02/15 12:06:15 $
// \   \  /  \   Date Created       : Mon May 2 2005
//  \___\/\___\
//
// Device      : Virtex-4
// Design Name : DDR SDRAM
// Description: Splits the user data into the rise data and the fall data.
///////////////////////////////////////////////////////////////////////////////

`timescale 1ns / 1ps
`include "../rtl/mem_interface_top_parameters_0.v"

module mem_interface_top_data_write_0
  (
   input                            CLK,
   input                            CLK90,
   input                            RESET0,
   input                            RESET90,
   input [(`data_width*2)-1:0]      WDF_DATA,
   input [(`data_mask_width*2)-1:0] MASK_DATA,
   input                            dummy_write_pattern,
   input                            CTRL_WREN,
   input                            CTRL_DQS_RST,
   input                            CTRL_DQS_EN,
   output                           dqs_rst,
   output                           dqs_en,
   output                           wr_en,
   output [`data_width-1:0]         wr_data_rise,
   output [`data_width-1:0]         wr_data_fall,
   output [`data_mask_width-1:0]    mask_data_rise,
   output [`data_mask_width-1:0]    mask_data_fall
   );

   reg                              wr_en_clk270_r1;
   reg                              wr_en_clk90_r3;
   reg                              dqs_rst_r1;
   reg                              dqs_en_r1;
   reg                              dqs_en_r2;

   wire [143:0]                      patA;
   wire [143:0]                      pat5;
   wire [143:0]                      pat9;
   wire [143:0]                      pat6;

   reg                              dummy_flag;
   reg [`data_width-1 : 0]          dummy_rise_pattern;
   reg [`data_width-1 : 0]          dummy_fall_pattern;
   reg                              dummy_write_pattern_270;
   reg                              dummy_write_pattern_90;
   reg                              dummy_flag1;
   reg                              rst90_r;

   assign dqs_rst = dqs_rst_r1;
   assign dqs_en  = dqs_en_r2;
   assign wr_en   = wr_en_clk90_r3;

   assign patA = 144'hAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA;
   assign pat5 = 144'h555555555555555555555555555555555555;
   assign pat9 = 144'h999999999999999999999999999999999999;
   assign pat6 = 144'h666666666666666666666666666666666666;

   always @ (posedge CLK90)
     rst90_r <= RESET90;

   always @ (negedge CLK90) begin
     wr_en_clk270_r1  <= CTRL_WREN;
     dqs_rst_r1       <= CTRL_DQS_RST;
     dqs_en_r1        <= ~CTRL_DQS_EN;
   end

   always @ (negedge CLK) begin
     dqs_en_r2         <= dqs_en_r1;
   end

   always @ (posedge CLK90)
     wr_en_clk90_r3      <= wr_en_clk270_r1;

   always @(negedge CLK90)
     dummy_write_pattern_270 <= dummy_write_pattern;

   always @(posedge CLK90)
     dummy_write_pattern_90 <= dummy_write_pattern_270;

always@(posedge CLK90)
begin
  if(rst90_r)
    dummy_flag <= 1'b0;
  else if(dummy_write_pattern_90)
  begin
    if(dummy_flag)
      dummy_rise_pattern <= patA[`data_width-1 :0];
    else
      dummy_rise_pattern <= pat9[`data_width-1 :0];
    dummy_flag <= ~(dummy_flag);
  end
end

always@(posedge CLK90)
begin
  if(rst90_r)
    dummy_flag1 <= 1'b0;
  else if(dummy_write_pattern_90)
  begin
    if(dummy_flag1)
      dummy_fall_pattern <= pat5[`data_width-1 :0];
    else
      dummy_fall_pattern <= pat6[`data_width-1 :0];
  dummy_flag1 <= ~(dummy_flag1);
  end
end


   assign wr_data_rise =  dummy_write_pattern_90 ? dummy_rise_pattern :
                            WDF_DATA[(`data_width*2)-1:`data_width];
   assign wr_data_fall =  dummy_write_pattern_90 ? dummy_fall_pattern :
                            WDF_DATA[`data_width-1:0];


   assign mask_data_rise = (dummy_write_pattern_90 | ~(wr_en_clk90_r3)) ?
                           `data_mask_width'h0 :
                           MASK_DATA[(`data_mask_width*2)-1:`data_mask_width];
   assign mask_data_fall = (dummy_write_pattern_90 | ~(wr_en_clk90_r3)) ?
                           `data_mask_width'h0 :
                           MASK_DATA[`data_mask_width-1:0];

endmodule

⌨️ 快捷键说明

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