std_logic_vector minus 1

Gast #1363272
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!!!
Moderator (Firma: Titel) Persönliche Seite #1363461
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren