Forum: FPGA, VHDL & Co. VHDL Code vereinfachung


von klaus (Gast)


Lesenswert?

Hallo,

ich muss folgenden Multiplexer machen und suche eine vereinfachung:
1
CASE var1 IS 
2
when "00000" =>
3
  CASE var2 IS            
4
    WHEN '1' => tmp <= 100;    
5
    WHEN OTHERS  => tmp <= 100;     
6
  END CASE ;
7
when "00001" =>
8
  CASE var2 IS            
9
    WHEN '1' => tmp <= 96;    
10
    WHEN OTHERS  => tmp <= 104;     
11
  END CASE ;
12
when "00010" =>
13
  CASE var2 IS            
14
    WHEN '1' => tmp <= 92;    
15
    WHEN OTHERS  => tmp <= 108;     
16
  END CASE ;
17
when "00011" =>
18
  CASE var2 IS            
19
    WHEN '1' => tmp <= 88;    
20
    WHEN OTHERS  => tmp <= 112;     
21
  END CASE ;
22
.
23
.
24
.
25
.
26
.
27
.
28
.
29
.

tmp muss zum einen immer um 4 erhöht werden und zum anderen um 4 
veringert bis 0 bzw. 200 erreicht wird.
Ich bin noch nicht so fit in VHDL, aber da gibts doch sicherlich eine 
vereinfachung?

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


Lesenswert?

klaus schrieb:
> Ich bin noch nicht so fit in VHDL, aber da gibts doch sicherlich eine
> vereinfachung?
Klar: das kann man RECHNEN...
1
 if (var2='1') then
2
    temp <= 100 + var1*4;
3
 else
4
    temp <= 100 - var1*4;
5
 end if;
Wahrscheinlich sind da noch ein paar Typcasts/Konvertierungen nötig
(siehe http://www.lothar-miller.de/s9y/archives/14-Numeric_Std.html)
aber insgesamt dürfte das passen...

klaus schrieb:
> ich muss folgenden Multiplexer machen
Was daran ist ein Multiplexer?

von klaus (Gast)


Lesenswert?

Hallo,
danke für die Antwort. Ja Multiplexer ist falsch :-).

Die Vereinfachung bezog sich auf die vielen "when "00000" =>", wo ich 
die ganze Wahrheitstabelle durchmachen muss und somit 25 mal "when" 
schreiben muss.

von Mampf (Gast)


Lesenswert?

1
WHEN OTHERS  => tmp <= 100;

Hast du gewusst, dass das WHEN OTHERS von fast jedem Synthese-Tool 
einfach ignoriert wird?

Grüße,
Mampf

von dito (Gast)


Lesenswert?

Mampf schrieb:
> Hast du gewusst, dass das WHEN OTHERS von fast jedem Synthese-Tool
> einfach ignoriert wird?

Wirklich?

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


Lesenswert?

Mampf schrieb:
> Hast du gewusst, dass das WHEN OTHERS von fast jedem Synthese-Tool
> einfach ignoriert wird?
Falsch. Das when others wird nur ignoriert, wenn es ignoriert werden 
kann, weil es keine Alternativen mehr gibt. Und das ist hier sicher 
nicht der Fall:
1
  CASE var2 IS            
2
    WHEN '1' => tmp <= 88;    
3
    WHEN OTHERS  => tmp <= 112;
Denn var2 als std_logic kann noch 8 verschiedene andere Werte haben: 
'0','X','Z','U','W','H','L' und '-'
Also gibt es hier durchaus Alternativen und when others MUSS verwendet 
werden!

Wenn du aber sowas hast:
1
type zustaende : (AA,BB,CC,DD,EE);
2
signal zustand : zustaende;
3
:
4
case zustand is
5
  when AA =>  ...
6
  when BB =>  ...
7
  when CC =>  ...
8
  when others => ...
Dann wird when others tatsächlich ignoriert, weil ja schon alle 
Zustände verwendet sind.

> Hast du gewusst, dass das WHEN OTHERS von fast jedem Synthese-Tool
> einfach ignoriert wird?
Fazit: nicht einfach irgendwas nachplappern, sondern einfach mal selber 
ausprobieren.

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.