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

Subversion Repositories ddr2_sdram

[/] [ddr2_sdram/] [trunk/] [DDR2_liesmich.txt] - Rev 3

Go to most recent revision | Compare with Previous | Blame | View Log

==============================================
File :          DDR2_liesmich.txt
Projekt :       Prj_12_DDR2
Zweck :         DDR2-SDRAM auf dem Spartan-3A Board
DDR2-RAM :      MT47H32M16 (64 MByte)
Datum:          19.08.2011
Version :       7.0
Plattform :     XILINX Spartan-3A
FPGA :          XC3S700A-FGG484
Sprache :       VHDL
ISE :           ISE-Design-Suite V:13.1
IP-Core :       MIG V:3.6.1
Autor :         UB
Mail :          Becker_U(at)gmx.de
==============================================



Module :
==================

   ###############         #########################    ################
   #             #         #                       #    #              #
   #  DDR2-RAM : #---------#  TOP_Modul_VHDL       #----# Buttons_VHDL #
   #  512 MBit   #         #                       #    #              #
   #             #         #                       #    ################
   ###############         #                       #
                           #                       #    ################
                           #                       #    #              #
                           #                       #----# Clock_VHDL   #
                           #                       #    #              #
                           #                       #    ################
                           #                       #
   ###############         #                       #    #####################    ###################
   #             #         #                       #    #                   #    #                 #
   #  Eingabe :  #         #                       #    # DDR2_Control_VHDL #----# DDR2_READ_VHDL  #
   #  4 Buttons  #---------#                       #    #                   #    #                 #
   #  4 Schalter #         #                       #----#                   #    ###################
   #             #         #                       #    #                   #
   ###############         #                       #    #                   #    ###################
                           #                       #    #                   #    #                 #
   ###################     #                       #    #                   #----# DDR2_Write_VHDL #
   #                 #     #                       #    #                   #    #                 #
   #  Ausgabe :      #-----#                       #    #                   #    ###################
   #  8 LEDs (Data)  #     #                       #    #####################
   #  1 LED (Status) #     #                       #
   ###################     #                       #    ####################### 
                           #                       #----#                     #
   ###############         #                       #    # DDR2_RAM_CORE.vhd   #
   #  Clock :    #---------#                       #    # MIG 3.6.1           # 
   #  133 MHz    #         #                       #    # (27 Dateien)        #
   #             #         #                       #    # + UCF-File          #
   ###############         #########################    #######################



Zweck :
========

> Dieses Projekt ist ein Beispiel wie ein DDR2-SDRAM auf einem Xilinx FPGA Board
  eingebunden wird



Hinweise zur DDR2-RAM-Einbindung :
===================================

> das ganze Projekt basiert auf der Einbindung der vom MIG

> Hinweis zu den Einstellungen vom MIG :
        - Typ = DDR2-SDRAM
        - Frq = 133MHz
        - Write Pipe Stages = 4
        - Data Width = 16
        - Data-Mask = Ja
        - SystemClock = Single-Ended
        - Signale auf : Bank3 (komplett) , Bank2 (V12)
        - Bank2 = System-Clock / Bank3 = Adrees-Control+Data+System-Control
        - sonst alles auf "Default"

> Hinweise zum DDR2_RAM_CORE :

        - es wurden nur die VHDL-Files
          vom Ordner "User_Design/RTL" benutzt.
        - alle anderen vom MIG generierten Files


        - ohne die Richtigen Settings im UCF-File,      
          kommt es zu Timing problemen beim lesen oder
          schreiben
        - das vom MIG generierte UCF muss auf die
          Pinbelegung vom Spartan-3A Board angepasst
          werden
        - aus dem Grund habe ich das UCF-File
          das DDR2-Example bekommt man durch einen Link
          vom MIG -> "Xilinx Reference Boards" unter
          "http://www.xilinx.com/products/boards/s3astarter/reference_designs.htm"
          der Name ist "DDR2 MIG Reference Design"
           

Beschreibung der Funktion :
============================

> der Schalter-0 (SW0) dient als Reset-Schalter (High = Reset)

> das "TOP_Modul" routet alle Signale zwischen den Modulen 

> die "Buttons_VHDL" dient nur zum entprellen der Tasten und zum erzeugen
  eines "On-Click-Events" damit die Read/Write-Funktionen nur
  einmal gestartet werden

