Forum: FPGA, VHDL & Co. VHDL: std_logic_vector aufteilen


von Matthias (Gast)


Lesenswert?

Hallo,

ich hoffe bei euch schnelle Hilfe auf mein Problem zu finden; VHDL-Foren 
scheinen ja recht rar zu sein. :-(

Das Problem ist folgendes: Der Eingabewert dataIn des Prozesses ist ein 
std_logic_vector(count*size - 1 downto 0). Dieser läßt sich in count 
gleichgroße Untervektoren zerlegen, auf die jeweils eine Funktion 
convert angewendet werden soll. Der Ausgabevektor dataOut ist genauso 
groß wie der Eingabevektor.

Bei der Simulation bekomme ich nun aber einen Fehler in der 
convert-Funktion: Index 0 out of range (9 downto 5). Offenbar kommt dort 
als Eingabe ein Vektor an, dessen Range nicht wie gewünscht (size-1 
downto 0) ist, sondern das Original-Range aus dem Vektor dataIn. Welche 
Möglichkeiten gibt es nun, dieses Problem zu beheben?

1
function convert(input : std_logic_vector; constant width : natural) return std_logic_vector is
2
begin
3
    -- Hier wird ein wenig an den Bits geschraubt
4
end function;
5
6
process(dataIn)
7
begin
8
    for i in 0 to count-1 loop
9
        dataOut(size*(i+1)-1 downto size*i) <= convert(dataIn(size*(i+1)-1 downto size*i), size);
10
    end loop;
11
end process;


Viele Grüße,

Matthias

von Mark (Gast)


Lesenswert?

Hallo Matthias,

leider fehlt der Code in der Convert Funktion und so ist es etwas
schwieriger die Lösung  zu finden.
Ich würde aber fast wetten dass es klappt, wenn Du den Input-Vektor
in der convert-Funktion zunächst einer Variablen übergibst.
Diese Variable hat denselben Typ und dieselbe Breite wie der 
Input-Vektor, also
variable x : std_logic_vector(width-1 downto 0)

x := input;

und dann die Operationen mit x durchführen.

Gib mal Bescheid ob das funktioniert.

von Matthias (Gast)


Lesenswert?

Vielen Dank für die schnelle Hilfe, Mark! Das hat tatsächlich geklappt.

Mit ist dabei auch klar geworden, wie VHDL da bei der Zuweisung von 
Teilvektoren genau arbeitet. Würde ich den Argumentvektor in convert 
also definieren als std_logic_vector(width-1 downto 0), dann würde es 
wohl auch ohne zusätzliche Variable funktionieren. Leider verbietet der 
Sprachstandard sowas.


Viele Grüße,

Matthias

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.