Forum: FPGA, VHDL & Co. Variable beobachten


von Marek S. (Gast)


Lesenswert?

Hallo zusammen,
ich versuche mich ein wenig an VHDL. Nun meine Probleme.
Ich habe 2 Pinne wenn bei High sind soll ein Counter zurückgesetzt 
werden.
Ist nur X1 high soll ein Counter um eins incrementiert werden.
1.) Ist dieser Quellcode richtig ?
2.) Wie zeige ich mir bei Quartus 2 Variablen an.
------------------------------------------------
LIBRARY ieee ;
USE ieee.std_logic_1164.all ;
use IEEE.std_logic_unsigned.all;

ENTITY versuch_1 IS
PORT ( x1, x2 : IN STD_LOGIC ;
f : OUT STD_LOGIC ) ;

END versuch_1 ;

ARCHITECTURE LogicFunction OF versuch_1 IS
Signal count_max: INTEGER range 0 to 2204;
BEGIN

process (x1, x2)
begin
  if (x1 = '1' and x2 ='1') then
    count_max<=0;

  elsif (x1 = '1' and x2 = '0') then
    count_max<=count_max+1;
  END IF;
end process;

END LogicFunction ;
------------------------------------------------

Danke und Gruß

Marek

von Falk (Gast)


Lesenswert?

@Marek Swierzy

>Ich habe 2 Pinne wenn bei High sind soll ein Counter zurückgesetzt
>werden.
>Ist nur X1 high soll ein Counter um eins incrementiert werden.
>1.) Ist dieser Quellcode richtig ?

Nein, es fehlt der Takt.

2.) Wie zeige ich mir bei Quartus 2 Variablen an.

Keine Ahnung.

process (takt)
begin
  if rising_edge(takt) then
    if (x1 = '1' and x2 ='1') then
      count_max<=0;
    elsif (x1 = '1' and x2 = '0') then
      count_max<=count_max+1;
    END IF;
  end if;
end process;

MFG
Falk

von Marek S. (Gast)


Lesenswert?

Hi Falk,

warum muss da ein Takt rein ?

Danke und Gruß

Marek

von Falk (Gast)


Lesenswert?

@Marek Swierzy

>warum muss da ein Takt rein ?

Ja wie soll der Zähler sonst um eins erhöht werden?
-> Synchrone Schaltungstechnik.

MfG
Falk

von Marek S. (Gast)


Lesenswert?

Ich dachte dies kommt duch diese Zeile zustande

      count_max<=count_max+1;
Thx

von jm (Gast)


Lesenswert?

Ohne Takt baust du Kombinatorik, das heißt irgendwelche Drähte mit 
Operationen aber ohne Speicher. Die Zahl im counter muss aber 
gespeichert werden.
Schreibst du nur
count_max <= count_max + 1
ist das gleichbedeutend mit einem kombinatorischen Signal (vorstellbar 
als Draht), der sich selbst um eins erhöht und damit ein feedback 
erzeugen würde. Würdest du etwas schreiben wie
counter <= count_max + 1
ginge das zwar, aber counter wäre konstant.
Also musst du den count_max-Wert speichern und das funktioniert bei 
Hardware taktweise. Ein solcher Speicher, genannt Register, hat einen 
Eingang und einen Ausgang, und du kannst jeden Takt etwas auf den 
Eingang schreiben, was dann im nächsten Takt am Ausgang lesbar ist. Es 
liegt also im ersten Takt 0 am Ausgang und 1 am Eingang, im nächsten 1 
am Ausgang und 2 am Eingang usw. an. Nur so funktioniert sinnvolles 
zählen in Hardware.

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.