<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=88.217.61.223</id>
	<title>Mikrocontroller.net - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.mikrocontroller.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=88.217.61.223"/>
	<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/articles/Spezial:Beitr%C3%A4ge/88.217.61.223"/>
	<updated>2026-04-10T19:45:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Digilent_Nexys&amp;diff=31857</id>
		<title>Digilent Nexys</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Digilent_Nexys&amp;diff=31857"/>
		<updated>2008-10-15T21:07:42Z</updated>

		<summary type="html">&lt;p&gt;88.217.61.223: /* Erzeugen der SVF-Datei aus der Bit-Datei ii Impact auf der Kommandozeile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA-Board, verfügbar mit Xilinx Spartan 3-200, -400 und -1000, Speedgrade 4.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Nexys-Audio-DSP-Foto-Andreas.jpg|thumb|600px|left|Nexys mit Erweiterungsboard FX2-BB]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dokumentation ==&lt;br /&gt;
* [http://digilentinc.com/Products/Detail.cfm?Nav1=Products&amp;amp;Nav2=Programmable&amp;amp;Prod=NEXYS Webseite]&lt;br /&gt;
* [http://digilentinc.com/Data/Products/NEXYS/Nexys_sch.pdf Schaltplan]&lt;br /&gt;
* [http://digilentinc.com/Data/Products/NEXYS/Nexys_rm.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
== RAM ==&lt;br /&gt;
Das RAM ist ein MT45W8MW16 [[Speicher#PSRAM|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.&lt;br /&gt;
&lt;br /&gt;
* [http://www.micron.com/products/partdetail?part=MT45W8MW16BGX-701%20WT Webseite]&lt;br /&gt;
* [http://download.micron.com/pdf/datasheets/psram/128mb_burst_cr1_5_p26z.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
== Beispieldesigns ==&lt;br /&gt;
* [[T51-Core]] - 8051-kompatibler Prozessor mit BASIC-Interpreter, einfaches Beispielprojekt für das Nexys-Board&lt;br /&gt;
* [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Cypress FX2-Firmware ==&lt;br /&gt;
&lt;br /&gt;
Die USB-Verbindung wird durch einen Cypress FX2-Mikrocontroller realisiert.&lt;br /&gt;
&lt;br /&gt;
Die vorinstallierte Firmware ermöglicht rudimentäre Verbindungen zu der auf der Digilent Webseite bereitgestellten Adept-Software. Das ebenfalls bereitgestellte &amp;quot;dpimref.vhd&amp;quot;-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):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
ASTRB &amp;lt;-&amp;gt; U-FLAGA&lt;br /&gt;
DSTRB &amp;lt;-&amp;gt; U-FLAGB&lt;br /&gt;
WAIT &amp;lt;-&amp;gt; U-SLRD&lt;br /&gt;
WRITE &amp;lt;-&amp;gt; U-FLAGC&lt;br /&gt;
DATA(7:0) &amp;lt;-&amp;gt; U-FD7 bis U-FD0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FX2-Firmware Hacking ===&lt;br /&gt;
&lt;br /&gt;
Wie man die Firmware durch seine eigene ersetzen kann wird hier erklärt:&lt;br /&gt;
http://www.hackdaworld.org/cgi-bin/awki.cgi/NexysFPGA&lt;br /&gt;
&lt;br /&gt;
=== FX2-Firmware von ixo.de ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich, die Firmware des Projektes &amp;quot;usb_jtag&amp;quot; von http://www.ixo.de/ leicht anzupassen, um dann mittels UrJtag auf den FPGA zuzugreifen. Dabei geht man wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Zunächst muß man wie unter http://www.hackdaworld.org/cgi-bin/awki.cgi/NexysFPGA beschrieben, die SDA-Leitung am FX2-Mikrocontroller durchtrennen.&lt;br /&gt;
&lt;br /&gt;
Danach kann man direkt die FX2-Firmware und die JTAG-Software installieren:&lt;br /&gt;
&lt;br /&gt;
==== Firmware ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # wget &amp;quot;http://www.ixo.de/info/usb_jtag/usb_jtag-20080705-1200.zip&amp;quot;&lt;br /&gt;
 # unzip usb_jtag-20080705-1200.zip&lt;br /&gt;
 # cd usb_jtag/device/c51&lt;br /&gt;
 # cat hw_nexys.c # folgende C-Datei aus dem Wiki mit Copy und Paste in den Ordner kopieren:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
usb_jtag/device/c51/hw_nexys.c:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/*-----------------------------------------------------------------------------&lt;br /&gt;
 * Hardware-dependent code for usb_jtag&lt;br /&gt;
 *-----------------------------------------------------------------------------&lt;br /&gt;
 * Copyright (C) 2007 Kolja Waschk, ixo.de&lt;br /&gt;
 *-----------------------------------------------------------------------------&lt;br /&gt;
 * This code is part of usbjtag. usbjtag is free software; you can redistribute&lt;br /&gt;
 * it and/or modify it under the terms of the GNU General Public License as&lt;br /&gt;
 * published by the Free Software Foundation; either version 2 of the License,&lt;br /&gt;
 * or (at your option) any later version. usbjtag is distributed in the hope&lt;br /&gt;
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied&lt;br /&gt;
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.  You should have received a&lt;br /&gt;
 * copy of the GNU General Public License along with this program in the file&lt;br /&gt;
 * COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin&lt;br /&gt;
 * St, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
 *-----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;fx2regs.h&amp;gt;&lt;br /&gt;
#include &amp;quot;hardware.h&amp;quot;&lt;br /&gt;
#include &amp;quot;delay.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
/* JTAG TCK, AS/PS DCLK */&lt;br /&gt;
&lt;br /&gt;
sbit at 0xB4          TCK;&lt;br /&gt;
#define bmTCKOE       bmBIT4&lt;br /&gt;
#define SetTCK(x)     do{TCK=(x);}while(0)&lt;br /&gt;
&lt;br /&gt;
/* JTAG TDI, AS ASDI, PS DATA0 */&lt;br /&gt;
&lt;br /&gt;
sbit at 0xB2          TDI;&lt;br /&gt;
#define bmTDIOE       bmBIT2&lt;br /&gt;
#define SetTDI(x)     do{TDI=(x);}while(0)&lt;br /&gt;
&lt;br /&gt;
/* JTAG TMS, AS/PS nCONFIG */&lt;br /&gt;
sbit at 0xB3          TMS;&lt;br /&gt;
#define bmTMSOE       bmBIT3&lt;br /&gt;
#define SetTMS(x)     do{TMS=(x);}while(0)&lt;br /&gt;
&lt;br /&gt;
/* JTAG TDO, AS/PS CONF_DONE */&lt;br /&gt;
&lt;br /&gt;
sbit at 0xB0          TDO;&lt;br /&gt;
#define bmTDOOE       bmBIT0&lt;br /&gt;
#define GetTDO(x)     TDO&lt;br /&gt;
&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#define bmPROGOUTOE (bmTCKOE|bmTDIOE|bmTMSOE)&lt;br /&gt;
#define bmPROGINOE  (bmTDOOE)&lt;br /&gt;
&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void ProgIO_Poll(void)    {}&lt;br /&gt;
// These aren&#039;t called anywhere in usbjtag.c, but I plan to do so...&lt;br /&gt;
void ProgIO_Enable(void)  {}&lt;br /&gt;
void ProgIO_Disable(void) {}&lt;br /&gt;
void ProgIO_Deinit(void)  {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void ProgIO_Init(void)&lt;br /&gt;
{&lt;br /&gt;
  /* The following code depends on your actual circuit design.&lt;br /&gt;
     Make required changes _before_ you try the code! */&lt;br /&gt;
&lt;br /&gt;
  // set the CPU clock to 48MHz, enable clock output to FPGA&lt;br /&gt;
  CPUCS = bmCLKOE | bmCLKSPD1;&lt;br /&gt;
&lt;br /&gt;
  // Use external clock, use &amp;quot;Slave FIFO&amp;quot; mode for all pins&lt;br /&gt;
  //IFCONFIG = bmIFCFG1 | bmIFCFG0;&lt;br /&gt;
  //IFCONFIG = bmIFCFG0;&lt;br /&gt;
  //IFCONFIG = 0xcb;&lt;br /&gt;
&lt;br /&gt;
  // pin 7 of port d enables fpga power supply&lt;br /&gt;
  OED |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
  IOD |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
  mdelay(500);&lt;br /&gt;
&lt;br /&gt;
  /* p. 180: must be set to 1 */&lt;br /&gt;
  REVCTL=0;//((1&amp;lt;&amp;lt;0)|(1&amp;lt;&amp;lt;1));&lt;br /&gt;
&lt;br /&gt;
  // TDO input, others output&lt;br /&gt;
  OED=(OED&amp;amp;~bmPROGINOE) | bmPROGOUTOE;&lt;br /&gt;
  OED |= bmPROGOUTOE;&lt;br /&gt;
  OED &amp;amp;= ~bmPROGINOE;&lt;br /&gt;
  IOD &amp;amp;= ~(bmPROGOUTOE);&lt;br /&gt;
&lt;br /&gt;
  // pin 5 of port d disables tdi -&amp;gt; tdo forward&lt;br /&gt;
  OED|=(1&amp;lt;&amp;lt;5);&lt;br /&gt;
  IOD|=(1&amp;lt;&amp;lt;5);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ProgIO_Set_State(unsigned char d)&lt;br /&gt;
{&lt;br /&gt;
  /* Set state of output pins:&lt;br /&gt;
   *&lt;br /&gt;
   * d.0 =&amp;gt; TCK&lt;br /&gt;
   * d.1 =&amp;gt; TMS&lt;br /&gt;
   * d.2 =&amp;gt; nCE (only #ifdef HAVE_AS_MODE)&lt;br /&gt;
   * d.3 =&amp;gt; nCS (only #ifdef HAVE_AS_MODE)&lt;br /&gt;
   * d.4 =&amp;gt; TDI&lt;br /&gt;
   * d.6 =&amp;gt; LED / Output Enable&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
  SetTCK((d &amp;amp; bmBIT0) ? 1 : 0);&lt;br /&gt;
  SetTMS((d &amp;amp; bmBIT1) ? 1 : 0);&lt;br /&gt;
  SetTDI((d &amp;amp; bmBIT4) ? 1 : 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned char ProgIO_Set_Get_State(unsigned char d)&lt;br /&gt;
{&lt;br /&gt;
  /* Set state of output pins (s.a.)&lt;br /&gt;
   * then read state of input pins:&lt;br /&gt;
   *&lt;br /&gt;
   * TDO =&amp;gt; d.0&lt;br /&gt;
   * DATAOUT =&amp;gt; d.1 (only #ifdef HAVE_AS_MODE)&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
  ProgIO_Set_State(d);&lt;br /&gt;
  return 2|GetTDO(); /* DATAOUT assumed high, no AS mode */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void ProgIO_ShiftOut(unsigned char c)&lt;br /&gt;
{&lt;br /&gt;
  /* Shift out byte C:&lt;br /&gt;
   *&lt;br /&gt;
   * 8x {&lt;br /&gt;
   *   Output least significant bit on TDI&lt;br /&gt;
   *   Raise TCK&lt;br /&gt;
   *   Shift c right&lt;br /&gt;
   *   Lower TCK&lt;br /&gt;
   * }&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
  (void)c; /* argument passed in DPL */&lt;br /&gt;
&lt;br /&gt;
  _asm&lt;br /&gt;
        MOV  A,DPL&lt;br /&gt;
        ;; Bit0&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit1&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit2&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit3&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit4&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit5&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit6&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit7&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        NOP&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ret&lt;br /&gt;
  _endasm;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
;; For ShiftInOut, the timing is a little more&lt;br /&gt;
;; critical because we have to read _TDO/shift/set _TDI&lt;br /&gt;
;; when _TCK is low. But 20% duty cycle at 48/4/5 MHz&lt;br /&gt;
;; is just like 50% at 6 Mhz, and that&#039;s still acceptable&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
unsigned char ProgIO_ShiftInOut(unsigned char c)&lt;br /&gt;
{&lt;br /&gt;
  /* Shift out byte C, shift in from TDO:&lt;br /&gt;
   *&lt;br /&gt;
   * 8x {&lt;br /&gt;
  *   Read carry from TDO&lt;br /&gt;
   *   Output least significant bit on TDI&lt;br /&gt;
   *   Raise TCK&lt;br /&gt;
   *   Shift c right, append carry (TDO) at left&lt;br /&gt;
   *   Lower TCK&lt;br /&gt;
   * }&lt;br /&gt;
   * Return c.&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
   (void)c; /* argument passed in DPL */&lt;br /&gt;
&lt;br /&gt;
  _asm&lt;br /&gt;
        MOV  A,DPL&lt;br /&gt;
&lt;br /&gt;
        ;; Bit0&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit1&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit2&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit3&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit4&lt;br /&gt;
       MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit5&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit6&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit7&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
&lt;br /&gt;
        MOV  DPL,A&lt;br /&gt;
        ret&lt;br /&gt;
  _endasm;&lt;br /&gt;
&lt;br /&gt;
  /* return value in DPL */&lt;br /&gt;
&lt;br /&gt;
  return c;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Anlegen der Datei &amp;quot;hw_nexys.c&amp;quot; kann die Firmware mittels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # make HARDWARE=hw_nexys&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
übersetzt werden. Mittels dem Tools &amp;quot;fxload&amp;quot; kann die Firmware dann temporär auf den FX2-Mikrocontroller geladen werden (vgl. [http://wiki.erazor-zone.de/doku.php?id=wiki:projects:linux:ez-usb#firmware_upload_with_fxload]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cd ~/bin; wget http://www.erazor-zone.de/ez/projects/linux/getdevpath&lt;br /&gt;
 # chmod +x ~/bin/getdevpath&lt;br /&gt;
 # fxload -t fx2 -D $(getdevpath -v 04b4 -p 8613) -I std.hex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;nackte&amp;quot; FX2 hat, wenn man (wie in der hackdaworld.org-Anleitung oben nachliest) die SDA-Datenleitung zum Flash durchtrennt laut &amp;quot;lsusb&amp;quot; folgende ID, über die man ihn im Pfad im /dev-Dateisystem findet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # lsusb&lt;br /&gt;
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
Bus 002 Device 008: ID 04b4:8613 Cypress Semiconductor Corp. CY7C68013 EZ-USB FX2 USB 2.0 Development Kit&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist die FX2-Firmware geladen, sollten auf dem Nexys-Board die acht LEDs (stärker) leuchten (- ohne geladene FX2-Firmware sind die LEDs leicht gedimmt), und der FX2-Mikrocontroller sich mittels &amp;quot;lsusb&amp;quot; nun als &amp;quot;VOTI&amp;quot; melden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # lsusb &lt;br /&gt;
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
Bus 002 Device 009: ID 16c0:06ad VOTI&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== JTAG-Software ====&lt;br /&gt;
&lt;br /&gt;
Nimmt man nun ein aktuelles Release von [http://www.urjtag.org/ URJtag] (hier: svn Version 1356), kann man nach dem &amp;quot;./configure; make &amp;amp;&amp;amp; make install&amp;quot; sofort loslegen (vgl. [http://buffalo.nas-central.org/index.php/JTAG_Software/UrJTAG]).&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;*.bsd&amp;quot;), damit URJtag beim &amp;quot;detect&amp;quot; die Chips richtig erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
mobil11:~/.svn/fpga/Nexys_demo_simple# jtag&lt;br /&gt;
&lt;br /&gt;
UrJTAG 0.8 #1356&lt;br /&gt;
Copyright (C) 2002, 2003 ETC s.r.o.&lt;br /&gt;
Copyright (C) 2007, 2008 Kolja Waschk and the respective authors&lt;br /&gt;
&lt;br /&gt;
UrJTAG is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
There is absolutely no warranty for UrJTAG.&lt;br /&gt;
&lt;br /&gt;
WARNING: UrJTAG may damage your hardware!&lt;br /&gt;
Type &amp;quot;quit&amp;quot; to exit, &amp;quot;help&amp;quot; for help.&lt;br /&gt;
&lt;br /&gt;
jtag&amp;gt; bsdl path /usr/local/share/urjtag/bsdl&lt;br /&gt;
jtag&amp;gt; cable UsbBlaster ftdi 16c0:06ad&lt;br /&gt;
Connected to libftdi driver.&lt;br /&gt;
jtag&amp;gt; detect&lt;br /&gt;
IR length: 14&lt;br /&gt;
Chain length: 2&lt;br /&gt;
Device Id: 11110101000001000110000010010011 (0x00000000F5046093)&lt;br /&gt;
  Filename:     /usr/local/share/urjtag/bsdl/xcf04s.bsd&lt;br /&gt;
Device Id: 00010001010000101000000010010011 (0x0000000011428093)&lt;br /&gt;
  Filename:     /usr/local/share/urjtag/bsdl/xc3s1000l.bsd&lt;br /&gt;
jtag&amp;gt; print chain&lt;br /&gt;
 No. Manufacturer              Part                 Stepping Instruction          Register&lt;br /&gt;
-------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
   0                           XCF04S                        BYPASS               BYPASS&lt;br /&gt;
   1                           XC3S1000L_BARE                BYPASS               BYPASS&lt;br /&gt;
jtag&amp;gt; part 1&lt;br /&gt;
jtag&amp;gt; svf Nexysdemo.svf&lt;br /&gt;
Warning: USB-Blaster frequency is fixed to 12000000 Hz&lt;br /&gt;
Warning svf: command TIR not implemented&lt;br /&gt;
Warning svf: command TDR not implemented&lt;br /&gt;
Warning svf: command TIR not implemented&lt;br /&gt;
Warning svf: command TDR not implemented&lt;br /&gt;
Warning svf: command HIR not implemented&lt;br /&gt;
Warning svf: command HDR not implemented&lt;br /&gt;
Warning svf: command TIR not implemented&lt;br /&gt;
Warning svf: command TDR not implemented&lt;br /&gt;
Error svf: SIR command length inconsistent.&lt;br /&gt;
 in input file between line 6623 col 1 and line 6623 col 33&lt;br /&gt;
Error occured for SVF command SIR.&lt;br /&gt;
jtag&amp;gt; quit&lt;br /&gt;
mobil11:~/.svn/fpga/Nexys_demo_simple#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die usb_jtag-Firmware wird in URJtag als &amp;quot;Altera USB-Blaster&amp;quot; erkannt. Wichtig beim &amp;quot;cable&amp;quot;-Kommando ist die Angabe der USB-ID &amp;quot;16c0:06ad&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Erzeugen der SVF-Datei in Impact ====&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;impact.cmd&amp;quot; lässt sich dieser Schritt auf der Kommandozeile automatisieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
setMode -bs&lt;br /&gt;
setCable -port svf -file Nexysdemo.svf&lt;br /&gt;
addDevice -p 1 -file /usr/local/share/jtag/bsl/xcf04s.bsd&lt;br /&gt;
addDevice -p 2 -file Nexysdemo.bit&lt;br /&gt;
program -p 2&lt;br /&gt;
closeCable&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man mittels &amp;quot;impact -batch impact.cmd&amp;quot; den Prozeß des SVF-Datei-Erzeugens automatisieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
$ impact -batch impact.cmd&lt;br /&gt;
Release 9.2.01i - iMPACT J.37&lt;br /&gt;
Copyright (c) 1995-2007 Xilinx, Inc.  All rights reserved.&lt;br /&gt;
Preference Table&lt;br /&gt;
Name                 Setting&lt;br /&gt;
StartupClock         Auto_Correction&lt;br /&gt;
AutoSignature        False&lt;br /&gt;
KeepSVF              False&lt;br /&gt;
ConcurrentMode       False&lt;br /&gt;
UseHighz             False&lt;br /&gt;
ConfigOnFailure      Stop&lt;br /&gt;
UserLevel            Novice&lt;br /&gt;
MessageLevel         Detailed&lt;br /&gt;
svfUseTime           false&lt;br /&gt;
SpiByteSwap          Auto_Correction&lt;br /&gt;
&lt;br /&gt;
Reusing 6400C001 key.&lt;br /&gt;
Reusing E800C001 key.&lt;br /&gt;
&lt;br /&gt;
INFO:iMPACT:501 - &#039;1&#039;: Added Device UNKNOWN successfully.&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
INFO:iMPACT:1777 -&lt;br /&gt;
   Reading /usr/local/share/urjtag/bsdl/xcf04s.bsd...&lt;br /&gt;
&lt;br /&gt;
INFO:iMPACT:1777 -&lt;br /&gt;
   Reading /opt/xilinx-webpack/xcf/data/xcf04s.bsd...&lt;br /&gt;
INFO:iMPACT:501 - &#039;1&#039;: Added Device XCF04S successfully.&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
INFO:iMPACT:1777 -&lt;br /&gt;
   Reading /usr/local/share/urjtag/bsdl/xcf04s.bsd...&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&#039;2&#039;: Loading file &#039;Nexysdemo.bit&#039; ...&lt;br /&gt;
&lt;br /&gt;
done.&lt;br /&gt;
&lt;br /&gt;
INFO:iMPACT:1777 -&lt;br /&gt;
   Reading /opt/xilinx-webpack/spartan3/data/xc3s1000.bsd...&lt;br /&gt;
INFO:iMPACT:501 - &#039;2&#039;: Added Device xc3s1000 successfully.&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;2&#039;: Programming device...&lt;br /&gt;
&lt;br /&gt;
done.&lt;br /&gt;
INFO:iMPACT:579 - &#039;2&#039;: Completed downloading bit file to device.&lt;br /&gt;
INFO:iMPACT - &#039;2&#039;: Checking done pin....done.&lt;br /&gt;
&#039;2&#039;: Programmed successfully.&lt;br /&gt;
Elapsed time =      1 sec.&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anregungen bitte via Jabber an koppi@jabber.ccc.de&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>88.217.61.223</name></author>
	</entry>
	<entry>
		<id>https://www.mikrocontroller.net/index.php?title=Digilent_Nexys&amp;diff=31856</id>
		<title>Digilent Nexys</title>
		<link rel="alternate" type="text/html" href="https://www.mikrocontroller.net/index.php?title=Digilent_Nexys&amp;diff=31856"/>
		<updated>2008-10-15T21:06:43Z</updated>

		<summary type="html">&lt;p&gt;88.217.61.223: +Impact von der Kommandozeile aufrufen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;FPGA-Board, verfügbar mit Xilinx Spartan 3-200, -400 und -1000, Speedgrade 4.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Nexys-Audio-DSP-Foto-Andreas.jpg|thumb|600px|left|Nexys mit Erweiterungsboard FX2-BB]]&lt;br /&gt;
&amp;lt;br clear=&amp;quot;all&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dokumentation ==&lt;br /&gt;
* [http://digilentinc.com/Products/Detail.cfm?Nav1=Products&amp;amp;Nav2=Programmable&amp;amp;Prod=NEXYS Webseite]&lt;br /&gt;
* [http://digilentinc.com/Data/Products/NEXYS/Nexys_sch.pdf Schaltplan]&lt;br /&gt;
* [http://digilentinc.com/Data/Products/NEXYS/Nexys_rm.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
== RAM ==&lt;br /&gt;
Das RAM ist ein MT45W8MW16 [[Speicher#PSRAM|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.&lt;br /&gt;
&lt;br /&gt;
* [http://www.micron.com/products/partdetail?part=MT45W8MW16BGX-701%20WT Webseite]&lt;br /&gt;
* [http://download.micron.com/pdf/datasheets/psram/128mb_burst_cr1_5_p26z.pdf Datenblatt]&lt;br /&gt;
&lt;br /&gt;
== Beispieldesigns ==&lt;br /&gt;
* [[T51-Core]] - 8051-kompatibler Prozessor mit BASIC-Interpreter, einfaches Beispielprojekt für das Nexys-Board&lt;br /&gt;
* [[Audio-DSP mit Spartan 3-FPGA]]&lt;br /&gt;
&lt;br /&gt;
== Cypress FX2-Firmware ==&lt;br /&gt;
&lt;br /&gt;
Die USB-Verbindung wird durch einen Cypress FX2-Mikrocontroller realisiert.&lt;br /&gt;
&lt;br /&gt;
Die vorinstallierte Firmware ermöglicht rudimentäre Verbindungen zu der auf der Digilent Webseite bereitgestellten Adept-Software. Das ebenfalls bereitgestellte &amp;quot;dpimref.vhd&amp;quot;-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):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
ASTRB &amp;lt;-&amp;gt; U-FLAGA&lt;br /&gt;
DSTRB &amp;lt;-&amp;gt; U-FLAGB&lt;br /&gt;
WAIT &amp;lt;-&amp;gt; U-SLRD&lt;br /&gt;
WRITE &amp;lt;-&amp;gt; U-FLAGC&lt;br /&gt;
DATA(7:0) &amp;lt;-&amp;gt; U-FD7 bis U-FD0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FX2-Firmware Hacking ===&lt;br /&gt;
&lt;br /&gt;
Wie man die Firmware durch seine eigene ersetzen kann wird hier erklärt:&lt;br /&gt;
http://www.hackdaworld.org/cgi-bin/awki.cgi/NexysFPGA&lt;br /&gt;
&lt;br /&gt;
=== FX2-Firmware von ixo.de ===&lt;br /&gt;
&lt;br /&gt;
Es ist auch möglich, die Firmware des Projektes &amp;quot;usb_jtag&amp;quot; von http://www.ixo.de/ leicht anzupassen, um dann mittels UrJtag auf den FPGA zuzugreifen. Dabei geht man wie folgt vor:&lt;br /&gt;
&lt;br /&gt;
Zunächst muß man wie unter http://www.hackdaworld.org/cgi-bin/awki.cgi/NexysFPGA beschrieben, die SDA-Leitung am FX2-Mikrocontroller durchtrennen.&lt;br /&gt;
&lt;br /&gt;
Danach kann man direkt die FX2-Firmware und die JTAG-Software installieren:&lt;br /&gt;
&lt;br /&gt;
==== Firmware ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # wget &amp;quot;http://www.ixo.de/info/usb_jtag/usb_jtag-20080705-1200.zip&amp;quot;&lt;br /&gt;
 # unzip usb_jtag-20080705-1200.zip&lt;br /&gt;
 # cd usb_jtag/device/c51&lt;br /&gt;
 # cat hw_nexys.c # folgende C-Datei aus dem Wiki mit Copy und Paste in den Ordner kopieren:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
usb_jtag/device/c51/hw_nexys.c:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;c&amp;gt;&lt;br /&gt;
/*-----------------------------------------------------------------------------&lt;br /&gt;
 * Hardware-dependent code for usb_jtag&lt;br /&gt;
 *-----------------------------------------------------------------------------&lt;br /&gt;
 * Copyright (C) 2007 Kolja Waschk, ixo.de&lt;br /&gt;
 *-----------------------------------------------------------------------------&lt;br /&gt;
 * This code is part of usbjtag. usbjtag is free software; you can redistribute&lt;br /&gt;
 * it and/or modify it under the terms of the GNU General Public License as&lt;br /&gt;
 * published by the Free Software Foundation; either version 2 of the License,&lt;br /&gt;
 * or (at your option) any later version. usbjtag is distributed in the hope&lt;br /&gt;
 * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied&lt;br /&gt;
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
 * GNU General Public License for more details.  You should have received a&lt;br /&gt;
 * copy of the GNU General Public License along with this program in the file&lt;br /&gt;
 * COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin&lt;br /&gt;
 * St, Fifth Floor, Boston, MA  02110-1301  USA&lt;br /&gt;
 *-----------------------------------------------------------------------------&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;fx2regs.h&amp;gt;&lt;br /&gt;
#include &amp;quot;hardware.h&amp;quot;&lt;br /&gt;
#include &amp;quot;delay.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
/* JTAG TCK, AS/PS DCLK */&lt;br /&gt;
&lt;br /&gt;
sbit at 0xB4          TCK;&lt;br /&gt;
#define bmTCKOE       bmBIT4&lt;br /&gt;
#define SetTCK(x)     do{TCK=(x);}while(0)&lt;br /&gt;
&lt;br /&gt;
/* JTAG TDI, AS ASDI, PS DATA0 */&lt;br /&gt;
&lt;br /&gt;
sbit at 0xB2          TDI;&lt;br /&gt;
#define bmTDIOE       bmBIT2&lt;br /&gt;
#define SetTDI(x)     do{TDI=(x);}while(0)&lt;br /&gt;
&lt;br /&gt;
/* JTAG TMS, AS/PS nCONFIG */&lt;br /&gt;
sbit at 0xB3          TMS;&lt;br /&gt;
#define bmTMSOE       bmBIT3&lt;br /&gt;
#define SetTMS(x)     do{TMS=(x);}while(0)&lt;br /&gt;
&lt;br /&gt;
/* JTAG TDO, AS/PS CONF_DONE */&lt;br /&gt;
&lt;br /&gt;
sbit at 0xB0          TDO;&lt;br /&gt;
#define bmTDOOE       bmBIT0&lt;br /&gt;
#define GetTDO(x)     TDO&lt;br /&gt;
&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
#define bmPROGOUTOE (bmTCKOE|bmTDIOE|bmTMSOE)&lt;br /&gt;
#define bmPROGINOE  (bmTDOOE)&lt;br /&gt;
&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void ProgIO_Poll(void)    {}&lt;br /&gt;
// These aren&#039;t called anywhere in usbjtag.c, but I plan to do so...&lt;br /&gt;
void ProgIO_Enable(void)  {}&lt;br /&gt;
void ProgIO_Disable(void) {}&lt;br /&gt;
void ProgIO_Deinit(void)  {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void ProgIO_Init(void)&lt;br /&gt;
{&lt;br /&gt;
  /* The following code depends on your actual circuit design.&lt;br /&gt;
     Make required changes _before_ you try the code! */&lt;br /&gt;
&lt;br /&gt;
  // set the CPU clock to 48MHz, enable clock output to FPGA&lt;br /&gt;
  CPUCS = bmCLKOE | bmCLKSPD1;&lt;br /&gt;
&lt;br /&gt;
  // Use external clock, use &amp;quot;Slave FIFO&amp;quot; mode for all pins&lt;br /&gt;
  //IFCONFIG = bmIFCFG1 | bmIFCFG0;&lt;br /&gt;
  //IFCONFIG = bmIFCFG0;&lt;br /&gt;
  //IFCONFIG = 0xcb;&lt;br /&gt;
&lt;br /&gt;
  // pin 7 of port d enables fpga power supply&lt;br /&gt;
  OED |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
  IOD |= (1&amp;lt;&amp;lt;7);&lt;br /&gt;
  mdelay(500);&lt;br /&gt;
&lt;br /&gt;
  /* p. 180: must be set to 1 */&lt;br /&gt;
  REVCTL=0;//((1&amp;lt;&amp;lt;0)|(1&amp;lt;&amp;lt;1));&lt;br /&gt;
&lt;br /&gt;
  // TDO input, others output&lt;br /&gt;
  OED=(OED&amp;amp;~bmPROGINOE) | bmPROGOUTOE;&lt;br /&gt;
  OED |= bmPROGOUTOE;&lt;br /&gt;
  OED &amp;amp;= ~bmPROGINOE;&lt;br /&gt;
  IOD &amp;amp;= ~(bmPROGOUTOE);&lt;br /&gt;
&lt;br /&gt;
  // pin 5 of port d disables tdi -&amp;gt; tdo forward&lt;br /&gt;
  OED|=(1&amp;lt;&amp;lt;5);&lt;br /&gt;
  IOD|=(1&amp;lt;&amp;lt;5);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void ProgIO_Set_State(unsigned char d)&lt;br /&gt;
{&lt;br /&gt;
  /* Set state of output pins:&lt;br /&gt;
   *&lt;br /&gt;
   * d.0 =&amp;gt; TCK&lt;br /&gt;
   * d.1 =&amp;gt; TMS&lt;br /&gt;
   * d.2 =&amp;gt; nCE (only #ifdef HAVE_AS_MODE)&lt;br /&gt;
   * d.3 =&amp;gt; nCS (only #ifdef HAVE_AS_MODE)&lt;br /&gt;
   * d.4 =&amp;gt; TDI&lt;br /&gt;
   * d.6 =&amp;gt; LED / Output Enable&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
  SetTCK((d &amp;amp; bmBIT0) ? 1 : 0);&lt;br /&gt;
  SetTMS((d &amp;amp; bmBIT1) ? 1 : 0);&lt;br /&gt;
  SetTDI((d &amp;amp; bmBIT4) ? 1 : 0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
unsigned char ProgIO_Set_Get_State(unsigned char d)&lt;br /&gt;
{&lt;br /&gt;
  /* Set state of output pins (s.a.)&lt;br /&gt;
   * then read state of input pins:&lt;br /&gt;
   *&lt;br /&gt;
   * TDO =&amp;gt; d.0&lt;br /&gt;
   * DATAOUT =&amp;gt; d.1 (only #ifdef HAVE_AS_MODE)&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
  ProgIO_Set_State(d);&lt;br /&gt;
  return 2|GetTDO(); /* DATAOUT assumed high, no AS mode */&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
void ProgIO_ShiftOut(unsigned char c)&lt;br /&gt;
{&lt;br /&gt;
  /* Shift out byte C:&lt;br /&gt;
   *&lt;br /&gt;
   * 8x {&lt;br /&gt;
   *   Output least significant bit on TDI&lt;br /&gt;
   *   Raise TCK&lt;br /&gt;
   *   Shift c right&lt;br /&gt;
   *   Lower TCK&lt;br /&gt;
   * }&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
  (void)c; /* argument passed in DPL */&lt;br /&gt;
&lt;br /&gt;
  _asm&lt;br /&gt;
        MOV  A,DPL&lt;br /&gt;
        ;; Bit0&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit1&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit2&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit3&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit4&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit5&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit6&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        ;; Bit7&lt;br /&gt;
        RRC  A&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        NOP&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ret&lt;br /&gt;
  _endasm;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
;; For ShiftInOut, the timing is a little more&lt;br /&gt;
;; critical because we have to read _TDO/shift/set _TDI&lt;br /&gt;
;; when _TCK is low. But 20% duty cycle at 48/4/5 MHz&lt;br /&gt;
;; is just like 50% at 6 Mhz, and that&#039;s still acceptable&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
unsigned char ProgIO_ShiftInOut(unsigned char c)&lt;br /&gt;
{&lt;br /&gt;
  /* Shift out byte C, shift in from TDO:&lt;br /&gt;
   *&lt;br /&gt;
   * 8x {&lt;br /&gt;
  *   Read carry from TDO&lt;br /&gt;
   *   Output least significant bit on TDI&lt;br /&gt;
   *   Raise TCK&lt;br /&gt;
   *   Shift c right, append carry (TDO) at left&lt;br /&gt;
   *   Lower TCK&lt;br /&gt;
   * }&lt;br /&gt;
   * Return c.&lt;br /&gt;
   */&lt;br /&gt;
&lt;br /&gt;
   (void)c; /* argument passed in DPL */&lt;br /&gt;
&lt;br /&gt;
  _asm&lt;br /&gt;
        MOV  A,DPL&lt;br /&gt;
&lt;br /&gt;
        ;; Bit0&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit1&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit2&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit3&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit4&lt;br /&gt;
       MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit5&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit6&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
        ;; Bit7&lt;br /&gt;
        MOV  C,_TDO&lt;br /&gt;
        RRC  A&lt;br /&gt;
        MOV  _TDI,C&lt;br /&gt;
        SETB _TCK&lt;br /&gt;
        CLR  _TCK&lt;br /&gt;
&lt;br /&gt;
        MOV  DPL,A&lt;br /&gt;
        ret&lt;br /&gt;
  _endasm;&lt;br /&gt;
&lt;br /&gt;
  /* return value in DPL */&lt;br /&gt;
&lt;br /&gt;
  return c;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/c&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach dem Anlegen der Datei &amp;quot;hw_nexys.c&amp;quot; kann die Firmware mittels:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # make HARDWARE=hw_nexys&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
übersetzt werden. Mittels dem Tools &amp;quot;fxload&amp;quot; kann die Firmware dann temporär auf den FX2-Mikrocontroller geladen werden (vgl. [http://wiki.erazor-zone.de/doku.php?id=wiki:projects:linux:ez-usb#firmware_upload_with_fxload]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # cd ~/bin; wget http://www.erazor-zone.de/ez/projects/linux/getdevpath&lt;br /&gt;
 # chmod +x ~/bin/getdevpath&lt;br /&gt;
 # fxload -t fx2 -D $(getdevpath -v 04b4 -p 8613) -I std.hex&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Der &amp;quot;nackte&amp;quot; FX2 hat, wenn man (wie in der hackdaworld.org-Anleitung oben nachliest) die SDA-Datenleitung zum Flash durchtrennt laut &amp;quot;lsusb&amp;quot; folgende ID, über die man ihn im Pfad im /dev-Dateisystem findet:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # lsusb&lt;br /&gt;
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
Bus 002 Device 008: ID 04b4:8613 Cypress Semiconductor Corp. CY7C68013 EZ-USB FX2 USB 2.0 Development Kit&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ist die FX2-Firmware geladen, sollten auf dem Nexys-Board die acht LEDs (stärker) leuchten (- ohne geladene FX2-Firmware sind die LEDs leicht gedimmt), und der FX2-Mikrocontroller sich mittels &amp;quot;lsusb&amp;quot; nun als &amp;quot;VOTI&amp;quot; melden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
 # lsusb &lt;br /&gt;
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
Bus 002 Device 009: ID 16c0:06ad VOTI&lt;br /&gt;
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== JTAG-Software ====&lt;br /&gt;
&lt;br /&gt;
Nimmt man nun ein aktuelles Release von [http://www.urjtag.org/ URJtag] (hier: svn Version 1356), kann man nach dem &amp;quot;./configure; make &amp;amp;&amp;amp; make install&amp;quot; sofort loslegen (vgl. [http://buffalo.nas-central.org/index.php/JTAG_Software/UrJTAG]).&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;*.bsd&amp;quot;), damit URJtag beim &amp;quot;detect&amp;quot; die Chips richtig erkennt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
mobil11:~/.svn/fpga/Nexys_demo_simple# jtag&lt;br /&gt;
&lt;br /&gt;
UrJTAG 0.8 #1356&lt;br /&gt;
Copyright (C) 2002, 2003 ETC s.r.o.&lt;br /&gt;
Copyright (C) 2007, 2008 Kolja Waschk and the respective authors&lt;br /&gt;
&lt;br /&gt;
UrJTAG is free software, covered by the GNU General Public License, and you are&lt;br /&gt;
welcome to change it and/or distribute copies of it under certain conditions.&lt;br /&gt;
There is absolutely no warranty for UrJTAG.&lt;br /&gt;
&lt;br /&gt;
WARNING: UrJTAG may damage your hardware!&lt;br /&gt;
Type &amp;quot;quit&amp;quot; to exit, &amp;quot;help&amp;quot; for help.&lt;br /&gt;
&lt;br /&gt;
jtag&amp;gt; bsdl path /usr/local/share/urjtag/bsdl&lt;br /&gt;
jtag&amp;gt; cable UsbBlaster ftdi 16c0:06ad&lt;br /&gt;
Connected to libftdi driver.&lt;br /&gt;
jtag&amp;gt; detect&lt;br /&gt;
IR length: 14&lt;br /&gt;
Chain length: 2&lt;br /&gt;
Device Id: 11110101000001000110000010010011 (0x00000000F5046093)&lt;br /&gt;
  Filename:     /usr/local/share/urjtag/bsdl/xcf04s.bsd&lt;br /&gt;
Device Id: 00010001010000101000000010010011 (0x0000000011428093)&lt;br /&gt;
  Filename:     /usr/local/share/urjtag/bsdl/xc3s1000l.bsd&lt;br /&gt;
jtag&amp;gt; print chain&lt;br /&gt;
 No. Manufacturer              Part                 Stepping Instruction          Register&lt;br /&gt;
-------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
   0                           XCF04S                        BYPASS               BYPASS&lt;br /&gt;
   1                           XC3S1000L_BARE                BYPASS               BYPASS&lt;br /&gt;
jtag&amp;gt; part 1&lt;br /&gt;
jtag&amp;gt; svf Nexysdemo.svf&lt;br /&gt;
Warning: USB-Blaster frequency is fixed to 12000000 Hz&lt;br /&gt;
Warning svf: command TIR not implemented&lt;br /&gt;
Warning svf: command TDR not implemented&lt;br /&gt;
Warning svf: command TIR not implemented&lt;br /&gt;
Warning svf: command TDR not implemented&lt;br /&gt;
Warning svf: command HIR not implemented&lt;br /&gt;
Warning svf: command HDR not implemented&lt;br /&gt;
Warning svf: command TIR not implemented&lt;br /&gt;
Warning svf: command TDR not implemented&lt;br /&gt;
Error svf: SIR command length inconsistent.&lt;br /&gt;
 in input file between line 6623 col 1 and line 6623 col 33&lt;br /&gt;
Error occured for SVF command SIR.&lt;br /&gt;
jtag&amp;gt; quit&lt;br /&gt;
mobil11:~/.svn/fpga/Nexys_demo_simple#&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die usb_jtag-Firmware wird in URJtag als &amp;quot;Altera USB-Blaster&amp;quot; erkannt. Wichtig beim &amp;quot;cable&amp;quot;-Kommando ist die Angabe der USB-ID &amp;quot;16c0:06ad&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Erzeugen der SVF-Datei aus der Bit-Datei ii Impact auf der Kommandozeile ====&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;impact.cmd&amp;quot; lässt sich dieser Schritt auf der Kommandozeile automatisieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
setMode -bs&lt;br /&gt;
setCable -port svf -file Nexysdemo.svf&lt;br /&gt;
addDevice -p 1 -file /usr/local/share/jtag/bsl/xcf04s.bsd&lt;br /&gt;
addDevice -p 2 -file Nexysdemo.bit&lt;br /&gt;
program -p 2&lt;br /&gt;
closeCable&lt;br /&gt;
quit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Jetzt kann man mittels &amp;quot;impact -batch impact.cmd&amp;quot; den Prozeß des SVF-Datei-Erzeugens automatisieren:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
$ impact -batch impact.cmd&lt;br /&gt;
Release 9.2.01i - iMPACT J.37&lt;br /&gt;
Copyright (c) 1995-2007 Xilinx, Inc.  All rights reserved.&lt;br /&gt;
Preference Table&lt;br /&gt;
Name                 Setting&lt;br /&gt;
StartupClock         Auto_Correction&lt;br /&gt;
AutoSignature        False&lt;br /&gt;
KeepSVF              False&lt;br /&gt;
ConcurrentMode       False&lt;br /&gt;
UseHighz             False&lt;br /&gt;
ConfigOnFailure      Stop&lt;br /&gt;
UserLevel            Novice&lt;br /&gt;
MessageLevel         Detailed&lt;br /&gt;
svfUseTime           false&lt;br /&gt;
SpiByteSwap          Auto_Correction&lt;br /&gt;
&lt;br /&gt;
Reusing 6400C001 key.&lt;br /&gt;
Reusing E800C001 key.&lt;br /&gt;
&lt;br /&gt;
INFO:iMPACT:501 - &#039;1&#039;: Added Device UNKNOWN successfully.&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
INFO:iMPACT:1777 -&lt;br /&gt;
   Reading /usr/local/share/urjtag/bsdl/xcf04s.bsd...&lt;br /&gt;
&lt;br /&gt;
INFO:iMPACT:1777 -&lt;br /&gt;
   Reading /opt/xilinx-webpack/xcf/data/xcf04s.bsd...&lt;br /&gt;
INFO:iMPACT:501 - &#039;1&#039;: Added Device XCF04S successfully.&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
INFO:iMPACT:1777 -&lt;br /&gt;
   Reading /usr/local/share/urjtag/bsdl/xcf04s.bsd...&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&#039;2&#039;: Loading file &#039;Nexysdemo.bit&#039; ...&lt;br /&gt;
&lt;br /&gt;
done.&lt;br /&gt;
&lt;br /&gt;
INFO:iMPACT:1777 -&lt;br /&gt;
   Reading /opt/xilinx-webpack/spartan3/data/xc3s1000.bsd...&lt;br /&gt;
INFO:iMPACT:501 - &#039;2&#039;: Added Device xc3s1000 successfully.&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;2&#039;: Programming device...&lt;br /&gt;
&lt;br /&gt;
done.&lt;br /&gt;
INFO:iMPACT:579 - &#039;2&#039;: Completed downloading bit file to device.&lt;br /&gt;
INFO:iMPACT - &#039;2&#039;: Checking done pin....done.&lt;br /&gt;
&#039;2&#039;: Programmed successfully.&lt;br /&gt;
Elapsed time =      1 sec.&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anregungen bitte via Jabber an koppi@jabber.ccc.de&lt;br /&gt;
&lt;br /&gt;
[[Category:FPGA und Co]]&lt;/div&gt;</summary>
		<author><name>88.217.61.223</name></author>
	</entry>
</feed>