www.mikrocontroller.net

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


Autor: Bernd G. (Firma: LWL flex SSI) (berndg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Bernd G. (Firma: LWL flex SSI) (berndg)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Bernd G. (Firma: LWL flex SSI) (berndg)
Datum:

Bewertung
0 lesenswert
nicht 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.  :-(

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
   process (clk33) begin
      if rising_edge(clk33) then
         if SBYTECLK ='1' then
            XLRESET <= RESET ;
         else
            RESET <= XLRESET ;
         end if;
      end if;
   end process;

Wenn nein:
Vervielfache den 33MHz Takt mit einem DCM und mach eine Flankenerkennung 
wie "üblich".

Autor: Bernd G. (Firma: LWL flex SSI) (berndg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Bernd G. (Firma: LWL flex SSI) (berndg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.