Error (10327): VHDL error can't determine definition of operator ""+""

Gast #3728657
Lesenswert?

Die Überschrift beschreibt unser Problem.
Wieso können wir auf den Vektor nicht addieren? In einem anderen Code 
haben wir dies getan und es hat funktioniert.
Wo liegt das Problem?


signal transmission_count : std_logic_vector(4 downto 0):= "00000";

------------------------------------------------------------------------ 
---


if rising_edge(SCLK_internal) then
  transmission_count <= transmission_count + 1;
  if state = pause then
    transmission_count <= "00000";
  end if;
end if;
Gast #3728724
Lesenswert?

signal transmission_count : std_logic_vector(4 downto 0):= "00000";

if rising_edge(SCLK_internal) then

  if (state = pause ) then
    transmission_count <= "00000";
  else
        transmission_count <= transmission_count + "00001";
  end if;
end if;
Moderator (Firma: Titel) Persönliche Seite #3728795
Lesenswert?

tmn schrieb:
> Die Überschrift beschreibt unser Problem.
> Wieso können wir auf den Vektor nicht addieren?
Welche Bibliotheken verwendest du?

Mit uneingeschränkten Vektoren rechnet man nicht:
1
  signal transmission_count : std_logic_vector(4 downto 0):= "00000";
2
  :
3
     transmission_count <= transmission_count + 1
Sieh dir mal das mit der numeric_std an:
http://www.lothar-miller.de/s9y/categories/16-Numeric_Std
Gast #3728802
Lesenswert?

Das funktioniert nicht. Da kommt der gleiche Fehler. Wir hatten dies so 
ähnlich davor schon getestet.

Wir haben eine Lösung gefunden, ob es die beste ist wissen wir nicht, 
aber es funktioniert.



    if rising_edge(SCLK_internal) and state /= pause then
      transmission_count <= 
std_logic_vector(unsigned(transmission_count) + 1);
    elsif rising_edge(SCLK_internal) and state = pause then
      transmission_count <= "00000";
    end if;


Wo ist Lothar Miller?
Kann Lothar Miller die Frage beantworten?
Gast #3728876
Lesenswert?

tmn schrieb:
> library ieee;
> use ieee.std_logic_1164.all;
> use ieee.numeric_std.all;

Dann verwendet man die Typen unsigned und signed zum Rechnen:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.numeric_std.all;
4

5
...
6

7
signal transmission_count : unsigned(4 downto 0):= "00000";
8

9
------------------------------------------------------------------------ 
10

11
process(SCLK_internal)
12
begin
13
  if rising_edge(SCLK_internal) then
14
    transmission_count <= transmission_count + 1;
15
    if state = pause then
16
      transmission_count <= (others => '0');
17
    end if;
18
  end if;
19
end process;

Btw: rising_edge(SCLK_internal) --> Wieviele Takte habt Ihr in Eurem 
Design?

Duke
Moderator (Firma: Titel) Persönliche Seite #3728941
Lesenswert?

tmn schrieb:
> Ja daran haben wir auch gedacht, aber in der Aufgabe steht, dass wir
> transmission_count als 5 Bit Vektor deklarieren sollen.
Auch ein unsigend-Vektor ist ein Vektor. Er ist aber kein 
uneingeschränkter Vektor mehr und man kann damit Rechnen.

tmn schrieb:
> Wir haben eine Lösung gefunden, ob es die beste ist wissen wir nicht,
> aber es funktioniert.
>     if rising_edge(SCLK_internal) and state /= pause then
Naja, wieder mal diese unübliche Beschreibung eines Clock-Enables...

tmn schrieb:
> Wir haben eine 50MhZ Clock und eine 1MhZ Clock
Das ist ein Takt zuviel.
Nehmt den 50MHz, der reicht dann locker für alles.

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