ATF150x

Aus
Wechseln zu: Navigation, Suche
ATF-1504 DEV Board
FT232H Programmer
ATDH1150USB mit DEV Board


Der CPLD ATF-1504

Ein CPLD ist ein programmierbarer Baustein, der die Funktion einer komplexen logischen Schaltung nachbilden kann. Eine Schaltung bestehend aus zig Logik IC findet Platz auf einem einzigen Chip.


Der CPLD ATF-1504 von Microchip bietet
  • 5V Technologie (AS Type) oder 3,3V (ASV Type) mit 5V toleranten IO
  • 64 Makrozellen
  • die Bauform PLCC-44 ist einfach lötbar
  • Programmierung über JTAG


Es gibt einige Anbieter von CPLDs. Aber es gibt kaum noch lieferbare CPLD die mit 5V Technik kompatibel sind. Da ist der ATF-1504 eine große Ausnahme, und diese Eigenschaft macht ihn besonders wertvoll für kleine Retro Projekte.


Programmierung des ATF-1504


JEDEC Datei

Der CPLD wird 'leer' geliefert und kann von Natur aus gar nichts tun. Die Logik, für die der CPLD verwendet wird, kommt in Form einer Jedec Datei. Diese Datei wird über eine JTAG Schnittstelle in den CPLD programmiert. Danach ist der CPLD bereit für seinen Einsatz ...



JTAG Schnittstelle

Die JTAG Schnittstelle funktioniert über 4 Signale (TCK,TDO,TMS,TDI). Dabei können mehrere CPLD in einer 'JTAG Chain' (JTAG Kette) verbunden sein. So können mehrere CPLD mit einem einzigen Programmiergerät beschrieben werden. Die JTAG Schnittstelle von Microchip besteht gewöhnlich aus einem 10 poligen Wannenstecker. Die Verbindung zum Programmiergerät erfolgt über ein Flachbandkabel. Die Nase beim Wannenstecker verhindert, dass der Stecker verkehrt herum eingesetzt wird.

Einer der Vorteile von JTAG ist, dass der CPLD direkt in seiner Schaltung (direkt auf dem Board) programmiert werden kann. Der CPLD muss dazu nicht von seinem Board entfernt werden. Durch die JTAG Chain können auf einem Board auch mehrere CPLD mit derselben JTAG Schnittstelle angesprochen werden.

Die JTAG Schnittstelle benötigt 4 Signale am CPLD. Das bedeutet, es gehen 4 PIN am CPLD quasi 'verloren' und stehen nicht für die Schaltung zur Verfügung. Man kann aber den CPLD so programmieren, dass diese 4 JTAG Pins als normale IO verwendet werden. Das hat aber den Nachteil, dass man den CPLD ab sofort nicht mehr über JTAG erreichen kann. Eine Umprogrammierung ist damit nicht mehr so einfach möglich.


ATMISP

Dieses Tool von Microchip benötigt man für die Programmierung des CPLD. Das ATMISP kann direkt mit dem Microchip Programmer ATDH1150USB kommunizieren, wenn er über die USB Schnittstelle angeschlossen ist. Für die Programmierung des CPLD mit dem Tool ATMISP benötigt man nur das JEDEC File.

Wenn man nicht den originalen Programmer von Microchip zur Verfügung hat, dann muss man auf einen kleinen 'Trick' zurückgreifen. Man benötigt in jedem Fall eine Hardware, einen JTAG Adapter zur Kommunikation mit dem CPLD. JTAG ist an sich normiert, daher kann es prinzipiell mit jedem JTAG Adapter funktionieren. Das Problem ist, jeder JTAG Adapter benötigt eine Software. Und diese Software versteht wahrscheinlich das JEDEC File des ATF-1504 nicht direkt.


Nun hat man den ATMISP der nicht mit jedem JTAG Programmer arbeiten kann. Und zum anderen hat man eine Software zu dem JTAG Adapter die nicht mit dem JEDEC kann. Die Lösung ist ein Zwischenfile (SVF). Ein SVF File beschreibt die Kommunikation über ein JTAG Interface.

