VHDL Code vereinfachung

Gast #2265691
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?
Moderator (Firma: Titel) Persönliche Seite #2265700
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?
Gast #2265721
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.
Moderator (Firma: Titel) Persönliche Seite #2267306
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.

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