Forum: FPGA, VHDL & Co. ISE10.1 bemängelt schlechten VHDL-Stil


von Bernd G. (Gast)


Lesenswert?

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.

von Jan M. (mueschel)


Lesenswert?

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

von Bernd G. (Gast)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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?

von Bernd G. (Gast)


Lesenswert?

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.  :-(

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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".

von Bernd G. (Gast)


Lesenswert?

@ 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.

von Bernd G. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.