Forum: FPGA, VHDL & Co. Zähler in VHDL (Anfängerproblem)


von Domi (Gast)


Lesenswert?

Hallo zusammen,

ich habe vor kurzem angefangen VHDL zu lernen und noch gewisse 
Startschwierigkeiten.
Ich will mir zur Übung einen einfachen 8 Bit-Zähler programmieren und 
hab' folgenden Code zustande gebracht, das Problem liegt darin, dass der 
Zählerausgang (COUNT_OUT) immer auf high liegt und auch VAR_NEW_COUNT 
ändert sich nicht. Evtl. sieht jemand meinen Fehler im Code oder ich 
mach in der Simulation etwas falsch. Dafür benutze ich ModelSim und 
stelle CIN als Clock ein.

Schonmal vielen Dank und hier der Code: :)

1
entity COUNTER is
2
  port(  CIN: in bit;
3
      COUNT_OUT: out bit_vector(7 downto 0));
4
end COUNTER;
5
6
architecture COUNTER_BEHAVE of COUNTER is
7
signal SIG_COUNT: bit_vector(7 downto 0) := (others => '0');
8
begin
9
10
  ADD1: process(CIN)
11
  variable VAR_NEW_COUNT: bit_vector(7 downto 0);
12
  variable CB: bit := '1';
13
  begin
14
    
15
    if (CIN = '1' and CIN'event) then  
16
      for I in 7 downto 0 loop
17
        if (SIG_COUNT(I) and CB) = '1' then
18
          VAR_NEW_COUNT(I) := '0';
19
        else
20
          VAR_NEW_COUNT(I) := '1';
21
          CB := '0';
22
        end if;
23
      end loop;
24
    end if;
25
    
26
  COUNT_OUT <= VAR_NEW_COUNT;
27
  
28
  end process ADD1;
29
  
30
end COUNTER_BEHAVE;

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


Lesenswert?

Domi schrieb:
> hier der Code
1. Eine VHDL Beschreibung fängt immer vor dem Keyword "entity" an.
2. Du brauchst keine Variablen. Sie machen dir nur das Leben schwer. Du 
hast hier z.B. ein speicherndes CB, weil es vor dem Beschreiben gelesen 
wird. Ist das gewünscht?
3. Warum arbeitest du die Signale vonm MSB her ab? Das scheint mir eine 
aussergeöhnliche Bitgewichtung zu sein.

> das Problem liegt darin, dass der Zählerausgang (COUNT_OUT) immer auf
> high liegt
Ich hätte erwartet, der läge dauerhaft auf '0'. Denn SIG_COUNT liegt 
dauerhaft auf '0'. Und '0' and '1' ergibt wieder '0'...

> oder ich mach in der Simulation etwas falsch. Dafür benutze ich ModelSim
> und stelle CIN als Clock ein.
Mach eine richtige Testbench. Das ist gar nicht so schwer: ein 
Top-Level-VHDL Modul, das in der entity keinen Port hat, und darin wird 
das zu testende Modul eingepackt.

Sieh dir das mit dem "Hello World" mal an:
http://www.lothar-miller.de/s9y/archives/80-Hello-World!.html

von ... (Gast)


Lesenswert?

Zum Spass zaehlt dieser Zaehler ein wenig weiter.
So einfach kann das sein.
1
LIBRARY IEEE;
2
USE IEEE.STD_LOGIC_1164.ALL;
3
USE IEEE.STD_LOGIC_ARITH.ALL;
4
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
5
6
entity CNT is
7
  Port (
8
    clk    : in STD_LOGIC
9
  );
10
end CNT;
11
12
architecture Behavioral of CNT is
13
signal cnt  :  INTEGER RANGE 0 TO 257 := 0;
14
15
begin
16
17
process (clk) 
18
begin
19
  if rising_edge(clk) then
20
    cnt <= cnt + 1;
21
  end if;
22
end process;
23
24
end Behavioral;

von Duke Scarring (Gast)


Lesenswert?

... schrieb:
> USE IEEE.STD_LOGIC_ARITH.ALL;
> USE IEEE.STD_LOGIC_UNSIGNED.ALL;
Wo lernt man denn so was?!?

Beitrag "IEEE.STD_LOGIC_ARITH.ALL obsolete"

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


Lesenswert?

... schrieb:
> Zum Spass zaehlt dieser Zaehler ein wenig weiter.
Und bringt im Simulator postwendend einen Fehler:
>>> cnt value 258 out of range 0 to 257 <<<

> So einfach kann das sein.
Jepp.

von ... (Gast)


Angehängte Dateien:

Lesenswert?

Ach was.

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


Angehängte Dateien:

Lesenswert?

... schrieb:
> Ach was.
Was für eine eigenartige Toolchain ist das?
Und: macht der Synthesizer den "automatischen Überlauf" auch richtig?
Wenn ja: welcher Synthesizer wäre das denn?

Mit einem korrekt arbeitenden Simulator ergibt die obige Beschreibung 
exakt den erwarteten Fehler...

: Bearbeitet durch Moderator
von Markus F. (mfro)


Lesenswert?

Lothar M. schrieb:
> ... schrieb:
>> Ach was.
> Was für eine eigenartige Toolchain ist das?
> Und: macht der Synthesizer den "automatischen Überlauf" auch richtig?
> Wenn ja: welcher Synthesizer wäre das denn?
>
> Mit einem korrekt arbeitenden Simulator ergibt die obige Beschreibung
> exakt den erwarteten Fehler...

Wenn ich das richtig sehe, ist das keine Simulation, sondern SignalTap 
(also in etwa dasselbe wie ChipScope).

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.