Účelem projektu bylo původně rozchodit Jtag od fy. Kramara tak, aby byl schopen nahrát data do obvodu Xilinx FPGA. Tento modul je postaven na obvodu FT2232, který podporuje nativní jtag - spi (mpsse) mód. V tomto režimu je hodinová frekvence až 6 MHz, což je asi tak 10x víc, než při použití paralelního kabelu. Řešení od fy. Xilinx, používající formát souboru XSVF, má sice k dispozici zdrojové texty v c, ale než se prokousávat binárním parserem bylo lepší použít textový parser s pomocí nástrojů flex-bison. Kostra zde použitá je z projektu urjtag, interface je původní. Použití je velmi jednoduché:
#include "dummy.h" int main (void) { int ret = 0; driver_t* jtag = &dummyDriver; // nebo jiný if (!jtag->open ()) return -1; ret = svfProcessFile (jtag, "pokus.svf", 0); jtag->close (); return ret; }
Jako rozhraní je použita struktura s prototypem driver_t. JTAG operace probíhají na náběžnou hranu hodin, vyčítání dat je strobováno sestupnou hranou hodin (TCK). Logika uvnitř obvodu (libovolného) obsahuje konečný automat, jehož stavy se definovaně mění se vstupem TMS. Některé stavy jsou stabilní, tedy nemění-li se TMS, nemění se ani stav - a v těchto stavech probíhá vlastní zápis dat. Jsou možné dvě operace -
zápis do instrukčního registru
zápis/čtení datového registru
V driveru to ale není ani vidět, je zde pouze operace s TMS, měnící stav automatu a operace s TDI pro vlatní zápis/čtení dat. Stav automatu si hlídá parser.
Ovladač pro kabel Kramara je závislý na knihovně libftdi (a tedy na libusb), parser potřebuje flex a bison. Pro generování dokumentace je potřeba doxygen.
Kabel od Kramara byl použit ve spolupráci s kitem pro Spartan II od PkDesign. Zde je na jtag konektor vyvedeno +5V a to se kabelu moc nelíbilo. Pokud se do série zapojí červená LED, chodí to, ale není to moc spolehlivé.
Na projekt jsem postupně nabalil další funkce, zprovoznil jsem paralelní kabel od PK-Design (parport.h parport.c), a nakonec i interface tvořené procesorem ARM AT91SAM7S256. To se hodí v projektu, kde spolupracuje tento procesor s FPGA Xilinx a osobním počítačem - není nutné mít konfigurační paměť, data pro FPGA jsou v paměti počítače a nahrávají se přes USB, které slouží zároveň i jako komunikační rozhraní cílové aplikace. Driver pro toto řešení je v souborech arm.h a arm.c . V Linuxu je použit ovladač usbserial, je nutné ho zavést s parametry:
sudo modprobe usbserial vendor=0x03eb product=0x6124
Nejsou tedy třeba žádné další knihovny. Bylo ovšem nutné napsat pro tento účel firmware, běžící přímo v procesoru. Je to samostatný projekt v adresáři arm, pro zprovoznění je potřeba balík GNU ARM vývojových nástrojů. Bližší popis je v dokumentaci generované doxygenem.
Český překlad verze 2, červen 1991.