VHDL Eingabe einer Entity setzen und direkt auswerten

Gast #5522652
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.
Gast #5522999
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.
Gast #5523042
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.
Gast #5523649
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.
Gast #5523940
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!
Gast #5524424
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)

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