Hallo,
wie kann ich ein Signal std_logic zu einem Signal std_logic_vector
vervielfachen?
Ich benoetige mehrer Ausgaenge, die exakt das Gleiche tun.
Ich habe ein Design, was fuer einen Ausgang, das tut, was es soll, nun
wollte ich das Design nicht verzigfachen, nur weil mehrere Ausgange
benoetigt werden.
P.S.: Den entsprechenden VHDL Code kann ich morgen nachreichen, da
gerade am Handy.
Lothar M. schrieb:> Mark W. schrieb:>> Ich hatte es vorher so probiert, hat in diesem Fall aber nicht geklappt.> Müsste aber. Welche Fehlermeldung hast du da erhalten?
Fehlermeldung(bei Synthesis):
ERROR - c:/allmyfiles/latticediamondprojects/pulser03/pulser03.vhd(42):
net PD_OUT_P[15] is constantly driven from multiple places at instance
PD_OUT_P, on port q[15]. VDB-1000
Done: error code 2
Also VHDL checking geht durch, nur beim Synthetisieren gibt es obige
Fehlermeldung.
Hier ist der Code:
Es gibt 2x16 Ausgaenge, wie es jetzt bei PD_OUT_N ist, geht es.
Es soll das Pattern ausgegeben werden immer wenn MODE 1 ist. Mit der
Laenge des MODE Pulses bestimme ich wie viele Bits rausgehen.
Dussel schrieb:> Mark W. schrieb:>> net PD_OUT_P[15] is constantly driven from multiple places at instance>> PD_OUT_P,> Da wird PD_OUT_P 0 bis 15 zugewiesen>
1
PD_OUT_P<="1111111111111111";
> und da nochmal PD_OUT_P 14 und 15>
1
PD_OUT_P(15)<=TEST;
2
>PD_OUT_P(14)<=TEST;
>> Damit werden die beiden letzten zweimal zugewiesen. Das funktioniert in> Hardware nicht.
Ja, habe mir schon gedacht, dass das was damit zu tun hat, dass ich es
außerhalb des Prozesses gemacht habe. Allerdings sind die Zuweisungen ja
nie gleichzeitig, denn MODE kann ja nur 1 oder 0 sein.
Naja, die Schreibweise innerhalb des Prozesses gefaelt mir auch besser,
weil sie kuerzer ist.
Mark W. schrieb:> Allerdings sind die Zuweisungen ja nie gleichzeitig,> denn MODE kann ja nur 1 oder 0 sein.
1
PD_OUT_P(15)<=TEST;
2
PD_OUT_P(14)<=TEST;
wird immer 'ausgeführt'.
Manchmal zusätzlich noch
1
PD_OUT_P<="1111111111111111";
Das kann in normaler Hardware nicht gehen.
In der Simulation funktioniert es übrigens, weil std_logic aufgelöst
wird. Dann kommt 'X' raus, wenn die beiden Zuweisungen unterschiedlich
sind. Das gibt so schöne Muster X0X0X0X0X0 und man wundert sich erstmal,
wenn man das zum ersten Mal sieht. ;-)
Was soll der Code eigentlich bringen? Selbst wenn du die Zuweisungen
unten weglässt, wird PD_OUT_P nur einmal auf 1 gesetzt und bleibt dann
für immer so.
Dussel schrieb:> Was soll der Code eigentlich bringen? Selbst wenn du die Zuweisungen> unten weglässt, wird PD_OUT_P nur einmal auf 1 gesetzt und bleibt dann> für immer so.
Nein, wenn MODE 0 ist, dann sind die Ausgaenge auf 1 gesetzt. Wenn MODE
1 ist, dann wird das Pattern IDATA_X entsprechend ausgegeben, 1 Bit pro
Takt. Und zwar so lange, wie MODE 1 bleibt. Also um das ganze Patterns
auszugeben muss MODE fuer 64 Taktzyklen 1 sein.
Edit: Ich habe dafuer eine Parallel zu Serial Schieberegister
modifiziert.
Jetzt sehe ich es. Über TEST soll das zugewiesen werden. Aber wie schon
gesagt, so geht das nicht, weil PD_OUT_P nicht gleichzeitig im Prozess
und außerhalb etwas zugewiesen bekommen kann.
Du könntest ein Hilfssignal im Prozess erzeugen, dass du unten zuweist.
Oder du weist direkt im Prozess an PD_OUT_P zu.
Dussel schrieb:> Jetzt sehe ich es. Über TEST soll das zugewiesen werden. Aber wie schon> gesagt, so geht das nicht, weil PD_OUT_P nicht gleichzeitig im Prozess> und außerhalb etwas zugewiesen bekommen kann.> Du könntest ein Hilfssignal im Prozess erzeugen, dass du unten zuweist.> Oder du weist direkt im Prozess an PD_OUT_P zu.
Ja, TEST hatte ich jetzt nur nochmal eingebaut, um die Fehlermeldung zu
produzieren. So wie es im obigen Code bei PD_OUT_N ist geht es und ich
bin damit zufrieden.