1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
4 | use IEEE.NUMERIC_STD.ALL;
|
5 | ------------------------------------------------------------------------------------------------------------------------------------------------
|
6 | entity Writing is
|
7 | Port(
|
8 | --SDRAM
|
9 | signal sclk : in std_logic;
|
10 | signal A : out std_logic_vector(12 downto 0);
|
11 | signal BA : out std_logic_vector(1 downto 0);
|
12 | signal CS : out std_logic:='0';
|
13 | signal RAS : out std_logic:='1';
|
14 | signal CAS : out std_logic:='1';
|
15 | signal WE : out std_logic:='1';
|
16 | signal CKE : out std_logic:='1';
|
17 | signal DQ : out std_logic_vector(15 downto 0);
|
18 | signal LDQM : out std_logic:='0';
|
19 | signal UDQM : out std_logic:='0';
|
20 | --Control Signals
|
21 | Signal command_write : in std_logic;
|
22 | Signal busy_write : out std_logic:='0';
|
23 | signal row_write : in std_logic_vector(12 downto 0);
|
24 | signal clmn_write : in std_logic_vector(8 downto 0);
|
25 | signal Bank_write : in std_logic_vector(1 downto 0);
|
26 | --Data Signal
|
27 | signal Data_write : in std_logic_vector(15 downto 0)
|
28 | );
|
29 | end Writing;
|
30 | ------------------------------------------------------------------------------------------------------------------------------------------------
|
31 | architecture Behavioral of Writing is
|
32 | ------------------------------------------------------------------------------------------------------------------------------------------------
|
33 | Signal Write_lvl :integer:=0; --Write Level(Steps)
|
34 | Signal busy_flag :std_logic:='0';
|
35 |
|
36 | constant Final_W_lvl:integer:=8; --<<--<< Final Write Level
|
37 | ------------------------------------------------------------------------------------------------------------------------------------------------
|
38 | begin
|
39 | ------------------------------------------------------------------------------------------------------------------------------------------------
|
40 | --busy_write<='1' when busy_flag='1' else
|
41 | -- '0';
|
42 | busy_write<= busy_flag;
|
43 | --------------------------------------------
|
44 | Process
|
45 | begin
|
46 | wait until sclk='1';
|
47 | if command_write='1' then
|
48 | Busy_flag<= '1';
|
49 | elsif write_lvl>=1 and write_lvl<=Final_W_lvl then
|
50 | Busy_flag<= '1';
|
51 | else
|
52 | Busy_flag<= '0';
|
53 | end if;
|
54 | end Process;
|
55 | --------------------------------------------
|
56 | --Write
|
57 | Process
|
58 | begin
|
59 | wait until sclk='1';
|
60 | if Busy_flag='1' then
|
61 | if write_lvl<=Final_W_lvl then
|
62 | case write_lvl is
|
63 | when 0 =>
|
64 | --Activate --Need 3 Clock (with Present Clock)--CKE Should Be High on Previous Clock
|
65 | CKE <= '1'; --This command of CKE is for Next Clock.
|
66 | CS <= '0'; --t_RCD Needs for Activating Bank and Row.
|
67 | RAS <= '0';
|
68 | CAS <= '1';
|
69 | WE <= '1';
|
70 | A <= row_write; --ROW ADDRESS
|
71 | BA <= BAnk_write; --BANK ADDRESS
|
72 |
|
73 | when 2 Downto 1 =>
|
74 | --Waiting
|
75 | CKE<='1';
|
76 | --NOP Command
|
77 | CS <='0';
|
78 | RAS <='1';
|
79 | CAS <='1';
|
80 | WE <='1';
|
81 |
|
82 | when 3 =>
|
83 | --Writing with Autoprecharge
|
84 | --Writing One Byte Concurrent with Write Command in this Cycle.
|
85 | CKE<= '1';
|
86 | LDQM<='0';
|
87 | UDQM<='0';
|
88 | CS <= '0';
|
89 | RAS<= '1';
|
90 | CAS<= '0';
|
91 | WE <= '0';
|
92 | A(8 Downto 0)<= clmn_write; --COLUMN ADDRESS
|
93 | A(10)<= '1'; --AUTOPRECHARGE ENABLING
|
94 | BA <= BAnk_write; --BANK ADDRESS
|
95 | DQ <= Data_write;
|
96 |
|
97 | when 4 =>
|
98 | --waiting to insure t_DPL (Data-In to Precharge Command Latency)
|
99 | CKE<='1';
|
100 | --NOP Command
|
101 | CS <='0';
|
102 | RAS <='1';
|
103 | CAS <='1';
|
104 | WE <='1';
|
105 |
|
106 | when 7 Downto 5 =>
|
107 | --Waiting for Precharge of AutoPrecharge
|
108 | CKE<='1';
|
109 | --NOP Command
|
110 | CS <='0';
|
111 | RAS <='1';
|
112 | CAS <='1';
|
113 | WE <='1';
|
114 |
|
115 | when others =>
|
116 | CKE<='1';
|
117 | --NOP Command
|
118 | CS <='0';
|
119 | RAS <='1';
|
120 | CAS <='1';
|
121 | WE <='1';
|
122 | end case;
|
123 | write_lvl<=write_lvl +1;
|
124 | end if;
|
125 | else
|
126 | write_lvl<=0;
|
127 | end if;
|
128 | end Process;
|
129 | ------------------------------------------------------------------------------------------------------------------------------------------------
|
130 | end Behavioral;
|