Hilfe beim Umschreiben benötigt :(

Gast #1296763
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
Gast #1296764
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
Gast #1296825
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.
Gast #1296873
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
Gast #1296889
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren