Ich bin keine VHDL-Leuchte, deshalb die Frage. Ich will den 8b/10b-Codec von Ken Boyette (opencores.org) in einem Spartan 3AN verwenden. ISE 10.1. bemängelt jetzt aber jegliche VHDL-Unebenheiten und Schludrigkeiten. Unter anderem das hier: -- PROCESS: SYNCRST; Synchronize and delay RESET one clock for startup begin SYNCRST: process (RESET, XLRESET, SBYTECLK) begin if SBYTECLK'event and SBYTECLK = '1' then XLRESET <= RESET ; elsif SBYTECLK'event and SBYTECLK = '0' then LRESET <= XLRESET ; end if ; end process SYNCRST ; Die Meldung lautet sinngemäß: "Signal LRESET kann nicht synthesiert werden. Schlechter Stil zur Beschreibung synchroner Prozesse. Wird in der jetzigen Softwareversion nicht mehr unterstützt" Auweia. Wie wäre es denn richtig und schön? Die gesamte VHDL-Datei wollte ich aus urheberrechtlichen Gründen nicht anhängen.
In den meisten FPGA gibt es einfach keine Elemente, die auf beide Flanken eines Signals sensitiv sein koennen. Die Erkennung von Flanken an Signalen funktioniert in synthetisierbarem Code anders. Siehe VHDL Flankenerkennung
Der o.g. Encoder lebt leider davon: "Bits KI, HI, GI an FI are latched internally on the falling edge of the SBYTECLK, Bits EI, DI, CI, BI, AI ... on the rising edge..." Mist. Was kann man da tun? Einen zweiten, dazu invertierten Takt definieren, dessen steigende Flanke dann genutzt wird?
> SYNCRST: process (RESET, XLRESET, SBYTECLK) Von der Synthetisierbarkeit abgesehen wäre der obige Prozess nur auf den Takt sensitiv. Die beiden Reset-Signale sind in der Sensitivliste unnötig. > Was kann man da tun? Einen zweiten, dazu invertierten Takt definieren, > dessen steigende Flanke dann genutzt wird? Im Idealfall hast du in deinem Design nur 1 Mastertakt und alle beteiligten Komponenten (Flipflops) auf dem FPGA reagieren nur auf dessen steigende Flanke. > Der o.g. Encoder lebt leider davon: > "Bits KI, HI, GI an FI are latched internally on the falling edge of the > SBYTECLK, Bits EI, DI, CI, BI, AI ... on the rising edge..." Welche Frequenz hat dein SBYTECLK? Welche Frequenz hat dein FPGA-Mastertakt?
FPGA-Mastertakt: 33,333 MHz. SBYTECLK wäre die Hälfte davon. > Die beiden Reset-Signale sind in der Sensitivliste unnötig. Das dachte ich auch, hier meldet sich die ISE neuerdings auch mit Warnungen, wenn man meint, das wäre überflüssig. Ich musste die Sensitivitätslisten, die in der ISE 8.1. als einwandfrei erkannt wurden, alle entsprechend nacharbeiten. :-(
> Das dachte ich auch, hier meldet sich die ISE neuerdings auch mit > Warnungen, wenn man meint, das wäre überflüssig. Die wären nicht überflüssig, die sind überflüssig. :-o > FPGA-Mastertakt: 33,333 MHz. PCI? > SBYTECLK wäre die Hälfte davon. Ist dieser Takt synchron zu den 33 MHz? Wenn ja:
1 | process (clk33) begin |
2 | if rising_edge(clk33) then |
3 | if SBYTECLK ='1' then |
4 | XLRESET <= RESET ; |
5 | else
|
6 | RESET <= XLRESET ; |
7 | end if; |
8 | end if; |
9 | end process; |
Wenn nein: Vervielfache den 33MHz Takt mit einem DCM und mach eine Flankenerkennung wie "üblich".
@ Lothar, vielen Dank, das werde ich mal probieren. Der SBYTE... ist synchron zum Master. Das ich diesen Coder/Decoder verwenden will, liegt daran, dass der Perl-Script für den Wrapper und die Implementierung des 8b/10b aus den XAPP1112 und XAPP1122 nicht funktionieren will... Aber der alte, inzwischen zurückgezogene aus XAPP3xx lief ja auch nicht.
Ich habe nach Lothars Rezept gehandelt, die ISE nimmt jetzt den VHDL-File und macht auch einen Schaltkreis daraus. Jetzt muss ich nur noch sehen, ob der Encoder auch noch in praxi das richtige macht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.