Forum: FPGA, VHDL & Co. 2 Bit Counter ohne Peak.


von Keine Ahnung (Gast)


Lesenswert?

Hallo miteinander, ich habe folgenden Code für einen FPGA geschrieben,
leider gibt es hier immer einen kleinen PEAK wenn der Wert auf '10' 
geht, da er hier anschließend auf '00' gesetzt werden soll...

Wie kann ich es lösen dass mir der PEAK nicht erscheint?!

Hier der Code:

begin
  process (clk, count, clear)
    begin
     if clear = '1' then
      Pre_Q <= Pre_Q-Pre_Q;  -- is '0'
     elsif rising_edge (clk) then
       if count = '1' then
           PRE_Q <= Pre_Q+1;
       else
        Pre_Q(0) <= '0';
        Pre_Q(1) <= '0';
      end if;
    end if;

  if (Pre_Q(0)='1') AND (Pre_Q(1)='1') then
   PRE_Q(0) <= '0';
   PRE_Q(1) <= '0';
   Q <= Pre_Q;
  else
    Q <= Pre_Q;
  end if;

end process;

von alex (Gast)


Lesenswert?

Hallo,

VHDL ist nicht "case sensitive". Du hast in deinem Code Pre_Q und PRE_Q. 
Das ist unsauber. Die if-Abfrage ausserhalb rising_edge Blocks, was 
immer sie dort zu suchen hat, ist auch unsauber und, ich denke, an der 
Stelle falsch.

Gruß,
Alex

von Sym (Gast)


Lesenswert?

Was bitte baust du da? Soll das etwa ein Counter sein? Erstmal: 
Sensitivity List in einem sequentiell Prozess enthält nur die CLK und 
das RST signal.

Machs mal so: (n ist ein integer)
1
pcnt: process (clk, rst)
2
  begin
3
    if rst = '1' then
4
     n <= 0;
5
    elsif clk'event and clk = '1' then
6
      if n=3 then
7
        n <= 0;
8
      else
9
        n <= n + 1;
10
      end if; 
11
    end if;
12
  end process pcnt;

von Gast (Gast)


Lesenswert?

1
clk'event and clk = '1' then

Was immer alle gegen rising_edge() haben?

von Morin (Gast)


Lesenswert?

> Was immer alle gegen rising_edge() haben?

Anders gelernt? Wenn jeder rising_edge() benutzen würde, dann würde 
sicher jemand fragen was alle Leute gegen clk'event and clk='1' haben ;)

von Reto (Gast)


Lesenswert?

Schiebe alle Ausgänge auch in einen getakteten Prozess. Das ist am 
Sichersten.

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.