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

Subversion Repositories ddr2_sdram

[/] [ddr2_sdram/] [trunk/] [DDR2_liesmich.txt] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 john_fpga
==============================================
2
File :          DDR2_liesmich.txt
3
Projekt :       Prj_12_DDR2
4
Zweck :         DDR2-SDRAM auf dem Spartan-3A Board
5
DDR2-RAM :      MT47H32M16 (64 MByte)
6
Datum:          19.08.2011
7
Version :       7.0
8
Plattform :     XILINX Spartan-3A
9
FPGA :          XC3S700A-FGG484
10
Sprache :       VHDL
11
ISE :           ISE-Design-Suite V:13.1
12
IP-Core :       MIG V:3.6.1
13
Autor :         UB
14
Mail :          Becker_U(at)gmx.de
15
==============================================
16
 
17
 
18
 
19
Module :
20
==================
21
 
22
   ###############         #########################    ################
23
   #             #         #                       #    #              #
24
   #  DDR2-RAM : #---------#  TOP_Modul_VHDL       #----# Buttons_VHDL #
25
   #  512 MBit   #         #                       #    #              #
26
   #             #         #                       #    ################
27
   ###############         #                       #
28
                           #                       #    ################
29
                           #                       #    #              #
30
                           #                       #----# Clock_VHDL   #
31
                           #                       #    #              #
32
                           #                       #    ################
33
                           #                       #
34
   ###############         #                       #    #####################    ###################
35
   #             #         #                       #    #                   #    #                 #
36
   #  Eingabe :  #         #                       #    # DDR2_Control_VHDL #----# DDR2_READ_VHDL  #
37
   #  4 Buttons  #---------#                       #    #                   #    #                 #
38
   #  4 Schalter #         #                       #----#                   #    ###################
39
   #             #         #                       #    #                   #
40
   ###############         #                       #    #                   #    ###################
41
                           #                       #    #                   #    #                 #
42
   ###################     #                       #    #                   #----# DDR2_Write_VHDL #
43
   #                 #     #                       #    #                   #    #                 #
44
   #  Ausgabe :      #-----#                       #    #                   #    ###################
45
   #  8 LEDs (Data)  #     #                       #    #####################
46
   #  1 LED (Status) #     #                       #
47
   ###################     #                       #    #######################
48
                           #                       #----#                     #
49
   ###############         #                       #    # DDR2_RAM_CORE.vhd   #
50
   #  Clock :    #---------#                       #    # MIG 3.6.1           #
51
   #  133 MHz    #         #                       #    # (27 Dateien)        #
52
   #             #         #                       #    # + UCF-File          #
53
   ###############         #########################    #######################
54
 
55
 
56
 
57
Zweck :
58
========
59
 
60
> Dieses Projekt ist ein Beispiel wie ein DDR2-SDRAM auf einem Xilinx FPGA Board
61
  eingebunden wird
62
 
63
 
64
 
65
Hinweise zur DDR2-RAM-Einbindung :
66
===================================
67
 
68
> das ganze Projekt basiert auf der Einbindung der vom MIG
69
  generierten Files für ein DDR2-SDRAM (MIG 3.6.1)
70
 
71
> Hinweis zu den Einstellungen vom MIG :
72
        - Typ = DDR2-SDRAM
73
        - Frq = 133MHz
74
        - Write Pipe Stages = 4
75
        - Memory Part = MT47H32M16XX-3 (für das Spartan-3A Board)
76
        - Data Width = 16
77
        - Data-Mask = Ja
78
        - SystemClock = Single-Ended
79
        - Signale auf : Bank3 (komplett) , Bank2 (V12)
80
        - Bank2 = System-Clock / Bank3 = Adrees-Control+Data+System-Control
81
        - sonst alles auf "Default"
82
 
83
> Hinweise zum DDR2_RAM_CORE :
84
 
85
        - es wurden nur die VHDL-Files
86
          vom Ordner "User_Design/RTL" benutzt.
87
        - alle anderen vom MIG generierten Files
88
          sind für das Projekt nicht notwendig
89
 
90
> Hinweis zum UCF-File für das DDR2-RAM :
91
 
92
        - ohne die Richtigen Settings im UCF-File,
93
          kommt es zu Timing problemen beim lesen oder
94
          schreiben
95
        - das vom MIG generierte UCF muss auf die
96
          Pinbelegung vom Spartan-3A Board angepasst
97
          werden
98
        - aus dem Grund habe ich das UCF-File
99
          aus dem Xilinx-Example für Spartan-3A Boards
100
          benutzt und für das Projekt angepasst
101
          das DDR2-Example bekommt man durch einen Link
102
          vom MIG -> "Xilinx Reference Boards" unter
103
          "http://www.xilinx.com/products/boards/s3astarter/reference_designs.htm"
104
          der Name ist "DDR2 MIG Reference Design"
105
 
106
 
107
Beschreibung der Funktion :
108
============================
109
 
110
> der Schalter-0 (SW0) dient als Reset-Schalter (High = Reset)
111
 
112
> das "TOP_Modul" routet alle Signale zwischen den Modulen
113
 
114
> die "Buttons_VHDL" dient nur zum entprellen der Tasten und zum erzeugen
115
  eines "On-Click-Events" damit die Read/Write-Funktionen nur
116
  einmal gestartet werden
117
 
118
> das "DDR2_Control" enthaellt eine State-Machine mit folgenden Funktionen :
119
 
120
  1. Initialisieren vom DDR2-RAM
121
  2. Beschreiben des DDR2-RAM mit 16 Datenwerten (mit je 64Bit breite)
122
  3. Auslesen des ersten Datenwertes
123
  4. Warten auf Tasteneingaben
124
 
