OpenCores
URL https://opencores.org/ocsvn/the_wizardry_project/the_wizardry_project/trunk

Subversion Repositories the_wizardry_project

[/] [the_wizardry_project/] [trunk/] [Wizardry/] [VHDL/] [Wizardry Top Level/] [Memory Design/] [MIG_top_00/] [MIG_data_path_0/] [MIG_data_write_0.vhd] - Blame information for rev 24

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 24 mcwaccent
-------------------------------------------------------------------------------
2
-- Copyright (c) 2005-2007 Xilinx, Inc.
3
-- This design is confidential and proprietary of Xilinx, All Rights Reserved.
4
-------------------------------------------------------------------------------
5
--   ____  ____
6
--  /   /\/   /
7
-- /___/  \  /   Vendor             : Xilinx
8
-- \   \   \/    Version            : $Name: i+IP+131489 $
9
--  \   \        Application        : MIG
10
--  /   /        Filename           : MIG_data_write_0.vhd
11
-- /___/   /\    Date Last Modified : $Date: 2007/09/21 15:23:24 $
12
-- \   \  /  \   Date Created       : Mon May 2 2005
13
--  \___\/\___\
14
--
15
-- Device      : Virtex-4
16
-- Design Name : DDR SDRAM
17
-- Description: Splits the user data into the rise data and the fall data.
18
-------------------------------------------------------------------------------
19
 
20
library ieee;
21
use ieee.std_logic_1164.all;
22
use work.MIG_parameters_0.all;
23
library UNISIM;
24
use UNISIM.vcomponents.all;
25
 
26
entity MIG_data_write_0 is
27
  port(
28
    clk                 : in  std_logic;
29
    clk90               : in  std_logic;
30
    reset90             : in  std_logic;
31
    wdf_data            : in  std_logic_vector((DATA_WIDTH*2 - 1) downto 0);
32
    mask_data           : in  std_logic_vector((DATA_MASK_WIDTH*2 - 1) downto 0);
33
    dummy_write_pattern : in  std_logic;
34
    ctrl_wren           : in  std_logic;
35
    ctrl_dqs_rst        : in  std_logic;
36
    ctrl_dqs_en         : in  std_logic;
37
    dqs_rst             : out std_logic;
38
    dqs_en              : out std_logic;
39
    wr_en               : out std_logic;
40
    wr_data_rise        : out std_logic_vector((DATA_WIDTH - 1) downto 0);
41
    wr_data_fall        : out std_logic_vector((DATA_WIDTH - 1) downto 0);
42
    mask_data_rise      : out std_logic_vector((DATA_MASK_WIDTH - 1) downto 0);
43
    mask_data_fall      : out std_logic_vector((DATA_MASK_WIDTH - 1) downto 0)
44
    );
45
end MIG_data_write_0;
46
 
47
architecture arch of MIG_data_write_0 is
48
 
49
  signal wr_en_clk270_r1         : std_logic;
50
  signal wr_en_clk90_r3          : std_logic;
51
  signal dqs_rst_r1              : std_logic;
52
  signal dqs_en_r1               : std_logic;
53
  signal dqs_en_r2               : std_logic;
54
  signal dummy_flag              : std_logic;
55
  signal dummy_rise_pattern      : std_logic_vector((DATA_WIDTH - 1) downto 0);
56
  signal dummy_fall_pattern      : std_logic_vector((DATA_WIDTH - 1) downto 0);
57
  signal dummy_write_pattern_270 : std_logic;
58
  signal dummy_write_pattern_90  : std_logic;
59
  signal dummy_flag1             : std_logic;
60
 
61
  signal patA    : std_logic_vector(143 downto 0);
62
  signal pat5    : std_logic_vector(143 downto 0);
63
  signal pat9    : std_logic_vector(143 downto 0);
64
  signal pat6    : std_logic_vector(143 downto 0);
65
  signal rst90_r : std_logic;
66
begin
67
 
