Forum: FPGA, VHDL & Co. std_logic_vector minus 1


von Gabriel (Gast)


Lesenswert?

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!!!

von Der Besucher (Gast)


Lesenswert?

Hallo,

probierst doch einfach mal mit nem natural type von range 0 bis 15 für 
count.

Der Besucher

von Der Besucher (Gast)


Lesenswert?

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

von Klaus F. (kfalser)


Lesenswert?

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);

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 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

von Gabriel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.