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
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
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.
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
>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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.