ben schrieb:
> Ist das ok, so wie ich die Flanken erkenne, oder hat das evtl. Nachteile?
Welche Flanken meinst du?
Das hier hat Nachteile:
(CLK='1' and CLK'event)
Denn du beachtest (in der Simulation) leider nicht den Zustand, der vor
der Flanke da war. Wenn das ein schwaches 'H' war, dann reicht das dir
schon für eine Flanke. Ein Flipflop erkennt aber keine Flanke bei diesem
Wechsel. Kurz und gut: warum nimmst du nicht die Funktionen
rising_edge() und falling_edge()?
Zu deinem Code:
1 | process (C, CS)
|
2 | begin
|
3 | if (C'event and C='1') then
|
4 | for i in 0 to 10 loop
|
5 | tmp(i+1) <= tmp(i);
|
6 | end loop;
|
7 | tmp(0) <= SI;
|
8 |
|
9 | end if;
|
10 |
|
11 | if (CS'event and CS='1') then
|
12 | PO <= tmp;
|
13 | end if;
|
14 | end process;
|
Schreib das besser in 2 Prozesse und sieh dir mal mein Schieberegister
an:
1 | process (C) begin
|
2 | if (C'event and C='1') then
|
3 | tmp <= tmp(10 downto 0) & SI;
|
4 | end if;
|
5 | end process;
|
6 |
|
7 | process (CS) begin
|
8 | if (CS'event and CS='1') then
|
9 | PO <= tmp;
|
10 | end if;
|
11 | end process;
|
Extreme Hacker würden das sogar so schreiben:
1 | tmp <= tmp(10 downto 0) & SI when rising_edge(C);
|
2 | PO <= tmp when rising_edge(CS);
|
Aber leider hilft dir das vermutlich nicht sehr beim Platz sparen.
ben schrieb:
> Leider passt das ganze nur knapp nicht in einen XC9572XL
Was fehlt denn? Wo klemmts?
Flipflops sollten eigetnlich ausreichend da sein...
Zeig doch mal dein ganzes Design.