2 VHDL Fragen

#2299426
Lesenswert?

Hallo,

ich habe zwei Fragen zu VHDL:
1) Ich muss eine Look-Up-Table bauen, rein geht ein 6 Bit-Vektor und 
raus soll ein unsigned kommen. Momentan habe ich das in eine Funktion 
getan und darin mit einem riesen case alle Kombinationen durch geeiert. 
Gibt es eine effizientere Möglichkeit?

2) Die Funktion soll einen unsigned-Wert mit 32 Bit zurück geben. Wenn 
ich nun allerdings ein return mit einer Zahl größer gleich 2^31 mache 
sagt er mir, dass die Zahl größer sei als integer'high (wenn ich mich 
recht entsinne). Warum integer? Das ist ein unsigned. Und wie kann ich 
ihn überreden dennoch so große Werte zu fressen?
Gast #2299442
Lesenswert?

1) Ja, mit einem ROM, aber wenn Du alles korrekt beschrieben hast, baut 
er Dir auch aus cases ein solches (LUTs). Die flexible Beschreibung mit 
cases veranlasst die Synthese, die Terme zu optimieren. D.h. es wirk 
kleiner bei u.U. längerem Pfad.

2) cast Problem? - ohne code schwer zu beantworten.
#2299454
Lesenswert?

1) Hmm joa ok, habe gerade gesehen, dass da ein Muster in den Zahen ist. 
Werde das heute Abend nochmal umschreiben und schauen ob er mehr/weniger 
Platz dafür braucht ;)

2) Hab das gerade nich da, ausm Kopf:
1
function myfunc (pointer : bit_vector) return unsigned(31 downto 0)
2
begin
3
  case pointer is
4
    when "000000" => return to_unsigned(4000000000, 32);
5
    -- usw.
6
  end case;
7
end myfunc;

Wie gesagt, ist jetzt ausm Kopf. Wenn das nicht reicht, poste ich das 
heute Abend noch mal.
Gast #2299488
Lesenswert?

Fabian S. schrieb:
> when "000000" => return to_unsigned(4000000000, 32);
Die 4000000000 ist zu groß für integer (−2.147.483.648 bis 
2.147.483.647) und damit für die to_unsigned-Funktion.

Du könntest es so schreiben:
1
function myfunc (pointer : bit_vector) return unsigned(31 downto 0)
2
begin
3
  case pointer is
4
    when "000000" => return x"EE6B2800";
5
    -- usw.
6
  end case;
7
end myfunc;

Duke

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