Fehler bei Case-Anweisung

OP #531237
Hallo,

ich habe folgende Case-Anweisung:
...
1
signal wert1  : integer := 10;
2
...
3
process(clk)
4
begin
5
if rising_edge(clk) then
6
  case data_in(wert1 downto wert1 -3) is
7
    when "0000" => data_out <= '1';
8
    when "0010" => data_out <= '1';
9
    when "1011" => data_out <= '0';
10
    when others => data_out <= '0';
11
  end case;

Dies ist nur ein Beispielcode, da der Original-Code alles unnötig 
kompliziert machen würde. Data_in ist ein 8-Bit Vector, data_out ist ein 
1-Bit Vector.
Es erscheint folgende Fehlermeldung:
ERROR:HDLParsers:839 - Selector (Slice name of type std_logic_vector) is 
an unconstrained array.

Scheinbar hapert es am Case-Selektor. Wie kann man diesen Fehler 
umgehen, sodass die Case Anweisung dynamisch(je nach Wert1) agiert?

Vielen Dank

Daniel

Das muss eigentlich schon gehen -
ich hab erst so ein Konstrukt erfolgreich synthetisiert:
1
addr <= adrgen_addr((31-masksize) downto (31-(masksize+(LENGTH-1))));
masksize ist auch ein integer. LENGTH ist ein integer per generic {}; 
definiert.

Also eigentlich wundert mich das, dass das bei dir nicht geht.

Ich glaub eher, dass das Problem nicht in dem kleinen Schnippsel zu 
suchen ist - kannst du mal alles posten?

Mfg
Thomas Pototschnig
OP
Hallo,

@Thomas:
Leider liegt es nicht an data_out <= "1";... data_out war im Beispiel 
std_logic;

Im Anhang liegt das komplette VHDL-File. Es dient später als Component. 
Das ganze soll folgendes bewerkstelligen:
1.Umrechnen von binären Eingangsdaten in 4-Bit BCD
2.Umrechnen von 4-Bit BCD in 7-Segment-Kodierung
3.Multiplexen der 7-Segment Anzeigen(10 darzustellende Stellen auf 4 
reale Stellen)
4.Durchschieben der Zahlen/Buchstaben auf der Anzeige(Laufschrift)

Die Case Anweisung(ziemlich unten im Code) soll nun in Abhängigkeit von 
digit_counter je 4 Bit aus dem BCD-Register(alle Zahlen stehen in BCD 
drin) holen, diese in 7-Segment-Kodierung umrechnen und dann ins 
Ausgaberegister(segment_shiftreg) an der richtigen Stelle in 
Abhängigkeit von digit_counter wieder einfügen.

Scheinbar gefällt ihm da was nicht... Ich kann es mir nicht erklären. 
Bei einem festen Wert im Case-Selektor(z.B. 7 downto 4) geht alles 
problemlos. Sobald der Wert von einem Signal abhängig ist erscheint der 
o.g. Fehler.

Vielen Dank für Eure Mühe.


Daniel
Angehängte Dateien:
Gast
@Daniel R.

>Leider liegt es nicht an data_out <= "1";... data_out war im Beispiel
>std_logic;

Tut es auch nicht. Aber deine wilden variablen Vektorindizes bringen 
VHDL ins Schwitzen. Das geht vielleicht in C, VHDL ist hier ein wenig 
anders.

Deine erste Fehlermeldung hab ich beseitigt durch einen Workaround. 
Allerdings kommt jetzt ne neue Fehlermeldung. Die hat das gleiche 
Problem, du arbeitest hier zu viel mit variablen Indices. Das ist in 
VHDL nicht so einfach und üblich. Definier einen neunen Datentyp ala

type my_array is array of std_logic_vector(7 downto 0);

Dan kannst du über die Definition

signal my_data_array: my_array;

auf die einzelnen Elemtente deine Daten für die einzelnen Stellen 
verteilen. Der Zugriff ala

my_data_array(digit_counter) = "10101010";

sollte dann passen.

Im Anhang liegt das komplette VHDL-File. Es dient später als Component.

MfG
Falk
Angehängte Dateien:
OP
Naja. Mit C hab ich nix zu tun. Das das bisschen rumrechnen schon zuviel 
ist -.-
Auf nen Array hab ich eigentlich gar keine Lust. Erst wieder alles 
reinpacken... Aber wird wohl nicht anders gehen.
Ich melde mich..
Vielen Dank!

Daniel

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.