Digilent Nexys
FPGA-Board, verfügbar mit Xilinx Spartan 3-200, -400 und -1000, Speedgrade 4.
Dokumentation
RAM
Das RAM ist ein MT45W8MW16 PSRAM (pseudo-statisches RAM) von Micron. Im einfachsten Fall kann es wie ein (mit 70 ns leider ziemlich langsames) SRAM angesteuert werden (Beispiel unter T51-Core). Schneller geht es mit dem synchronen Burst-Mode, der auch nicht besonders schwierig zu implementieren sein sollte.
Beispieldesigns
- T51-Core - 8051-kompatibler Prozessor mit BASIC-Interpreter, einfaches Beispielprojekt für das Nexys-Board
- Audio-DSP mit Spartan 3-FPGA
Cypress FX2-Firmware
Die USB-Verbindung wird durch einen Cypress FX2-Mikrocontroller realisiert.
Die vorinstallierte Firmware ermöglicht rudimentäre Verbindungen zu der auf der Digilent Webseite bereitgestellten Adept-Software. Das ebenfalls bereitgestellte "dpimref.vhd"-Modul kann für einen Datentransfer zwischen PC und FPGA benutzt werden. Ein Mapping der dort verwendeten Signale auf die USB-Signale innerhalb des Schematics ist dabei folgendermaßen (funktioniert so auch für das Basys Board und vermutlich allen anderen FX2 basierten Digilent Produkten):
ASTRB <-> U-FLAGA
DSTRB <-> U-FLAGB
WAIT <-> U-SLRD
WRITE <-> U-FLAGC
DATA(7:0) <-> U-FD7 bis U-FD0
FX2-Firmware Hacking
Wie man die Firmware durch seine eigene ersetzen kann wird hier erklärt: http://www.hackdaworld.org/cgi-bin/awki.cgi/NexysFPGA
usb_jtag FX2-Firmware
Es ist auch möglich, die Firmware des Projektes "usb_jtag" von [1] zu benutzen, um dann mittels UrJtag auf den FPGA zuzugreifen. Man kann direkt die FX2-Firmware und die JTAG-Software installieren. Eine Anleitung dazu findet man unter [2].
Ist die FX2-Firmware geladen, sollte der FX2-Mikrocontroller sich mittels "lsusb" nun als "VOTI" melden:
# lsusb
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 009: ID 16c0:06ad VOTI
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
JTAG-Software
Nimmt man nun ein aktuelles Release von URJtag (hier: svn Version 1356), kann man nach dem "./configure; make && make install" sofort loslegen (vgl. [3]).
Man muß lediglich beachten, daß man die richtigen BSDL-Dateien aus dem Xilinx-Ordner in das Verzeichnis /usr/local/share/urjtag/bsdl/ kopiert (die BSDL-Dateien heißen in der Xilinx-Installation "*.bsd"), damit URJtag beim "detect" die Chips richtig erkennt.
mobil11:~/.svn/fpga/Nexys_demo_simple# jtag
UrJTAG 0.8 #1356
Copyright (C) 2002, 2003 ETC s.r.o.
Copyright (C) 2007, 2008 Kolja Waschk and the respective authors
UrJTAG is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
There is absolutely no warranty for UrJTAG.
WARNING: UrJTAG may damage your hardware!
Type "quit" to exit, "help" for help.
jtag> bsdl path /usr/local/share/urjtag/bsdl
jtag> cable UsbBlaster ftdi 16c0:06ad
Connected to libftdi driver.
jtag> detect
IR length: 14
Chain length: 2
Device Id: 11110101000001000110000010010011 (0x00000000F5046093)
Filename: /usr/local/share/urjtag/bsdl/xcf04s.bsd
Device Id: 00010001010000101000000010010011 (0x0000000011428093)
Filename: /usr/local/share/urjtag/bsdl/xc3s1000l.bsd
jtag> print chain
No. Manufacturer Part Stepping Instruction Register
-------------------------------------------------------------------------------------------------------------------
0 XCF04S BYPASS BYPASS
1 XC3S1000L_BARE BYPASS BYPASS
jtag> part 1
jtag> svf Nexysdemo.svf
Warning: USB-Blaster frequency is fixed to 12000000 Hz
Warning svf: command TIR not implemented
Warning svf: command TDR not implemented
Warning svf: command TIR not implemented
Warning svf: command TDR not implemented
Warning svf: command HIR not implemented
Warning svf: command HDR not implemented
Warning svf: command TIR not implemented
Warning svf: command TDR not implemented
Error svf: SIR command length inconsistent.
in input file between line 6623 col 1 and line 6623 col 33
Error occured for SVF command SIR.
jtag> quit
mobil11:~/.svn/fpga/Nexys_demo_simple#
Die usb_jtag-Firmware wird in URJtag als "Altera USB-Blaster" erkannt. Wichtig beim "cable"-Kommando ist die Angabe der USB-ID "16c0:06ad".
Erzeugen der SVF-Datei in Impact
Beim Erzeugen der SVF-Datei in Impact muß man darauf achten, daß alle Geräte des JTAG-Chains des Nexys-Boards in der Datei enthalten sind. Mit Hilfe folgender Datei "impact.cmd" lässt sich dieser Schritt auf der Kommandozeile automatisieren:
setMode -bs
setCable -port svf -file Nexysdemo.svf
addDevice -p 1 -file /usr/local/share/jtag/bsl/xcf04s.bsd
addDevice -p 2 -file Nexysdemo.bit
program -p 2
closeCable
quit
Jetzt kann man mittels "impact -batch impact.cmd" den Prozeß des SVF-Datei-Erzeugens automatisieren:
$ impact -batch impact.cmd
Release 9.2.01i - iMPACT J.37
Copyright (c) 1995-2007 Xilinx, Inc. All rights reserved.
Preference Table
Name Setting
StartupClock Auto_Correction
AutoSignature False
KeepSVF False
ConcurrentMode False
UseHighz False
ConfigOnFailure Stop
UserLevel Novice
MessageLevel Detailed
svfUseTime false
SpiByteSwap Auto_Correction
Reusing 6400C001 key.
Reusing E800C001 key.
INFO:iMPACT:501 - '1': Added Device UNKNOWN successfully.
----------------------------------------------------------------------
INFO:iMPACT:1777 -
Reading /usr/local/share/urjtag/bsdl/xcf04s.bsd...
INFO:iMPACT:1777 -
Reading /opt/xilinx-webpack/xcf/data/xcf04s.bsd...
INFO:iMPACT:501 - '1': Added Device XCF04S successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------
INFO:iMPACT:1777 -
Reading /usr/local/share/urjtag/bsdl/xcf04s.bsd...
----------------------------------------------------------------------
'2': Loading file 'Nexysdemo.bit' ...
done.
INFO:iMPACT:1777 -
Reading /opt/xilinx-webpack/spartan3/data/xc3s1000.bsd...
INFO:iMPACT:501 - '2': Added Device xc3s1000 successfully.
----------------------------------------------------------------------
----------------------------------------------------------------------
'2': Programming device...
done.
INFO:iMPACT:579 - '2': Completed downloading bit file to device.
INFO:iMPACT - '2': Checking done pin....done.
'2': Programmed successfully.
Elapsed time = 1 sec.
----------------------------------------------------------------------
----------------------------------------------------------------------