Hallo zusammen,
Bisher war ich aufgrund diverser Beiträge hier der Ansicht, dass
synchrone Resets "besser" seien als asynchrone. Ich bezog dies implizit
auch darauf, dass die Designs bei synchronen Resets kleiner werden
müssten.
Das habe ich nun ausprobiert.
Ausgangslage: ein altes Design aus meinen VHDL-Anfängen, alle Resets
asynchron in der Form
1 | process(CLK,RESET)
|
2 | begin
|
3 | if INT_RESET = '1' then
|
4 | A <= '0';
|
5 | else
|
6 | if rising_edge(CLK) then
|
7 | A <= B;
|
8 | end if;
|
9 | end if;
|
10 | end process;
|
Neu: alle Resets synchron in der Form
1 | process(CLK)
|
2 | begin
|
3 | if rising_edge(CLK) then
|
4 | if INT_RESET = '1' then
|
5 | A <= '0';
|
6 | else
|
7 | A <= B;
|
8 | end if;
|
9 | end if;
|
10 | end process;
|
Beide Varianten habe ich mit ISE8.2.03i synthetisiert und implementiert.
Das Ergebnis hat mich nun aber etwas überrascht, weil die Variante
"asynchron" sogar noch weniger Ressourcen verbraucht als die Variante
"synchron"
Wie kann man sich das erklären?
Anhang: Design Summary async. Reset
Edit: Dateinamen war wohl zu lang... Bilder folgen in den nächsten
Beiträgen.