Wie designe ich dieses case am besten?

#509577
Lesenswert?

Hallo,

ich habe eine verzweigte if-case-Anweisung in dieser Form:
1
if RW = '0' then
2
  case DP_M is
3
   when "0000" => blabla
4
   when "0001" => blabla, etc
5
  end case;
6
else
7
  case DP_M is
8
   when "0000" => blabla
9
   when "0001" => blabla, etc
10
  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?
#509628
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
#509633
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)
Gast #509760
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren