Hallo,

Ik heb een FPGA van Xilinx. Daarmee ben ik een schakeling aan het ontwerpen om via de paralelle poort van de pc een robotarm aan te sturen.

De CLK (klok) ingang van de FPGA laat ik door de computer genereren om zo ook het aantal stappen exact te kunnen bijhouden. Het enige probleem wat ik tegenkom is dat de uitgangen van de FPGA die de stapcodes aan de verstker levert niet de juiste stappen maakt als ik de CLK van de computer neem. Het rare is dat als ik de CLK van een oscillator neem hij het wel correct doet.

Nu heb ik een oplossing gevonden om hem wel te laten werken via de CLK van de PC. Namelijk door de CLK eerst op beide ingangen van een 2input NAND aan te sluiten en de uitgang van de NAND op de CLK van de FPGA. Ik weet niet waarom hij nu wel werkt maar het doet het om de een of andere rare reden nu wel.

Iemand enig idee hoe dit kan?

Alvast bedankt voor de reacties.

Misschien is het kloksignaal van de PC vervuild met ruis of is het spanningsniveau net op het randje voor de input van die FPGA.

Dat zou wel vreemd zijn. Het is trouwens niet het CLK signaal van de PC zelf, dat zou veel te hoog zijn. Het is een softwarematig gemaakt signaal net zoals de rest van de softwarematig 'gegenereerde' stuursignalen die de FPGA krijgt en waar het dus niet mee fout gaat.

Heb je wel een clock inputbuffer gebruikt in de FPGA?

Zo ja kan het idd gewoon ruis zijn. Maar dan heb je ook kans dat sommige ruis ook door de NAND komt!

Ik gebruik altijd input buffers, anders werkt het zowieso niet. De CLK is aangesloten op een global control pin. Dat is een speciaale CLK ingang voor de FPGA. In de software gebruik ik dan een BUFG (globale buffer) voordat ik naar de CLK van het 'systeem' ga.

Je hebt IBUF (input buffer) en CBUF (clock buffer) dacht ik. Misschien moet je die laatste gebruiken, zoiets staat me wel bij van de lessen in ieder geval.

Ik heb beide geprobeerd, en bij beide stoort hij. Alleen als ik een 2 input NAND gebruik stoort hij niet meer. Misschien werkt een andere poort ook wel (AND OR of NOR), maar heb ik niet geprobeerd. Met een invertor stoorde hij trouwens ook.

Een CBUF is volgens mij hetzelfde als een GBUF. Dan zijn speciale lijnen voor de chip die gebruik maken van aparte sporen. Bij de CLK is dat belangrijk omdat alle FF in het systeem op hetzelfde moment (CLK flank) moeten schakelen. Als je de CLK via een IBUF zou schakelen loop je het risico dat dus niet alle FF in het systeem tegelijk schakelen omdat er verschillende looptijden van het CLK signaal kunnen ontstaan.