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;
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
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; |
1 | clk'event and clk = '1' then |
Was immer alle gegen rising_edge() haben?
> 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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.