68
  dqs_rst <= dqs_rst_r1;
69
  dqs_en  <= dqs_en_r2;
70
  wr_en   <= wr_en_clk90_r3;
71
 
72
  patA <= X"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
73
  pat5 <= X"555555555555555555555555555555555555";
74
  pat9 <= X"999999999999999999999999999999999999";
75
  pat6 <= X"666666666666666666666666666666666666";
76
 
77
  process(clk90)
78
  begin
79
    if(clk90'event and clk90 = '1') then
80
      rst90_r <= reset90;
81
    end if;
82
  end process;
83
 
84
  process(clk90)
85
  begin
86
    if(clk90'event and clk90 = '0') then
87
        wr_en_clk270_r1 <= ctrl_wren;
88
        dqs_rst_r1      <= ctrl_dqs_rst;
89
        dqs_en_r1       <= not ctrl_dqs_en;
90
    end if;
91
  end process;
92
 
93
 
94
  process(clk)
95
  begin
96
    if(clk'event and clk = '0') then
97
        dqs_en_r2 <= dqs_en_r1;
98
    end if;
99
  end process;
100
 
101
  process(clk90)
102
  begin
103
    if(clk90'event and clk90 = '1') then
104
        wr_en_clk90_r3 <= wr_en_clk270_r1;
105
    end if;
106
  end process;
107
 
108
  process(clk90)
109
  begin
110
    if(clk90'event and clk90 = '0') then
111
        dummy_write_pattern_270 <= dummy_write_pattern;
112
    end if;
113
  end process;
114
 
115
  process(clk90)
116
  begin
117
    if(clk90'event and clk90 = '1') then
118
        dummy_write_pattern_90 <= dummy_write_pattern_270;
119
    end if;
120
  end process;
121
 
122
  process(clk90)
123
  begin
124
   if(clk90'event and clk90 = '1') then
125
     if(rst90_r = '1') then
126
        dummy_flag <= '0';
127
     elsif(dummy_write_pattern_90 = '1') then
128
        if(dummy_flag = '1') then
129
                dummy_rise_pattern <= patA((DATA_WIDTH - 1) downto 0);
130
        else
131
                dummy_rise_pattern <= pat9((DATA_WIDTH - 1) downto 0);
132
        end if;
133
        dummy_flag <= not dummy_flag;
134
     end if;
135
   end if;
136
  end process;
137
 
138
  process(clk90)
139
  begin
140
   if(clk90'event and clk90 = '1') then
141
     if(rst90_r = '1') then
142
        dummy_flag1 <= '0';
143
     elsif(dummy_write_pattern_90 = '1') then
144
        if(dummy_flag1 = '1') then
145
                dummy_fall_pattern <= pat5((DATA_WIDTH - 1) downto 0);
146
        else
147
                dummy_fall_pattern <= pat6((DATA_WIDTH - 1) downto 0);
148
        end if;
149
        dummy_flag1 <= not dummy_flag1;
150
     end if;
151
   end if;
152
  end process;
153
 
154
 
155
  wr_data_rise <= dummy_rise_pattern when (dummy_write_pattern_90 = '1')
156
                   else wdf_data((DATA_WIDTH*2 - 1) downto data_width);
157
  wr_data_fall <= dummy_fall_pattern when (dummy_write_pattern_90 = '1')
158
                   else wdf_data((DATA_WIDTH - 1) downto 0);
159
 
160
  mask_data_rise <= (others => '0') when (dummy_write_pattern_90 = '1' or
161
                                          wr_en_clk90_r3 = '0') else
162
                    mask_data((DATA_MASK_WIDTH*2 - 1) downto data_mask_width);
163
  mask_data_fall <= (others => '0') when (dummy_write_pattern_90 = '1' or
164
                                          wr_en_clk90_r3 = '0') else
165
                    mask_data((DATA_MASK_WIDTH - 1) downto 0);
166
 
167
 
168
end arch;

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.