Man braucht einen JTAG Adapter, der von einem 'JTAG Player' unterstützt wird. Der JTAG Player ist eine Software, die SVF Dateien liest und zum JTAG Adapter senden kann. Man muss nun folgende Schritte durchführen:

  • wir verbinden den JTAG Adapter mit dem CPLD
  • mit dem ATMISP laden wir das JEDEC File
  • mit dem ATMISP exportieren wir eine SVF Datei
  • (optional konvertieren wir SVF nach XSVF)
  • mit dem JTAG Player laden wir das SVF (oder XSVF File)
  • mit dem JTAG Player senden wir das File zum JTAG Adapter


Wenn alles fehlerfrei läuft, sollte der CPLD nun programmiert sein. Solange man nichts über JTAG verändert, hält der Inhalt des CPLD für Jahrzehnte (ähnlich wie bei einem Flash Speicher).


Der Zwischenschritt der Konvertierung von SVF zu XSVF ist nur dann notwendig, wenn der verwendete JTAG Player nur mit XSVF arbeiten kann. Sonst kann man auf diesen Schritt verzichten und direkt mit dem SVF File arbeiten.


HV-Programmer

Der CPLD kann über JTAG viele Male gelöscht und neu programmiert werden. Das funktioniert aber nur solange die JTAG Schnittstelle erreichbar ist.

Der CPLD erlaubt die Benutzung der JTAG PINs als normale IO PINs. Wenn man das allerdings tut, dann ist eine Neuprogrammierung über JTAG nicht mehr möglich. Um die JTAG PINs zu reaktivieren benötigt man einen HV-Programmer (high Voltage Programmer). Einige kommerzielle Programmer wie zB. der GALEP-5 sind HV-Programmer und können CPLD zurücksetzen und neu programmieren.


Wenn man die JTAG PINs niemals als IO PINs verwendet, dann benötigt man keinen HV-Programmer. Der normale JTAG Programmer ist in diesem Fall ausreichend. Bei einem neuwertigen CPLD ist die JTAG Schnittstelle immer erreichbar. Aber bei einem Billig Anbieter bekommt man oft CPLD die schon im Einsatz waren und wo die JTAG Schnittstelle nicht erreichbar ist. Die CPLD Chips scheinen defekt zu sein, in den meisten Fällen lassen sich diese CPLD aber durch einen HV-Programmer wieder beleben.


Das Datenblatt des ATF1504 beinhaltet keine Information zur HV Programmierung. Aber es gibt einige Quellen im Netz, die das Verfahren sehr gut beschreiben. Die beschriebene Methode funktioniert tadellos. Wahrscheinlich funktioniert es mit allen CPLD dieser Familie, ich habe es mit folgenden CPLD nachstellen können: ATF1502xx, ATF1504xx, ATF1508xx, EPM7064, EPM70128

Das Verfahren ist sehr einfach, man benötigt nur eine 12V Spannungsquelle und einen 2,2K Widerstand. Währende der JTAG Sequenz werden die 12V über den Widerstand an den Vpp PIN angelegt. Es ist nirgends im Datenblatt ein Hinweis auf den Vpp PIN, aber in allen oben genannten CPLD Typen ist der Vpp PIN am OE1. Bei allen PLCC Typen ist der OE1 am höchsten PIN des Sockel, also PIN 44 beim PLCC-44 und am PIN 84 beim PLCC-84.


Vorgangsweise um JTAG zu reaktivieren:

  • 5V Versorgung an den CPLD anlegen
  • 12V über den Widerstand an den PIN Vpp anlegen
  • JTAG Sequenz CHIP ERASE senden
  • 12V entfernen


Diese Vorgangsweise hat bisher bei jedem CPLD funktioniert. Danach ist der CPLD wie neu, man kann ihn ohne die 12V ganz normal benutzen.