> das "DDR2_Control" enthaellt eine State-Machine mit folgenden Funktionen :

  1. Initialisieren vom DDR2-RAM
  2. Beschreiben des DDR2-RAM mit 16 Datenwerten (mit je 64Bit breite)
  3. Auslesen des ersten Datenwertes
  4. Warten auf Tasteneingaben

  5a. Bei Taste 1 (North) -> erhoehen des Adresszeigers (ROW) um 1
  5b. Bei Taste 2 (South) -> veringern des Adresszeigers (ROW) um 1
  5c. Bei Taste 3 (West)  -> schreiben eines einzelnen (fixen) Datenwertes in die aktuelle Adresse
  5d. Bei Taste 4 (East)  -> lesen eines einzelnen Datenwertes aus der aktuellen Adresse

> das "DDR2_Control" uebernimmt auch die Aufbereitung fuer die Anzeige :


        SW3=0 + SW2=0 + SW1=0 -> Anzeige von Datenbits (D7...D0)
        SW3=0 + SW2=0 + SW1=1 -> Anzeige von Datenbits (D15...D8)
        SW3=0 + SW2=1 + SW1=0 -> Anzeige von Datenbits (D23...D16)
        SW3=0 + SW2=1 + SW1=1 -> Anzeige von Datenbits (D31...D24)
        SW3=1 + SW2=0 + SW1=0 -> Anzeige von Datenbits (D39...D32)
        SW3=1 + SW2=0 + SW1=1 -> Anzeige von Datenbits (D47...D40)
        SW3=1 + SW2=1 + SW1=0 -> Anzeige von Datenbits (D55...D48)
        SW3=1 + SW2=1 + SW1=1 -> Anzeige von Datenbits (D63...D56)


> das "DDR2_Read" enthaellt eine State-Machine um ein Datenwort (64Bit)
  aus dem RAM zu lesen

> das "DDR2_Write" enthaellt eine State-Machine um ein Datenwort (64Bit)
  ins RAM zu schreiben


Ram Inhalt nach dem Initialisieren :
=====================================

> nach der Init-Funktion stehen 16 Datenwerte (je 64Bit) im RAM

ADR 0 = 0123456789ABCDEF
ADR 1 = 123456789ABCDEF0
ADR 2 = 23456789ABCDEF01
ADR 3 = 3456789ABCDEF012
ADR 4 = 456789ABCDEF0123
ADR 5 = 56789ABCDEF01234
ADR 6 bis ADR 15 = 639CC6398C7318E7


Ablauf :
=========


> nach dem Init und Schreiben von 16 Werten wird die Adr 0 ausgelesen
  und an den LEDs ausgegeben


> Button EAST liest das RAM an der aktuellen Adresse aus

> Button WEST schreibt den 64Bit-Wert "31CE629DC43B8877" in die aktuelle Adresse



Infos zum RAM :
================

> das DDR2-RAM auf dem Spartan-3A Board hat eine groesse von 512MBit (64MByte)

> das RAM ist in 4 Bloecke (BANKs) unterteilt,
  jeder Block ist in 8192 Reihen (ROWs) und 1024 Zeilen (COLs) aufgeteilt
  eine einzelne Zelle ist 16bit breit

  das Ergibt 4x8192x1024x16bit = 512MBit

> fuer die BANK_Adresse werden 2Bit benoetigt
  fuer die ROW_Adresse werden 13Bit benoetigt
  fuer die COL_Adresse werden 10Bit benoetigt

> der Adresszeiger fuer eine einzelne Zelle setzt sich so zusammen :
  
  ADR = ROW & COL & BANK

  damit ist der Adresszeiger 13+10+2 = 25bit breit


Einschraenkungen in dem Projekt :
==================================

> VORSICHT !! der BURST-MODE ist fest auf "4" eingestellt,
  damit werden bei jedem Write Zyklus
  4 Zellen (also 4x16Bit=64Bit) beschrieben !!

  (0,4,8,12 usw)


Geschwindigkeit :
==================

> bei einer Speedmessung (per VHDL-Code) wurde
  die Anzahl der notwendigen Clockzyklen ermittelt

> Read (von einem 64Bit Wert) = 22 Clockzyklen
  (bei 133MHz -> 165 ns => 46 MByte/sec)

> Write (von einem 64Bit Wert) = 25 Clockzyklen
  (bei 133MHz -> 188 ns => 40 MByte/sec)


Hinweise :
===========

> das Projekt ist von "privat" und nicht fuer
  kommerzielle Zwecke gedacht

> das Projekt ist nicht frei von Fehlern
  und ich kann daher keine Garantie
  fuer eventuell auftretende Schaeden geben

> das Projekt ist frei kopier- und verwendbar

> bei gefundenen Fehlern bitte eine EMail an mich



08.08.11 / UB

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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