Forum: FPGA, VHDL & Co. std_logic_vector counter probleme


von Steffen (Gast)


Lesenswert?

Hallo

ich hab mal ne frage, in den Counterbeispielen hier programmiert ihr
fleißig bit-counter.
Problem
1. Meines wissens kann das VHDL nicht, also bitte klärt mich da auf, ab
wann das geht, eventuell mit library oder ähnlichem.
2. ISE Webpackage mag das auch nicht.

"ERROR:HDLParsers:808 - "*.*" Line 115. + can not have such operands
in this context."

alternative währe für mich nur eine umsetzung von integer auf
std_logic_vector, habe aber 19 bit counter.

schon mal im vorraus danke

steffen

von Jörn (Gast)


Lesenswert?

Schwer zu sagen was bei dir schief geht, wenn du keinen Code anhängst.

Was für Bibliothelken hast du eingebunden?

Gruß Jörn

von Michael Noll (Gast)


Lesenswert?

mit
use ieee.std_logic_arith.all;
solltest du auch mit bit-typen rechnen (also auch addieren) koennen ...

von FPGA-User (Gast)


Lesenswert?

warum arbeitest Du nicht mit Integer ?

von FPGA-User (Gast)


Lesenswert?

wäre das nicht was ? man muss nur 1 Konstante
ändern, um die Bitbreite des Counters zu ändern

use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
...

constant BIT_WIDTH : integer := 8;
signal cnt_q : integer range 0 to 2**BIT_WIDTH-1;

process(reset, clk)
begin
   if reset='1' then
      cnt_q <= 0;
   elsif rising_edge(clk) then
      if cnt_q = 0 then
         cnt_q <= 2**BIT_WIDTH-1;
      else
         cnt_q <= cnt_q -1;
         ...
      end if;
   end if;
end process;

von Steffen (Gast)


Lesenswert?

Hallo und Danke erstmal,

so richtig befriedigt hat mich das leider noch nicht, also hier mein
Problem.
Ich habe ein Cesys USB2FPGA mit einem Spartan 2 drauf(www.cesys.de).
Habe 1024 kb Ram und nen Usb2.0 port. Der Counter soll halt dazu
benutzt werden die Adressen im Ram hochzuzählen, daher
std_logic_vector.
Bibliotheken hab ich:
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

und geh echt am stock, auch bei allen Beispielen läuft ein Bit Counter,
aber ich kriegs net synthetisiert.

Laut VHDL'93 Spex geht das nämlich auch nicht, baut der dann nen 19
Bit-Volladierer auf, wenn das gehen soll, dann wird nämlich mein Platz
langsam etwas eng.

Gruß nSteffen

von Jochen Pernsteiner (Gast)


Lesenswert?

>und geh echt am stock, auch bei allen Beispielen läuft ein Bit
Counter,
>aber ich kriegs net synthetisiert.

Das gibt's nicht, das muss funktionieren, solange die Bibliotheken
einbindest.

Poste doch mal den Code der nicht geht.

von Steffen (Gast)


Lesenswert?

Hallo

hier die auszüge die net gehe:

signal ram_adr : std_ulogic_vector(18 downto 0);
...
Process(sclk,reset)
begin
if ...
elsif rising_edge(sclk) then
...
ram_adr<=ram_adr +1;
...
end if;

von Jochen Pernsteiner (Gast)


Lesenswert?

Haha.

Klaro. Du benutzt "ulogic". Nimm "logic" dann geht's.

von Steffen (Gast)


Lesenswert?

Hallo

na wenns nur daran liegt. Is ja aber komisch, std_logic ist ja auch nur
ein subtype von std_ulogic, manchmal ist so was ganz schön
frustrierend.

aber auf jeden Fall erstmal Vielen Dank

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.