www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Lookuptable in Quartus


Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Da ich gerade anfange mich mit VHDL zu beschäftigen probiere ich
gerade viel mit dem Xilinx-Webpack und Altera Quartus herum. Dabei
ist mir neben vielen anderen Eigenheiten aufgefallen das Quartus
offensichtlich deutlich anderen RTL-Kode erzeugt. Aus dem folgenden
Kode erzeugt das Xilinx Webpack eine Lookuptable in einem Blockram,
Quartus dagegen eine Kette von 16 Multiplexern.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;


entity BinTo7Seg is
  port(InBin   : in  std_logic_vector(3 downto 0);
     Out7Seg : out std_logic_vector(6 downto 0) );
end BinTo7Seg;

architecture behavioral of BinTo7Seg is
begin
  Out7Seg <= "1000000" when InBin = "0000" else 
          "1111001" when InBin = "0001" else 
          "0100100" when InBin = "0010" else 
              "0110000" when InBin = "0011" else
              "0011001" when InBin = "0100" else
          "0010010" when InBin = "0101" else
          "0000010" when InBin = "0110" else
          "1111000" when InBin = "0111" else
          "0000000" when InBin = "1000" else
          "0010000" when InBin = "1001" else
          "0001000" when InBin = "1010" else
          "0000011" when InBin = "1011" else
          "1000110" when InBin = "1100" else
          "0100001" when InBin = "1101" else
          "0000110" when InBin = "1110" else
             "0001110";
end behavioral;

Die derzeitigen Entwürfe sind sicher unkritisch, aber irgenwie kommt
mir diese Variante mit den Multiplexern ziemlich ineffizient
hinsichtlich Ressourcen und Geschwindigkeit vor. Wenn die Logikelemente
eh aus Lookuptables bestehen könnte man die doch zusammenfassen,
oder übersehe ich da etwas?

An einer anderen Stelle fügt Quartus 3 Multiplexer mit identischen
Eingängen ein anstatt die Selectsignale miteinander zu verknüpfen.
Überhaupt scheint Quartus nur Multiplexer, Adder, Fli-Flops und
Vergleicher zu kennen. Ich habe im RTL-View noch keine aufgelöste
Logik gefunden. Gibt es irgendwelche Schalter wo ich die
Synthesergebnisse beeinflußen kann?

Jens

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Xilinx erzeugt bei mir keine Lookup-Table in einem BlockRam, sondern ein 
16x7-Bit ROM, welches aus sieben gewöhnlichen 4-Bit-LUTs aufgebaut ist
(aus "Design Summary": Number of 4 input LUTs : 7).

Quartus benutzt dafür auch sieben 4-Bit-LUTs (aus "Flow Summary": Total 
Logic Elements: 7).

Das was Du in den RTL-Viewern siehst, ist nicht die niedrigste Ebene.

Was mir bei Quartus aufgefallen ist, ist dass es Deine when-else-Kaskade 
wohl tatsächlich als Prioritätslogik umsetzt und nicht optimiert.
Du kannst stattdessen ein "select ... with" benutzen oder eine 
case-Anweisung.

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Grundelement für logik ist bei Xilinx eine LUT mit 4 Eingängen, bei 
Altera mit 6 Eingängen. In einem Altera kann man also breite Logik bauen 
ohne BRAM's zu "verschwenden". Ob die erwähnten Muxer wirklich Muxer im 
Silizium sind oder nur Library elemente die in die 6-LUT abgebildet 
werden kann ich nicht sagen.

Schalter für das mapping (ob das mit BRAM,Muxer oder anderen Primitiven 
gemacht wird) findest du bei Xilinx beim synthesetool (XST) und 
teilweise beim Mapping. Bei Qartus sollte der interessierende prozeß 
auch Mapping heissen.

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
6-Bit-LUTs haben bei Altera nur die Stratix III.
Und Muxer werden immer nur auf LUTs abgebildet.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zunächst danke für die Antworten.

Meine Frage bei der ganzen Sache ist ja weniger wie ein Muxer dann
im FPGA realisiert ist. Ich hätte (als VHDL-Anfänger) halt erwartet
das die Software eine Lookuptable irgenwie cleverer hinbekommt als
in Form von 16 verketteten Multiplexern, wo dann jeweils der ausgewählte
Wert in die Kette 'eingespeist' wird.

Jens

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie gesagt, wenn Du statt when-else ein with-select benutzt, macht er 
Dir eine ideale Implementierung daraus: sieben 4-Bit-LUTs.
Im RTL-Viewer werden diese dann als MUX bezeichnet.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Xenu:

Das werde ich heute Abend mal probieren.

Jens

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Lookuptable irgenwie cleverer hinbekommt"

Es wird wie beschrieben umgesetzt, VHDL als Beschreibungssprache 
überläßt die Optimierung zu großen teil dem Designer. Was ja auch 
verständlich ist, das es im FPGA Entwurf mehrere, zum teil 
widersprechende Optimierungsziele gibt (Taktung,Verbrauch an den 
jeweiligen FPGA resourcen,Stromaufnahme etc). Z.B. wird sich der 
designer mächtig ärgern, wenn er nach der Synthese
einen IP-Core einbindet der 2 BRAM's einbinden will, aber die synthese 
alles BRAM's für FSM oder Muxer verbraten hat um slices zu sparen.

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@FPGAküchle:

Das klingt plausibel, nur tue ich mich im Moment sehr schwer
vorherzusehen was die Tools aus den jeweiligen VHDL-Konstrukten
erzeugen. Deshalb ja auch der blick in RTL-Darstellung. Bis
jetzt habe ich leider auch kein Buch gefunden, welches bei
dieser Frage weiterhilft. Wobei, die Frage nach einem guten
Buch ist sowieso ein anderes Kapitel.

Im Moment habe ich einfach das Gefühl das es nicht genügt VHDL
zu können, man sollte auch noch für eine ganze Reihe von
typischen Konstrukten wissen was die Tools dann daraus erzeugen.

Jens

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sowas steht für Xilinx im XST User Guide, für Quartus gibt es sicher 
etwas ähnliches.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jens,

baue das ganze mal mit dem CASE Befehl auf. Dann sieht die Sache 
bestimmt besser aus und du bekommst keine prioritaeten hinein.

Stefan

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@All:

Ich habs gestern Abend mit with...select probiert und da
sieht das Ergebniss gut aus. Ich habe dann noch eine Weile
herumprobiert und dabei ist mir aufgefallen das Quartus
im RTL-View mit Vorliebe Vergleicher einbaut, auch wenn
ein UND über den Vector reichen würde. Ist das nur um
die Übersicht im RTL-View zu erhöhen oder wird dann am
Ende wirklich ein Vergleicher implementiert?

Jens

Autor: Ulf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Quartus die MUX am Ende realisiert, lässt sich mit den 
setup-Einstellungen beeinflussen. "Restruture Multiplexers" z.B. 
optimiert die auf Fläche / Resourcen.

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.