Hallo zusammen,
ich habe folgende, eigentlich einfache SYNC Stufe zum einsynchronisieren
von einem asynchronen Bus.
1 | library ieee;
|
2 | use ieee.std_logic_1164.all;
|
3 | use ieee.numeric_std.all;
|
4 |
|
5 | entity sync_stufe is
|
6 | port (
|
7 | clk : in std_logic;
|
8 | nres : in std_logic;
|
9 | en : in std_logic;
|
10 | analog_in : in std_logic_vector(15 downto 0);
|
11 | analog_sync_out : out std_logic_vector(15 downto 0)
|
12 | );
|
13 | end entity sync_stufe;
|
14 |
|
15 | architecture rtl of sync_stufe is
|
16 |
|
17 | signal sync_analog_in : std_logic_vector (31 downto 0);
|
18 |
|
19 | begin
|
20 |
|
21 | analog_sync_out <= sync_analog_in(31 downto 16);
|
22 |
|
23 | sync_ff : process (clk, nres) is
|
24 | begin
|
25 | if (nres = '0') then
|
26 | analog_sync_out <= (others => '0');
|
27 | sync_analog_in <= (others => '0');
|
28 | elsif rising_edge(clk) then
|
29 | if en = '1' then
|
30 | sync_analog_in <= sync_analog_in(15 downto 0) & analog_in;
|
31 | end if;
|
32 | end if;
|
33 | end process;
|
34 |
|
35 | end architecture rtl;
|
Wenn ich mir die Sache nun in der Simulation anschaue, werden nur Nullen
weiter gegeben, aber immer da, wo eine Eins stehen sollte, kommt ein X.
Was genau mache ich falsch?
Ich sehe in der ganzen Sache eigentlich kein Problem, das shiften von
den LSBs zu dem MSBs scheint zu gehen... irgendwo danach gehen die
Einsen verloren.
Ich schaue nun schon mehr als 1h auf das Stückchen Code und finde
einfach keine Erklärung - bin wohl blind.
Kann mir jemand meinen Fehler aufzeigen und mich aus meiner Denkschleife
herausholen?
Vielen Dank!
Alex