www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Wie designe ich dieses case am besten?


Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine verzweigte if-case-Anweisung in dieser Form:
if RW = '0' then
  case DP_M is
   when "0000" => blabla
   when "0001" => blabla, etc
  end case;
else
  case DP_M is
   when "0000" => blabla
   when "0001" => blabla, etc
  end case;

Ich habe also in beiden Fällen (also wenn RW 1 oder 0 ist),
Abfragen für DP_M. Bei den meisten Fällin sehen
die Anweisungen für die einzelnen cases von DP_M auch
anders aus für RW = 1 bzw. 0.
Aber bei manchen sind sie auch gleich.
Und da frage ich mich (bzw. euch ;) ) natürlich gleich,
ob es da eine resourcensparendere Methode gibt, als
in beiden case-Anweisungen die identischen Zeilen zu schreiben.
Weiß da jemand was pfiffiges?

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine erste Verbesserung ergibt sich,
wenn außen die Case-Anweisung steht,
und dann in den einzelnen Fällen RW gecheckt wird,
bzw. bei den Fällen, die gleich sind, wird es halt weggelassen.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob es wirklich einen Unterschied macht ob das iF oder das Case außen 
steht ist sehr fraglich, da letztentlich in der Hardware die Signale in 
der gleichen Art verknüpft werden müssen.
Das RW wird in Hardware nicht vorher, sondern gleichzeitig mit DP_M 
geprüft.

Eine Einsparung ergibt sich nur, wenn Du dem Compiler mitteilen kannst, 
daß bestimmte Kombinationen nicht relevant sind, z.B.

case Adr is
   when "00" =>
      Data <= "0000";
   when "01" =>
      Data <= "0100";
   when others =>
      Data <= "----";   -- don't care
end case;

Grüße
Klaus

Autor: Christian Peters (kron)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt einen großen Unterschied!
Hier die Werte nach der Synthese für If außen,
in Klammern dahinter sind die Werte bei Case außen:

Number of Slices:                     306  out of    768    39%  (251)
Number of Slice Flip Flops:           398  out of   1536    25%  (354)
Number of 4 input LUTs:               391  out of   1536    25%  (299)
Number of bonded IOBs:                 71  out of    124    57%  (66)
IOB Flip Flops: 30
Number of GCLKs:                        4  out of      8    50%


Timing Summary:
---------------
Speed Grade: -4

Minimum period: 14.544ns (Maximum Frequency: 68.757MHz) (88.921MHz)
Minimum input arrival time before clock: 10.171ns (9.158ns)
Maximum output required time after clock: 9.322ns (9.322ns)
Maximum combinational path delay: 12.518ns (14.106ns)

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehr interessant. Das macht als doch schon eine Menge aus. Welchen 
Compiler hast Du denn benutzt?

Grüsse

Sebastian

Autor: na (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was passiert denn bei der Zuweisung? Wenn es nicht zu viel ist kann man 
da manchmal durch geschickte Verknüpfung was erreichen.

Autor: Frank (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst ein fehler in deinem Quellcode haben.
Die anzahl der IOB sollet bei beiden Lösungen gleich sein, das ist 
jedoch nicht der fall. Mir scheint, dass bei der version "case außen" 
etwas wegsynthesiert wird. Vielleicht simulierst Du beides mal, ob sie 
tatsächlich das gleiche verhalten aufweisen?
frank

Autor: na (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder du fragst case(RW & DP_M(0)) ab, kommt ein einfacher 4-MUX raus.

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.