Bei dem FT232HQ Shield werden die 12V durch einen DC-DC Step-up IC erzeugt aus den 5V vom USB Port. Ein kleiner Schalter legt die 12V optional auf den Vpp PIN des CPLD. Damit ist es zumindest für die PLCC-44 Varianten sehr einfach möglich, die CPLD wieder zu beleben.


JTAG Programmer

Der JTAG Programmer hat die Aufgabe das JEDEC File in den CPLD zu schreiben. Dazu nutzt der Programmer die JTAG Schnittstelle.


Microchip ATDH1150USB

Dies ist der Standard Programmer für die CPLD von Microchip. Es ist die einfachste und bequemste Methode, den ATF-1504 zu programmieren. Die Programmier Software ATMISP kann den ATDH1150USB direkt ansprechen, deswegen kann man die JEDEC Datei direkt in den CPLD schreiben.


JTAG Adapter auf Basis eines FT232H

Der FT232H ist eine preisgünstige Methode einen JTAG Adapter selbst zu bauen. Das FT232H Board ist standardisiert und kann günstig fast überall erworben werden, selbst Amazon bietet dieses Board um ein paar Euros an. Im Zusammenspiel mit Open-OCD hat man mit dem FT232H Board bereits einen JTAG Adapter der als SVF PLayer funktioniert. Man muss sich nur noch ein Kabel basteln.


ATF1504-FT232HQ Shield

Nun ist ja das preisgünstige FT232H Board bereits ein JTAG Adapter. Aber es geht noch viel besser, jemand hat ein kleines Board entwickelt, das direkt auf dem FT232HQ Board aufgesteckt werden kann. Quasi ein 'Shield' für das FT232H Board, wie man es von den Arduino Boards kennt.

Das FT232HQ Shield ist ein JTAG Programmer und auch optional ein HV-Programmer. Es produziert die nötigen 12V aus der 5V Versorgung vom USB Port, die optional während des ERASE Vorgang auf den Vpp PIN geschaltet werden kann.


Auf dem Shield befinden sich
  • PLCC-44 Sockel
  • JTAG Anschluss
  • ein DC-DC Step-up Wandler (5V --> 12V)
  • ein Schalter
  • ein Jumper für die Wahl der Spannung (3,3V oder 5V)
  • ein paar SMD Teile


Der PLCC-44 Sockel
nimmt bei Bedarf einen ATF-1504 auf, den man so direkt auf dem Shield programmieren kann.
Der JTAG Port
ermöglicht den Anschluss eines Flachband Kabel, so kann ein CPLD direkt in der Schaltung programmiert werden.
Der DC-DC Wandler
produziert 12V aus den 5V vom FT232H Adapter. Die 12V sind notwendig, wenn ein CPLD nicht mehr erreichbar ist über JTAG. Der CPLD ist nicht mehr über JTAG programmierbar, wenn man die JTAG Pins als IO verwendet hat.
Der Schalter
schaltet die 12V auf einen PIN des CPLD um die JTAG PINs zu reaktivieren.
Der Jumper
schaltet die Versorgungsspannung des CPLD zwischen 5V und 3,3V. So können sowohl 5V CPLD als auch die 3,3V CPLD direkt im PLCC Sockel programmiert werden.



Arduino JTAG Shield

Auf Basis des FT232H Board habe ich nun ein Shield für den Arduino UNO gemacht. Wie beim FT232H Shield kann man die CPLD Spannung auf 3,3 oder 5V stellen und die 12V für Vpp wird ebenfalls aus den 5V des Arduino erzeugt. Der CPLD kann direkt auf dem Arduino Shield programmiert werden. Alternativ kann man einen CPLD über den JTAG Anschluss direkt in der Schaltung programmieren. Es funktioniert nun für folgende Atmel CPLD: ATF1502, ATF1504, ATF1508

Das Arduino JTAG Shield ist ein JTAG Programmer und auch optional ein HV-Programmer. Es produziert die nötigen 12V aus der 5V Versorgung vom USB Port, die optional während des ERASE Vorgang auf den Vpp PIN geschaltet werden kann.

