Habe ein Problem mit einem Standart logic Vector. BITTE sagt mir wie ich das rechnen kann. ... data_in : IN std_logic_vector(7 DOWNTO 0) ; ... SIGNAL count : std_logic_vector(3 DOWNTO 0 ) ; ... if count = "0000" then txd <= '0'; -- Start-bit elsif count >= "1000" then txd <= '1'; else txd <= data_in(count - 1); -- GEHT NICHT ... In meinem Code ist natürlich entity, architecture und dgl eingetragen. DANKE für die Hilfe!!!
Hallo, probierst doch einfach mal mit nem natural type von range 0 bis 15 für count. Der Besucher
Ach, dir ist klar, das du so wie beschrieben niemals data_in[7] selektieren kannst? Aber ich weis ja nicht genau, was du vorhast. Eine Fehlermeldung wäre auch gut. Der Besucher
Am besten wäre aber nicht zu indizieren, sondern zu shiften. Das kommt der Art, wie FPGA's arbeiten entgegen. So etwa: txd <= data(7); data(7 downto 1) <= data(6 downto 0);
> txd <= data_in(count - 1); -- GEHT NICHT
Das gibt einen Multiplexer, der wertvolle Logikressourcen verbraucht.
Besser ist wie schon gesagt, ein Schieberegister. Dazu mußt du
allerdings die Denkweise komplett umstellen :-/
Bis dahin kannst du es so machen:
1 | use IEEE.std_logic_1164.all; |
2 | use IEEE.numeric_std.all; |
3 | :
|
4 | :
|
5 | txd <= data_in(to_integer(unsigned(count))-1); -- GEHT |
Indizieren geht nur mit Integern, deshalb die Umwandlung. Wenn du die alten Synopsys Libs verwendest (was man nicht tun sollte), musst du es so machen:
1 | use IEEE.std_logic_1164.all; |
2 | use IEEE.std_logic_arith.all; |
3 | use IEEE.std_logic_unsigned.all; |
4 | :
|
5 | :
|
6 | txd <= data_in(conv_integer(count)-1); -- GEHT AUCH |
Zur Abwechslung kannst du dir mal meine SIO ansehen: http://www.lothar-miller.de/s9y/categories/42-RS232
DANKE für Eure Hilfe! Ich hab wieder etwas dazugelernt. Ich glaube ich werde die Version mit dem Schieberegister ausprobieren. LG Gabriel
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.