Forum: FPGA, VHDL & Co. Hilfe beim Umschreiben benötigt :(


von Peter (Gast)


Lesenswert?

Hi,

ich habe ein Problem hiermit. Das will Xilinx ISE nicht implementieren, 
habe ich nun nach einer Weile rausgefunden. Irgendwie komme ich nicht 
auf einen gescheiten Ersatz der funktionieren könnte.... Kann mir hier 
einer vllt helfen, bin totaler VHDL Anfänger und irgendwie fehlt mir die 
Idee....


begin
   if(sw3_8_rst='1' and rst='0') then
          count:=50;
          rst:='1';
   elsif(sw3_8_rst='0' and rst='1') then
    rst:='0';
   elsif (sw8_v_plus='1' and plus='0' and count<=100) then
   count:=count+1;
   plus:='1';
   elsif (sw8_v_plus='0' and plus='1') then
   plus:='0';
   elsif (sw7_v_minus='1' and minus='0' and count>=0) then
  count:=count-1;
  minus:='1';
   elsif (sw7_v_minus='0' and minus='1') then
        minus:='0';
   end if;


Ich danke auf jeden Fall schon mal für eure Mühen.

Danke

von Peter (Gast)


Lesenswert?

begin
  if(sw3_8_rst='1' and rst='0') then
          count:=50;
          rst:='1';
  elsif(sw3_8_rst='0' and rst='1') then
           rst:='0';
  elsif (sw8_v_plus='1' and plus='0' and count<=100) then
           count:=count+1;
           plus:='1';
  elsif (sw8_v_plus='0' and plus='1') then
           plus:='0';
  elsif (sw7_v_minus='1' and minus='0' and count>=0) then
           count:=count-1;
           minus:='1';
  elsif (sw7_v_minus='0' and minus='1') then
           minus:='0';
  end if;

so siehts schöner aus

von Klaus Falser (Gast)


Lesenswert?

Erstens musst Du das Ganze in einen Prozess stecken.
Zweiten muss alles mit einem Takt versehen werden, ein Zähler kann nur 
funktionieren, wenn er jedesmal an der Taktflanke auf oder abzählt.
Ansonsten wäre er ja in nullkommanix auf 0.

von Peter (Gast)


Lesenswert?

Ja das mit dem Process ist mir klar. Und das mit dem Takt. Er soll ja 
nur nach oben bzw nach unten zählen, wenn ich einen Taste drücke und 
wenn ich sie gedrückt halte, soll nichts mehr passieren. Sprich für 
einmal drücken, soll der count 1 nach oben gehen bzw nacht und beim rst 
soll er auf 50 zurückgestellt werden. Aber man merkt wohl, dass ich ein 
totaler Anfänger dabei bin und wohl nicht wirklich viel bisher 
verstanden habe

von Daniel (root) (Gast)


Lesenswert?

>begin
>  if(sw3_8_rst='1' and rst='0') then
>         count:=50;

sicher, dass da irgendwo 'rising_edge(clk)' drin stand?
immerhin folgt if direkt nach begin!

Variablen sind etwas böse(zu Anfang), weil sie zu software
denkweise verleiten. Stell dir lieber FPGA als Register/Logik
Baukasten vor. Register haben ein Leben vor dem Takt und eins
danach. Daraus entwickelt man dann:
1
signal count_reg, count_next: integer range 0 to 15 := 0;

Die Übernahme wird durch
1
count_reg <= count_next when rising_edge(clk);
realisiert.

Die Neuberechnung für _next wird aus _reg realisiert
1
count_next <= 0 when reset = '1' or count_reg = 15 else
2
    count_reg + 1 when count_pulse else
3
    count_reg;

count_pulse impliziert, dass dieses Signal einen Takt lang '1' ist.
Da kannst du auch deinen Taster einsetzen, nur wird dann mit x-MHz
hochgezählt.

Meistens baut man sich eine Kaskade von Zählern, wobei einer zB
die Zeitbasis liefert. Ich mache oft einen us-Puls.


Hoffe das hilft etwas.

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.