Für die Programmierung des CPLD mit dem Arduino JTAG Shield benötigt man eine PC Software: den Arduino SVC Player (SVF-UNO.exe)

Das Arduino JTAG Shield gehört nicht zu den schnellsten Programmern, die serielle Schnittstelle ist leider das Nadelöhr. Es ist eben mehr eine Notlösung, wenn man keinen JTAG Adapter zur Verfügung hat und nur mal für eine Bastelei einen CPLD programmieren möchte.


Auf dem Shield befinden sich
  • PLCC-44 Sockel (um den CPLD direkt zu programmieren)
  • JTAG Anschluss (In-System Programmierung)
  • ein DC-DC Step-up Wandler (5V --> 12V)
  • ein Schalter für die 12V Vpp
  • ein Jumper für die Wahl der Spannung (3,3V oder 5V)
  • ein paar SMD Teile


Der PLCC-44 Sockel
nimmt bei Bedarf einen ATF-1504 auf, den man so direkt auf dem Shield programmieren kann.
Der JTAG Port
ermöglicht den Anschluss eines Flachband Kabel, so kann ein CPLD direkt in der Schaltung programmiert werden.
Der DC-DC Wandler
produziert 12V aus den 5V vom FT232H Adapter. Die 12V sind notwendig, wenn ein CPLD nicht mehr erreichbar ist über JTAG. Der CPLD ist nicht mehr über JTAG programmierbar, wenn man die JTAG Pins als IO verwendet hat.
Der Schalter
schaltet die 12V auf einen PIN des CPLD um die JTAG PINs zu reaktivieren.
Der Jumper
schaltet die Versorgungsspannung des CPLD zwischen 5V und 3,3V. So können sowohl 5V CPLD als auch die 3,3V CPLD direkt im PLCC Sockel programmiert werden.


Zur Zeit funktionieren folgende SVF Dateien aus dem ATMISP:

  • Blank Check
  • Programm / Verify
  • Verify
  • Erase


Im einfachsten Falle muss man das Shield nicht unbedingt haben, es genügt auch ein Arduino UNO und 4 Drähte. Dann funktionieren aber nur die 5V Typen (AS und ASL) und natürlich hat man dann auch keinen HV Programmer. Aber um mal schnell einen ATF1504 zu programmieren, ist das sicher eine akzeptable Notlösung.


Die Verbindung zum Arduino:

  • Arduino D7 ---> TCK am CPLD
  • Arduino D8 ---> TDI am CPLD
  • Arduino D9 ---> TDO am CPLD
  • Arduino D10 ---> TMS am CPLD


Der Vorgang um einen CPLD zu beschreiben bzw. zu löschen:

  • ATMISP: mit diesem Tool wird das JEDEC File in ein SVF File umgewandelt
  • das SVF File wird zusammen mit dem Windows Tool (EXE Datei) in ein Verzeichnis kopiert
  • ein Kommandozeilen Fenster (CMD.EXE) öffnen in dem Verzeichnis
  • den CPLD in den Sockel des CPLD Shield einlegen (oder alternativ ein JTAG Kabel anschließen)
  • dieser Befehl spielt das SVC File 'Blankcheck.svf' in den CPLD: SVC-UNO -i -s Blankcheck.svf
  • ... WARTEN ... und danach gucken ob es fehlerfrei gelaufen ist


Natürlich muss der Arduino UNO richtig programmiert sein.
Die nötigen Dateien sind unten im Abschnitt Downloads zu finden.



Entwicklung der Logik

Für die Entwicklung der Logik im CPLD (JEDEC File) existieren verschiedene Tools. Unter anderem funktionieren auch die Tools von Altera, weil die CPLD Chips von Microchip und die Chips von Altera nahezu identisch sind. Der Microchip ATF-1504 entspricht dem Altera EPM-7064, das Ausgabe File des Altera Tool muss allerdings für den ATF-1504 konvertiert werden.

