Hallo!
Ich habe bei einem cyclon2 einmal gezeigt bekommen wie die pll
funktioniert. Dabei wurde geraten, das locked signal sozusagen als
asynchronen reset für das Ganze design zu benutzen.
Da ich als passiver Leser hier mitbekommen habe, dass i.d.R von einem
asynchronen reset design abgeraten wird (nicht zuletzt aus Gründen des
höheren Logik Bedarfes und damit der Geschwindigkeit), war ich
überrascht. Mein Kumpel hat aber vehement vertreten, dass die asynchrone
Schreibweise das Mittel der Wahl ist. Jedenfalls bei Altera.
Das habe ich heute nach etwas googeln auch so gelesen, aber da ich
selber nicht viel mehr als Anfängerstatus auf der Fahne habe, kann ich
mir gut denken, dass ich etwas einfach nicht begriffen habe.... Ich
frage euch also deswegen.
Mit ise habe ich ein dcm Projekt zum rumprobieren erstellt.
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 |
|
4 | -- Uncomment the following library declaration if using
|
5 | -- arithmetic functions with Signed or Unsigned values
|
6 | --use IEEE.NUMERIC_STD.ALL;
|
7 |
|
8 | -- Uncomment the following library declaration if instantiating
|
9 | -- any Xilinx primitives in this code.
|
10 | --library UNISIM;
|
11 | --use UNISIM.VComponents.all;
|
12 |
|
13 | entity dcmtst is
|
14 | Port ( isl_clk50 : in STD_LOGIC;
|
15 | osl_led : out STD_LOGIC);
|
16 | end dcmtst;
|
17 |
|
18 | architecture Behavioral of dcmtst is
|
19 | COMPONENT dcm90 IS
|
20 | port ( CLKIN_IN : in std_logic;
|
21 | CLKFX_OUT : out std_logic;
|
22 | CLKIN_IBUFG_OUT : out std_logic;
|
23 | LOCKED_OUT : out std_logic);
|
24 | END COMPONENT;
|
25 |
|
26 | signal sl_clk : STD_LOGIC;
|
27 | signal sl_locked : STD_LOGIC;
|
28 | signal sl_led : STD_LOGIC := '0';
|
29 | begin
|
30 |
|
31 | MAP_DCM : dcm90 PORT MAP( CLKIN_IN=>isl_clk50 , CLKFX_OUT=>sl_clk , CLKIN_IBUFG_OUT=>OPEN, LOCKED_OUT=>sl_locked );
|
32 |
|
33 | osl_led <= sl_led;
|
34 | process (sl_clk, sl_locked) begin
|
35 |
|
36 | --mit locked-Abfrage ist max Frequency 260 MHz,
|
37 | --ohne locked -Abfrage ist max Frequency 328 MHz
|
38 | --da frage ich mich, ob und wie ich locked bei xilinx benutze
|
39 |
|
40 | --if( sl_locked /= '1' ) then
|
41 | --reset halten o.ä
|
42 | --else
|
43 | if( rising_edge(sl_clk) ) then
|
44 | sl_led <= not sl_led;
|
45 | end if;
|
46 | --end if;
|
47 | end process;
|
48 |
|
49 | end Behavioral;
|
3 Fragen:
1) Verstehe ich es richtig, dass der asynchrone reset mit reset fast 70
MHz kostet bei diesen zugegeben praxisfernen Beispiel? Im RTL wird auch
ein anderes FF benutzt. Nämlich ohne locked ein fdr FF und mit ein fde
FF.
2) Wie gehe ich denn nun real mit einer dcm um...loocked abfragen? Oder
nicht? Wenn abfragen wie und wo?
3) Wenn es wirklich so ist, dass bei Altera eine Schreibweise wie im
Reichert also asynchrone Reset Signale BESSER ist und bei Xilinx
SCHLECHTER ist... ist es dann überhaupt einigermaßen sinnvoll möglich
die Familien zu wechseln. Code transferieren ist ja schon mal schlecht
und Gewohnheiten (beinahe) noch schlechter