zugriff auf ein std_logic_vector element in einem Array

OP #1493034
hallo,

ich habe folgendes problem:

in einem array aus std_logic_vector elementen möchte ich auf ein 
einzelnes bit des vektors zugreifen.
also undgefähr so:

foobar <= array(x) -> std_logic_vector(y)
also so ähnlich wie in c :-) mit '.' oder '->'

sollte den vector dann natürlich auch in ein std_logic wandeln, das is 
mir klar. weiss nur nicht wie ich darauf zugreifen kann.

mfg


Andi
Gast
1
type table is ARRAY (natural range <>) OF std_logic_vector (3 downto 0);
2
constant table1: table := ("1111","1010","0011");
3

4
...
5

6
bitwert <= table1(1)(2);

Sollte aus dem ersten Tabelleneintrag das zweite Bit zurückliefern
Gast
Schrotty schrieb:
> type table is ARRAY (natural range <>) OF std_logic_vector (3 downto 0);
> constant table1: table := ("1111","1010","0011");

Wenn man nun diese Werte aus table addieren möchte, also (1111) + (1010) 
+ (0011), wie geht man da am besten vor (am besten auch synthetisierbar 
sein)?
Gast
Das Ganze dient erst einmal zur Übung, bzw. zum  Verständnis mit dem 
Umgang von arithmetischen Operationen.

Nun möchte ich  Werte einlesen, welche indiziert werden, um später eine 
Positionsbestimmung zu realisieren. Ich habe mir dabei jetzt folgendes 
gedacht: Ich definiere ein Array aus std_logic_vectoren:
1
type table is Array (6 downto 0) of std_logic_vector (7 downto 0);
 und definiere nun Werte
1
constant vec_value: table := ("00000000","00000001","00000010","00000010","00000010","00000110","00010010");

Um nun die Summe aller enthaltenen Vektorewerte zu bestimmen, würde ich 
eine For-Schleife definieren, welche so oft iteriert, so viele Elemente 
auch vorhanden sind.
1
signal array_length : std_logic_vector(vec_value'length downto 0); 
2
signal tmp : integer := 0 ;
1
for i in 0 to array_length-1 loop  
2
    tmp <= tmp + conv_integer(vec_value(i));
3
  end loop;    
4
    SUM <= conv_std_logic_vector(tmp);

Bei der Forschleife bekomme ich nun folgende Fehlermeldung:
"Syntax error near "in"". Ob danach noch weitere Fehler kommen, konnte 
ich leider noch nicht feststellen.

Das Ganze sieh jetzt wie folgt aus(Hier ist jetzt noch kein Übertrag 
implementiert. ):
1
library IEEE;
2
use IEEE.STD_LOGIC_1164.ALL;
3
use ieee.std_logic_arith.all;  
4
use ieee.std_logic_unsigned.all;
5

6

7
entity COG is
8
port (
9
  --  A, B : in std_logic_vector(7 downto 0);
10
  --  CI : in std_logic;
11
    SUM : out std_logic_vector(7 downto 0);
12
  --  CO : out std_logic);
13
end COG;
14

15
architecture Behavioral of COG is
16

17

18
constant vec_value: table := ("00000000","00000001","00000010","00000010","00000010","00000110","00010010");
19

20
signal tmp : integer := 0 ;
21
signal array_length : std_logic_vector(vec_value'length downto 0); 
22

23
for i in 0 to array_length-1 loop    
24
    tmp <= tmp + conv_integer(vec_value(i));
25
end loop;    
26
SUM <= conv_std_logic_vector(tmp);
27

28
end Behavioral;


Wäre um jeden Rat dankbar,


grüße,

Ralf

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 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.