Das Tool von Microchip ist WinCUPL, es kann von der Homepage von Microchip herunter geladen werden. WinCUPL wirkt etwas veraltet, aber es läuft tadellos auf meinem Windows 10 PC. Man liest oft negative Kritik zu WinCUPL, aber ich kann diese Meinungen nicht teilen. Bis jetzt hat WinCUPL für all meine Projekte tadellos funktioniert. Es kompiliert schnell und gibt klare Fehlermeldungen aus, wenn im Quelltext etwas falsch ist. Der Simulator erlaubt die Vorgabe von Situationen und zeigt den Status der IO grafisch über die Zeit an. Aus meiner Sicht lässt es sich sehr gut mit dem WinCUPL entwickeln.

Es gibt noch weitere Tools, die teilweise nur unter DOS oder älteren Windows Versionen laufen. Mit diesen Tools habe ich mich nie länger beschäftigt.


Das WinCUPL gibt mehrere Dateien aus. Für den produktiven Einsatz im CPLD selbst ist jedoch nur das JEDEC File relevant. Das JEDEC File wird direkt mit einem JTAG Programmer in den CPLD geladen.


DEV Board

Die CPLD Logik wird wahrscheinlich nicht beim ersten Versuch sofort richtig funktionieren. Man benötigt daher eine Möglichkeit, die Logik zu testen.


Microchip DK3

Das DK3 ist ein sehr komfortables DEV Board von Microchip, auf dem Board sind:

  • 44-Pin TQFP Adapter
  • JTAG Anschluss
  • Erweiterungs Ports
  • ein 2 MHz Oszillator
  • vier 7-segment LED Anzeigen
  • acht LEDs
  • Spanungsversorgung: 1.8V, 3.3V und 5.0V
  • einfacher Zugang zuallen I/O Pins


Über optional erhältlicher Adapter Boards kann man weitere Bauformen des CPLD komfortabel am DK3 testen.

Der JTAG Anschluss erlaubt die Programmierung des CPLD direkt auf dem DK3 Board. Dazu muss ein JTAG Adapter angeschlossen werden. Nach dem Programmiervorgang kann die Logik direkt am DK3 getestet werden.

Wenn man das DK3 als HV-Programmer benutzen möchte, dann muss man 12V über einen 2,2K Widerstand anlegen am PIN OE1 (PIN 44 beim PLCC-44 oder PIN84 beim PLCC-84 Adapter). Nun hat das DK3 am PIN OE1 einen optionalen Pull-Down Widerstand. Der Widerstand reduziert die 12V auf ca. 8,3V, weswegen die HV Programmierung nicht funktioniert. Daher muss man den Jumper 'JPGOE' abziehen während des ERASE Vorgang.


DEV Board selbst gebaut

Bei der Firma PCBWAY gibt es ein ATF-1504 DEV Board als 'Shared Project' von dem Benutzer Yellperil.

Ich möchte mich an der Stelle bei Yellperil bedanken, das DEV Board hat mir sehr gute Dienste geleistet bei der Entwicklung meines UC2 Modul.


Das DEV Board von Yellperil ist schlicht und einfach gehalten. Es sind keinerlei Eingabe oder Anzeige Elemente vorhanden. Aber das ist auch nicht nötig, wenn man eine Testschaltung oder einen Prototypen aufbaut auf einem Steckbrett. Das Steckbrett wird dann über Steckdrähte mit den IO des DEV-Board verbunden.


Auf dem DEV Board befinden sich die nötigsten Bestandteile
  • PLCC-44 Sockel (für den CPLD)
  • JTAG Port
  • alle IO PINs sind auf Steckleisten
  • die Sonder PINs sind auf einer eigenen Steckleiste
  • Stromversorgung über Hohlraumstecker (J2)
  • alternativ kann die Stromversorgung über die Steckleiste erfolgen


Achtung: die Stromversorgung ist nicht geregelt und auch nicht gegen Verpolung geschützt.


Auf dem Board befinden sich noch ein 10µF als Siebung, die 4 obligatorischen Stützkondensatoren je 100nF für den CPLD und Widerstände für die JTAG Schnittstelle.


Downloads


WEB Links