auf array ( vector) element zugreifen mit integer

Gast #5559744
Lesenswert?

hi,
ich wollte über einen externen integer Eingang immer ein bestimmtes bit 
auf 0 setzen.

aber ich kann weder mit dem Eingangssignal, noch mit einem internen 
Signal auf die Elemente meines Vectors zugreifen!

Bei der for schleife geht das ja einigermaßen mit dem <index>..

Hat jemand eine Idee? Vielen DAnk
1
library IEEE;
2
use IEEE.std_logic_1164.all;
3
use IEEE.std_logic_unsigned.all;
4

5
entity sch is
6
port(
7
Cin : in bit;
8
count : in integer range 0 to 7;
9
A : out bit_vector(7 downto 0)
10
);
11
end entity sch;
12

13
architecture verhalten of sch is
14
signal reg : bit_vector(7 downto 0)  := "00000001";
15
signal index : integer range 0 to 7 := 0;
16
begin
17

18
-- gesamtes signal auf 0 ;
19
reg <= (reg'range =>'0');
20
-- da ander stelle "index" soll eine 1 geschrieben werden
21
reg(index) <='1';
22
A<=reg;
23
end architecture verhalten;
Gast #5559756
Lesenswert?

Es erscheint der Fehler:

** Error: C:/Modeltech_pe_edu_10.4a/schieby.vhd(15): Nonresolved signal 
'reg' has multiple sources.
  Drivers:
    C:/Modeltech_pe_edu_10.4a/schieby.vhd(20):Conditional signal 
assignment line__20
    C:/Modeltech_pe_edu_10.4a/schieby.vhd(22):Conditional signal 
assignment line__22
** Error: C:/Modeltech_pe_edu_10.4a/schieby.vhd(24): VHDL Compiler 
exiting
Moderator (Firma: Titel) Persönliche Seite #5559759
Lesenswert?

Was passiert, wenn du sowas probierst:
1
:
2
process (reg) begin
3
  -- gesamtes signal auf 0 ;
4
  reg <= (reg'range =>'0');
5
  -- da ander stelle "index" soll eine 1 geschrieben werden
6
  reg(index) <='1';
7
end process;
8
:

Oder sowas:
1
  reg <= (index=>'1', others =>'0');


BTW: bitte [vhdl] Tags um den Code setzen! Siehe die Beschreibung über 
jedem Texteingabfeld.
Gast #5559770
Lesenswert?

ok danke!

gute Frage , wieso : ich nehme an für die Simulation . Es soll einfach 
in modelsim simulierbar sein ( Anfänger :D).

Also mit dem folgenden Code geht das.
Ich frage mich , warum das nur mit einem Prozess geht -.- ...

1
process (reg) begin
2
  -- gesamtes signal auf 0 ;
3
  reg <= (reg'range =>'0');
4
  -- da ander stelle "index" soll eine 1 geschrieben werden
5
  reg(index) <='1';
6
end process;

das  erschreckt mich ein bisschen :
1
   reg <= (index=>'1', others =>'0');
es setzt vielleicht das element "index" auf 1 und die anderen auf 0 ;
also auch ohne im Prozess zu sein zu müssen! Das wäre eine sehr 
angenehme Alternative.

danke auf jeden Fall !

Wichtig wäre die Frage (für mich), warum das nicht so geht wie ich es 
gemacht habe !
Moderator (Firma: Titel) Persönliche Seite #5559829
Lesenswert?

armin schrieb:
> wie bei dem ersten post hier, wo ich die nicht explizit angegeben habe.
Aber ich. Hinterher. So viel zur "Automatik"...  ;-)

armin schrieb:
> Wichtig wäre die Frage (für mich), warum das nicht so geht wie ich es
> gemacht habe !
Weil du dort aus zwei nebenläufigen Anweisungen gleichzeitig '0' und 
'1' auf das selbe Signal treibst. Das sagt auch die Fehlermeldung.

VHDL ist nicht wie eine prozedurale Programmiersprache, wo das Programm 
"von oben nach unten" abgearbeitet wird. Das kann man sich in einem 
Prozess ein wenig "hinmauscheln", denn im Prozess "gewinnt" die letzte 
Zuweisung vor dem nächsten wait oder vor dem Prozessende.

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