VHDL: std_logic_vector aufteilen

Gast #894577
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
Gast #894675
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.
Gast #895157
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

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