Hmm, ich wusste gar nicht, das string ueberhaupt ein VHDL typ ist...
Was willst du denn extern (also ausserhalb deiner Entity) mit diesem
String anfangen?
Ein grosser Fehler den Anfaenger sehr hauefig machen ist das ganze als
Programm und nicht als Hardware zu sehen. Du schreibst hier kein
Programm das sequentiel von einem Kontroller durchgearbeitet wird. Du
beschreibst die Struktur einer "Platine"!
Man sollte eigentlich immer mit einer Zeichnung anfangen, wie das ganze
als Hardware aussehen soll - und zwar am Anfang mit einzelnen Registern
und Gattern, so als ob du die Schaltung auf einer Platine mit einzelnen
ICs zusammen loeten wuerdest. Dann kann man diese Zeichnung per VHDL
beschreiben, um sie auf einen FPGA zu bringen.
Bei komplizierteren Designs zeichnet man natuerlich nicht mehr einzelne
Register, aber auch hier sollte man sich das System erst einmal
zeichnen. Dabei hat man dann nicht nur einzelne Register und Gatter,
sondern auch schon kompliziertere Bloecke die von sich aus wieder aus
Registern und Gattern bestehen, und so weiter.
Es sollte auch klar sein, das es in einer Hardware so etwas wie einen
String eigentlich nicht geben kann... es gibt schliesslich nur einzelne
"bits" die eine '1' oder '0' darstellen koennen. Du kannst zwar
viele bits (pro Character 8 bits) als "String" definieren, im grunde
sind es aber immer noch nur '1'-en und '0'-en.
Also noch mal die Frage, was du mit diesen Strings ueberhaupt machen
moechtest?
Zurueck zu deinem Problem, wie man zwei Treiber fuer ein Signal
hinkriegt:
Du musst halt zusehen, dass immer nur ein Process auf einmal den string
beschreiben kann. Die ordentliche Methode dies zu machen ist mit einem
Multiplexer. Das sieht im grunde so aus: beide deiner Prozesse
generieren ihr eigenes Signal. Dann wird in einem weiteren Prozess
ausgewaehlt, welches dieser beiden Signale nun an dein Ausgangsignal
angeschlossen wird.
Es gibt diverse Methoden dies in VHDL zu beschreiben, zum beispiel ein
Multiplexer mit Eingaengen A und B von denen je nach dem Wert von S
einer zum Ausgang Y geleitet wird (Schau dir mal die Funktionsweise von
einem Multiplexer (Mux, zb. 74LS151) in einem Datenblatt an wenn das
unverstaendlich war):
architecture...
signal A,B,Y,S: std_logic;
...
begin
...
-- 1. Variante:
S <= A when (S='0') else B;
-- 2. Variante:
process(A,B,S) begin
if(S='0') then
Y <= A;
else
Y <= B;
end if;
end process;
...
end architecture;
Hoffentlich hilft dir das weiter, sonst lass uns mal wissen wofuer du
die strings brauchst!
Zen