125
  5a. Bei Taste 1 (North) -> erhoehen des Adresszeigers (ROW) um 1
126
  5b. Bei Taste 2 (South) -> veringern des Adresszeigers (ROW) um 1
127
  5c. Bei Taste 3 (West)  -> schreiben eines einzelnen (fixen) Datenwertes in die aktuelle Adresse
128
  5d. Bei Taste 4 (East)  -> lesen eines einzelnen Datenwertes aus der aktuellen Adresse
129
 
130
> das "DDR2_Control" uebernimmt auch die Aufbereitung fuer die Anzeige :
131
 
132
  - SW1 bis SW3 dient zum auswählen eines der 8 Bytewerten des 64Bit breiten Datenwortes
133
 
134
        SW3=0 + SW2=0 + SW1=0 -> Anzeige von Datenbits (D7...D0)
135
        SW3=0 + SW2=0 + SW1=1 -> Anzeige von Datenbits (D15...D8)
136
        SW3=0 + SW2=1 + SW1=0 -> Anzeige von Datenbits (D23...D16)
137
        SW3=0 + SW2=1 + SW1=1 -> Anzeige von Datenbits (D31...D24)
138
        SW3=1 + SW2=0 + SW1=0 -> Anzeige von Datenbits (D39...D32)
139
        SW3=1 + SW2=0 + SW1=1 -> Anzeige von Datenbits (D47...D40)
140
        SW3=1 + SW2=1 + SW1=0 -> Anzeige von Datenbits (D55...D48)
141
        SW3=1 + SW2=1 + SW1=1 -> Anzeige von Datenbits (D63...D56)
142
 
143
        das ausgewählte Byte wird an den 8 LEDs angezeigt
144
 
145
> das "DDR2_Read" enthaellt eine State-Machine um ein Datenwort (64Bit)
146
  aus dem RAM zu lesen
147
 
148
> das "DDR2_Write" enthaellt eine State-Machine um ein Datenwort (64Bit)
149
  ins RAM zu schreiben
150
 
151
 
152
Ram Inhalt nach dem Initialisieren :
153
=====================================
154
 
155
> nach der Init-Funktion stehen 16 Datenwerte (je 64Bit) im RAM
156
 
157
ADR 0 = 0123456789ABCDEF
158
ADR 1 = 123456789ABCDEF0
159
ADR 2 = 23456789ABCDEF01
160
ADR 3 = 3456789ABCDEF012
161
ADR 4 = 456789ABCDEF0123
162
ADR 5 = 56789ABCDEF01234
163
ADR 6 bis ADR 15 = 639CC6398C7318E7
164
 
165
 
166
Ablauf :
167
=========
168
 
169
 
170
> nach dem Init und Schreiben von 16 Werten wird die Adr 0 ausgelesen
171
  und an den LEDs ausgegeben
172
 
173
> Mit dem Button North und South kann der ADR-Counter verändert werden
174
 
175
> Button EAST liest das RAM an der aktuellen Adresse aus
176
 
177
> Button WEST schreibt den 64Bit-Wert "31CE629DC43B8877" in die aktuelle Adresse
178
 
179
 
180
 
181
Infos zum RAM :
182
================
183
 
184
> das DDR2-RAM auf dem Spartan-3A Board hat eine groesse von 512MBit (64MByte)
185
 
186
> das RAM ist in 4 Bloecke (BANKs) unterteilt,
187
  jeder Block ist in 8192 Reihen (ROWs) und 1024 Zeilen (COLs) aufgeteilt
188
  eine einzelne Zelle ist 16bit breit
189
 
190
  das Ergibt 4x8192x1024x16bit = 512MBit
191
 
192
> fuer die BANK_Adresse werden 2Bit benoetigt
193
  fuer die ROW_Adresse werden 13Bit benoetigt
194
  fuer die COL_Adresse werden 10Bit benoetigt
195
 
196
> der Adresszeiger fuer eine einzelne Zelle setzt sich so zusammen :
197
 
198
  ADR = ROW & COL & BANK
199
 
200
  damit ist der Adresszeiger 13+10+2 = 25bit breit
201
 
202
 
203
Einschraenkungen in dem Projekt :
204
==================================
205
 
206
> VORSICHT !! der BURST-MODE ist fest auf "4" eingestellt,
207
  damit werden bei jedem Write Zyklus
208
  4 Zellen (also 4x16Bit=64Bit) beschrieben !!
209
 
210
> damit keine Daten überschrieben werden, muss
211
  der COL-Pointer immer in 4er Schritten erhöht/verringert werden
212
  (0,4,8,12 usw)
213
 
214
 
215
Geschwindigkeit :
216
==================
217
 
218
> bei einer Speedmessung (per VHDL-Code) wurde
219
  die Anzahl der notwendigen Clockzyklen ermittelt
220
 
221
> Read (von einem 64Bit Wert) = 22 Clockzyklen
222
  (bei 133MHz -> 165 ns => 46 MByte/sec)
223
 
224
> Write (von einem 64Bit Wert) = 25 Clockzyklen
225
  (bei 133MHz -> 188 ns => 40 MByte/sec)
226
 
227
 
228
Hinweise :
229
===========
230
 
231
> das Projekt ist von "privat" und nicht fuer
232
  kommerzielle Zwecke gedacht
233
 
234
> das Projekt ist nicht frei von Fehlern
235
  und ich kann daher keine Garantie
236
  fuer eventuell auftretende Schaeden geben
237
 
238
> das Projekt ist frei kopier- und verwendbar
239
 
240
> bei gefundenen Fehlern bitte eine EMail an mich
241
 
242
 
243
 
244
08.08.11 / UB
245
 

powered by: WebSVN 2.1.0

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