Forum: FPGA, VHDL & Co. VHDL Eingabe einer Entity setzen und direkt auswerten


von Erasmus (Gast)


Lesenswert?

Hallo,

ich habe momentan das Problem, dass ich gerne eine Rechnung in eine 
Entity auslagern möchte, dabei handelt es sich um reine Kombinatorik. 
Aber dann kann ich die Ausgabe nicht mehr im selben Prozess direkt im 
selben Takt auswerten, jedenfalls sehe ich keine Möglichkeit wie ich das 
in VHDL formulieren soll. Wenn ich die Auslagerung in eine eigene Entity 
weglasse, dann habe ich die Möglichkeit Variablen zu nutzen.

Hier ein Beispiel:
1
process (clk) is
2
    variable test: integer;
3
begin
4
    if rising_edge(clk) then
5
        test := sig1 + 4;
6
        sig2 <= test;
7
    
8
        if test = 0 then
9
            ...
10
        end if;
11
    end if;
12
end process;

Was ich dann suche ist das gleiche Verhalten, nur dass die Addition in 
einer eigenen Entity stattfindet. Vielen Dank.

von VHDL hotline (Gast)


Lesenswert?

Wenn es nur um die Kapselung der Rechnung geht, dafür gibt es 
function/procedure in VHDL.

von Markus F. (mfro)


Lesenswert?

Erasmus schrieb:
> Hier ein Beispiel:

"test" ist hier praktisch nur eine "Abkürzung" für "sig1 + 4".

Wenn Du überall, wo Du "test" geschrieben hast, dafür wieder "sig1 + 4" 
schreibst, brauchst Du die Veriable nicht mehr (und kannst das Ganze 
dann auch in eine separate Entity verfrachten).

von Vancouver (Gast)


Lesenswert?

Eine Entity ist die Schnittstelle einer VHDL-Component. Du kannst keine 
Berechnung in eine Entity auslagern, eine Entity kann nichts berechnen. 
Du könntest höchstens eine VHDL-Component schreiben, die zu einem 
Eingangsvektor 4 hinzuaddiert (diese Komponente hätte dann eine Entity).
Und ja, dann müsstest Du den Code ganz anders aufziehen, du kannst keine 
strukturelle und Verhaltensbeschreibung innerhalb eines Prozesses 
mischen.
Eine Komponente, die nur +4 rechnet, ist auch nicht wiklich sinnvoll. 
Was Du suchst, ist wohl eine Funktion, wie von hotline beschrieben.

Falls Du es aber unbedingt mit einer Komponente machen willst: 
Komponente außerhalb des Prozesses instanziieren und test als 
Aussgangssignal verweden. Test ist dann ein Signal und keine Variable 
und muss auch außerhalb des Prozesses deklariert werden. Innerhalb des 
Prozesses kannst Du test dann wie bisher auswerten.

von Vancouver (Gast)


Lesenswert?

Warum sollte das nicht gehen? Die Komponente als solche muss nicht 
zwingend einen Takt haben. Damit ergibt sich auch die Möglichkeit, es 
mit Variablen und ohne Variablen in demselben Takt zu erledigen.

von Vancouver (Gast)


Lesenswert?

Vancouver schrieb:
> Warum sollte das nicht gehen? Die Komponente als solche muss nicht
> zwingend einen Takt haben. Damit ergibt sich auch die Möglichkeit, es
> mit Variablen und ohne Variablen in demselben Takt zu erledigen.

Da hat wohl jemand versehentlich meinen Nick verwendet. Das Posting ist 
nicht von mir.

von Erasmus (Gast)


Lesenswert?

VHDL hotline schrieb im Beitrag #5522712:
> Wenn es nur um die Kapselung der Rechnung geht, dafür gibt es
> function/procedure in VHDL.

Ja darauf läuft es wohl hinaus.

Vancouver schrieb:
> Eine Entity ist die Schnittstelle einer VHDL-Component. Du kannst keine
> Berechnung in eine Entity auslagern, eine Entity kann nichts berechnen.
> Du könntest höchstens eine VHDL-Component schreiben, die zu einem
> Eingangsvektor 4 hinzuaddiert (diese Komponente hätte dann eine Entity).
> Und ja, dann müsstest Du den Code ganz anders aufziehen, du kannst keine
> strukturelle und Verhaltensbeschreibung innerhalb eines Prozesses
> mischen.

Ja stimmt.

Vancouver schrieb:
> Eine Komponente, die nur +4 rechnet, ist auch nicht wiklich sinnvoll.
> Was Du suchst, ist wohl eine Funktion, wie von hotline beschrieben.

Das war ja nur ein sehr vereinfachtes Beispiel. Die Rechnung ist schon 
etwas komplexer, aber immer noch durch reine Kombinatorik lösbar.

Vancouver schrieb:
> Falls Du es aber unbedingt mit einer Komponente machen willst:
> Komponente außerhalb des Prozesses instanziieren und test als
> Aussgangssignal verweden. Test ist dann ein Signal und keine Variable
> und muss auch außerhalb des Prozesses deklariert werden. Innerhalb des
> Prozesses kannst Du test dann wie bisher auswerten.

Ah daran habe ich nicht gedacht. Aber der Weg über eine VHDL-Funktion 
gefällt mir doch besser.

Vielen Dank!

von berndl (Gast)


Lesenswert?

Erasmus schrieb:
> ich habe momentan das Problem, dass ich gerne eine Rechnung in eine
> Entity auslagern möchte, dabei handelt es sich um reine Kombinatorik.

und warum baust du da nicht eine Entity und beschreibst die Funktion mit 
'concurrent' Statements? Mir scheint, du hast noch nicht wirklich 
verstanden, was in VHDL im 'process' eine Variable ist... (Googeln 
bringt dich auf ein schoenes Beispiel hier im Forum)

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.