ext. Datensignal mit ext. Clk richtig einlesen (Constraints)

Gast #3835861
Ausgangslage:

Verwendeter FPGA: VIRTEX 5
Verwendete Software: ISE

Ziel:

Ein Datensignal mit einer Breite von 7 Bit (LVDS) liegt am FPGA an. 
Synchron zu diesem Datensignal liegt ein Clocksignal an einem Global 
Clock Pin des FPGA an.  Es werden sowohl bei der steigenden als auch der 
fallenden Flanke des Clk-Signals Daten übernommen. Bei der steigenden 
Flanke werden die Even-Bits und bei der fallenden Flanke die Odd-Bits 
eingelesen und zu einem 14-Bit Wert zusammengesetzt. Ich mache das über 
zwei Prozesse. Ein Prozess für die steigende und einer für die fallende 
Flanke.

Geschwindigkeit:
Das Clocksignal hat eine Frequenz von 100 MHz (das heißt es werden alle 
5ns jeweils 7 Bits eingelesen)

Mein Vorgehen: Das Clocksignal wird über einen IBUFGDS eingespeist und 
das Datensignal über 7X IBUFDS.

Jetzt ist meine Frage wie ich die Constraints setzen muss, damit das 
Timing passt. Ich habe mir hierzu das  Timing Constraints User Guide 
hergenommen und entsprechend dem Beispiel von Seite 12 Constraints 
formuliert:

NET "SysCLk" TNM_NET = "SysClk";
TIMESPEC "TS_SysClk" = PERIOD "SysClk" 10 ns HIGH 50%;
OFFSET = IN 2.5 ns VALID 5 ns BEFORE "SysClk" RISING;
OFFSET = IN 2.5 ns VALID 5 ns BEFORE "SysClk" FALLING;

Ist das so korrekt? Muss ich die Dateneingangssignale nicht irgendwo 
noch angeben?
Ich bin für Hinweise bezüglich der Richtigkeit meiner Gedankengänge 
dankbar. Habe ich etwas übersehen? Bin ich irgendwo auf dem Holzweg?

Hier das Manual
http://www.xilinx.com/support/documentation/sw_manuals/xilinx13_1/ug612.pdf
Angehängte Dateien:
FPGA schrieb im Beitrag #3835861:
> Ich mache das über
> zwei Prozesse. Ein Prozess für die steigende und einer für die fallende
> Flanke.

Hat dein FPGA keine IDDR Register? Sowas ist doch total unsauber. 
IDDR(2) haben doch mittlerweile alle halbwegs aktuellen Xilinx FPGA.

FPGA schrieb im Beitrag #3835861:
> Ist das so korrekt? Muss ich die Dateneingangssignale nicht irgendwo
> noch angeben?

Klar musst du das Constraint auch an die Datensignale hängen:

http://www.xilinx.com/support/documentation/white_papers/wp237.pdf
Gast
> Hat dein FPGA keine IDDR Register? Sowas ist doch total unsauber.
> IDDR(2) haben doch mittlerweile alle halbwegs aktuellen Xilinx FPGA.

Dachte mir schon, dass es eleganter gehen muss. Ich schau mir das mal 
an.

> Klar musst du das Constraint auch an die Datensignale hängen:

In dem Example fehlt das jedoch und da steht:

----------------------
For this example, the complete OFFSET IN specification with associated 
PERIOD
constraint is:

NET "SysCLk" TNM_NET = "SysClk";
TIMESPEC "TS_SysClk" = PERIOD "SysClk" 5 ns HIGH 50%;
OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE "SysClk" RISING;
OFFSET = IN 1.25 ns VALID 2.5 ns BEFORE "SysClk" FALLING;

This global constraint covers both the data bits of the bus
----------------------

Da ist nirgendwo die Rede davon, dass man die Datensignale noch mit 
angeben muss. Habe ich da was falsch interpretiert? Sorry ich bin da 
noch relativ neu im Thema Constraints.

Danke schonmal!
Gast
Lothar Miller schrieb:
> FPGA schrieb im Beitrag #3836011:
>> Da ist nirgendwo die Rede davon, dass man die Datensignale noch mit
>> angeben muss.
> Dieses Constraint betrifft alle Signale, die mit Sys_clk getaktet
> werden.

Hallo Lothar,
Danke für die Rückmeldung,

genau das habe ich mir gedacht. Wenn ich nun will, dass es nicht global, 
sondern nur für ausgewählte Datensignale gilt, muss ich es dann so 
formulieren?

NET "SysCLk" TNM_NET = "SysClk";
TIMESPEC "TS_SysClk" = PERIOD "SysClk" 5 ns HIGH 50%;
OFFSET Datensignal = IN 1.25 ns VALID 2.5 ns BEFORE "SysClk" RISING;
OFFSET Datensignal = IN 1.25 ns VALID 2.5 ns BEFORE "SysClk" FALLING;
Gast
Hallo Christian,

danke für deine Rückmeldungen. Ich habe noch eine Frage zu den 
IDDR-Registern. Ich bin grade dabei das zu implementieren. Es gibt da 3 
Modi:

- OPPOSITE_EDGE
- SAME_EDGE
- SAME_EDGE_PIPELINED

Die unterschiede im Timing sind mir klar. Geht aus dem User Guide auf 
Seite 320 hervor. Allerdings bin ich mir nicht ganz sicher was da die 
vor und Nachteile sind. Ich nehme an SAME_EDGE_PIPELINED wird schneller 
sein (Pipline) als die anderen beiden Modi. Im Prinzip passt 
OPPOSITE_EDGE in mein Konzept. Rein aus Neugier wüsste ich jedoch gerne 
wann man die anderen beiden Modi nutzt.

Danke und Gruß
FPGA
Gast
Hier nur mit anderen Signalen/-Namen, müsste funktionieren:

NET "PHY_GMII_RXCLK" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXCTRL" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXD[0]" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXD[1]" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXD[2]" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXD[3]" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXD[4]" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXD[5]" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXD[6]" IOSTANDARD = LVCMOS18;
NET "PHY_GMII_RXD[7]" IOSTANDARD = LVCMOS18;

NET "PHY_GMII_RXCLK" TNM_NET = "PHY_GMII_RXCLK";
TIMESPEC TS_PHY_GMII_RXCLK = PERIOD "PHY_GMII_RXCLK" 125 MHz HIGH 50 %;


INST "PHY_GMII_RXCTRL" TNM = "RX_SIGS";
INST "PHY_GMII_RXD*" TNM = "RX_SIGS";
TIMEGRP "RX_SIGS" OFFSET = IN 2.5 ns VALID 3 ns BEFORE "PHY_GMII_RXCLK" 
RISING;

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.