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

📄 ddr2_32mx32_data_write_0.v

📁 Xilinx DDR2存储器接口调试代码
💻 V
字号:
///////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2005-2007 Xilinx, Inc.
// This design is confidential and proprietary of Xilinx, All Rights Reserved.
///////////////////////////////////////////////////////////////////////////////
//   ____  ____
//  /   /\/   /
// /___/  \  /   Vendor			: Xilinx
// \   \   \/    Version		: $Name: i+IP+131489 $
//  \   \        Application		: MIG
//  /   /        Filename		: data_write.v
// /___/   /\    Date Last Modified	: $Date: 2007/09/21 15:23:18 $
// \   \  /  \   Date Created		: Mon May 2 2005
//  \___\/\___\
// Device	: Spartan-3/3A/3A-DSP
// Design Name	: DDR2 SDRAM
// Purpose	: Data write operation performed through the pipelines in this
//		  module.
///////////////////////////////////////////////////////////////////////////////

`timescale 1ns/100ps
`include "../rtl/ddr2_32Mx32_parameters_0.v"

module  ddr2_32Mx32_data_write_0
  (
   input     [((`DATA_WIDTH*2)-1):0]  user_input_data,
   input [((`DATA_MASK_WIDTH*2)-1):0] user_data_mask,
   input                              clk90,
   input                              write_enable,
   output reg                         write_en_val,
   output [((`DATA_WIDTH)-1):0]       write_data_falling,
   output [((`DATA_WIDTH)-1):0]       write_data_rising,
   output [((`DATA_MASK_WIDTH)-1):0]  data_mask_f,
   output [((`DATA_MASK_WIDTH)-1):0]  data_mask_r
   );

   reg                                write_en_P1;
   reg                                write_en_P2;
   reg                                write_en_int;

   reg [((`DATA_WIDTH*2)-1):0]        write_data1;
   reg [((`DATA_WIDTH*2)-1):0]        write_data2;
   reg [((`DATA_WIDTH*2)-1):0]        write_data3;
   reg [((`DATA_WIDTH*2)-1):0]        write_data4;
   reg [((`DATA_MASK_WIDTH*2)-1):0]   write_data_m1;
   reg [((`DATA_MASK_WIDTH*2)-1):0]   write_data_m2;
   reg [((`DATA_MASK_WIDTH*2)-1):0]   write_data_m3;
   reg [((`DATA_MASK_WIDTH*2)-1):0]   write_data_m4;

   reg [(`DATA_WIDTH-1):0]            write_data90;
   reg [(`DATA_WIDTH-1):0]            write_data90_1;
   reg [(`DATA_WIDTH-1):0]            write_data90_2;
   reg [(`DATA_WIDTH-1):0]            write_data270;
   reg [(`DATA_WIDTH-1):0]            write_data270_1;
   reg [(`DATA_WIDTH-1):0]            write_data270_2;

   reg [(`DATA_MASK_WIDTH-1):0]       write_data_m90;
   reg [(`DATA_MASK_WIDTH-1):0]       write_data_m90_1;
   reg [(`DATA_MASK_WIDTH-1):0]       write_data_m90_2;

   reg [((`DATA_MASK_WIDTH)-1):0]     write_data_m270;
   reg [((`DATA_MASK_WIDTH)-1):0]     write_data_m270_1;
   reg [((`DATA_MASK_WIDTH)-1):0]     write_data_m270_2;

   wire [((`DATA_WIDTH*2)-1):0]       write_data0;
   wire [((`DATA_MASK_WIDTH*2)-1):0]  write_data_m0;


   assign write_data0   = user_input_data;
   assign write_data_m0 = user_data_mask;

   always@(posedge clk90) begin
      write_data1 <= write_data0;
      write_data2 <= write_data1;
      write_data3 <= write_data2;
      write_data4 <= write_data3;
   end

   always@(posedge clk90) begin
      write_data_m1 <= write_data_m0;
      write_data_m2 <= write_data_m1;
      write_data_m3 <= write_data_m2;
      write_data_m4 <= write_data_m3;
   end

   always@(posedge clk90) begin
      write_data90	  <= write_data4[`DATA_WIDTH-1 : 0];
      write_data_m90       <= write_data_m4[`DATA_MASK_WIDTH-1:0];
      write_data90_1	  <= write_data90;
      write_data_m90_1    <= write_data_m90;
      write_data90_2	  <= write_data90_1;
      write_data_m90_2    <= write_data_m90_1;

   end

   always@ (negedge clk90) begin
      write_data270      <= write_data4[(`DATA_WIDTH*2)-1 : `DATA_WIDTH];
      write_data_m270    <= write_data_m4[(`DATA_MASK_WIDTH*2)-1:`DATA_MASK_WIDTH];

      write_data270_1    <= write_data270;
      write_data_m270_1  <= write_data_m270;
      write_data270_2    <= write_data270_1;
      write_data_m270_2  <= write_data_m270_1;

   end

   assign write_data_rising  = write_data270_2;
   assign write_data_falling = write_data90_2;

   assign data_mask_r = write_data_m270_2;
   assign data_mask_f = write_data_m90_2;


// write enable for data path
   always@(posedge clk90) begin
     write_en_P1 <= write_enable;
     write_en_P2 <= write_en_P1;
   end

   always@(negedge clk90) begin
     write_en_int   <= write_en_P2;
     write_en_val   <= write_en_P1;
   end

endmodule

⌨️ 快捷键说明

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