Forum: FPGA, VHDL & Co. auf array ( vector) element zugreifen mit integer


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von armin (Gast)


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

: Bearbeitet durch Moderator
von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
armin schrieb:
> ich wollte über einen externen integer Eingang immer ein bestimmtes bit
> auf 0 setzen.
Für die Synthese oder nur für die Simulation?

> aber ich kann weder mit dem Eingangssignal, noch mit einem internen
> Signal auf die Elemente meines Vectors zugreifen!
Warum nicht? Was passiert stattdessen?

: Bearbeitet durch Moderator
von armin (Gast)


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

von armin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
das mit dem range 0 to 7
habe ich nur hingeschrieben, weil ich überhaupt nicht weiter weiß :D

von Lothar M. (lkmiller) (Moderator) Benutzerseite


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

: Bearbeitet durch Moderator
von armin (Gast)


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

von armin (Gast)


Bewertung
0 lesenswert
nicht lesenswert
kommen die vhdl - tags eigentlich nicht automatisch ?
nachdem ich die mal angewendet habe, sieht das nämlich so aus, wie bei 
dem ersten post hier, wo ich die nicht explizit angegeben habe.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


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

: Bearbeitet durch Moderator

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]
  • [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.