Forum: FPGA, VHDL & Co. 2 VHDL Fragen


von Fabian S. (jacky2k)


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?

von H. G. (Gast)


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.

von Fabian S. (jacky2k)


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.

von Duke Scarring (Gast)


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

von Fabian S. (jacky2k)


Lesenswert?

Super, das hat schon mal funktioniert.

@Gerald: Wenn ich das nun so gemacht habe wie ich es gemacht habe, baut 
er mir dann da so ein ROM draus? Oder gehts noch kompakter?

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.