Gottfried M. schrieb:
Ich bin gerade etwas ratlos welche constraints man wirklich selber
setzen muss.
Prinzipiell erstmal alle, wobei in vielen Designs die Angabe der Taktfrequenz (und die Pinzuordnung) schon ausreicht.
Ich habe ein Design, in dem ein ADC von mir aus dem FPGA
heraus mit einer 50MHz Clock versorgt wird.
Kein gute Idee. Die im FPGA erzeugten Takte sind i.d.R. mit relativ hohen Jitter behaftet. Der Taktjitter wird vom ADC in einen Amplitudenfehler umgewandelt und äußert sich in erhöhtem Rauschen (außer man sampelt DC, aber dann braucht man keinen 50 MHz ADC).
Die Constraints für die DLL werden automatisch erzeugt, damit das
Synthesetool weiß wie schnell das ist.
Ja, die automatischen (Takt-)Constraints an DCM/PLLs funktionieren bei Xilinx/ISE ganz gut.
Die ADC Daten werden dann parallel wieder an den FPGA gegeben und dort
werden die Daten verarbeitet.
Der ADC hat eine gewisse Latenz zwischen der Taktflanke am Eingang und bis valide Daten auf den Leitungen anliegen. Diese Latenz steht im Datenblatt des ADC.
Zusätzlich spielt ggf. noch die Leitungslänge (Takt hin zum ADC, Daten zurück zum FPGA) eine Rolle.
In Summe muß das dem Synthesetool bekannt gemacht werden:
1 |
TIMEGRP "TG_ADC_DATA" OFFSET = IN x.y ns VALID z ns BEFORE "ADC_CLK";
|
2 |
NET ADC_DATA<0> TNM = "TG_ADC_DATA";
|
3 |
NET ADC_DATA<1> TNM = "TG_ADC_DATA";
|
4 |
NET ADC_DATA<2> TNM = "TG_ADC_DATA";
|
5 |
...
|
Wie sieht das mit einem SPI Master im FPGA aus? Muss ich hier
irgendwelche Constraints manuell setzen?
Normalerweise nicht. SPI wird üblicherweise über chip select synchronisiert.
Die Signale vom Master (CLK, DO, CS) kommen i.d.R. alle aus der gleichen Taktdomäne und sind daher nur routing delays unterworfen. Die Unterschiede in den routing delays liegen (je nach Chip) in der Größenordnung unterhalb einer Nanosekunde und sind für SPI nicht relevant.
Wie schnell ist denn der SPI-Takt?