mikrocontroller.net

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


Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

function convert(input : std_logic_vector; constant width : natural) return std_logic_vector is
begin
    -- Hier wird ein wenig an den Bits geschraubt
end function;

process(dataIn)
begin
    for i in 0 to count-1 loop
        dataOut(size*(i+1)-1 downto size*i) <= convert(dataIn(size*(i+1)-1 downto size*i), size);
    end loop;
end process;


Viele Grüße,

Matthias

Autor: Mark (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.