Hallo Forum,
ich möchte eine entity bauen, die folgende Aufgabe erfüllen soll: durch
ein Start-Impuls (START) sollen an einem Ausgang (IMPULSE_OUT) die
nächsten 250 Clock-Pulse ausgegeben werden. Nach diesen 250 Pulsen geht
der Ausgang READY auf logisch "1" und verweilt in diesem Zustand bis der
nächste START-Impuls kommt.
1 | entity ClockProvider is
|
2 | port ( CLK : in std_logic;
|
3 | START : in std_logic;
|
4 | RESET : in std_logic;
|
5 | READY : out std_logic;
|
6 | IMPULSE_OUT : out std_logic);
|
7 | end ClockProvider;
|
8 |
|
9 | architecture Behavioral of ClockProvider is
|
10 | signal cnt : integer range 0 to 249 := 0;
|
11 | signal isrunning : std_logic;
|
12 | begin
|
13 | ClockCounter : process (CLK)
|
14 | variable tmp : std_logic := '0';
|
15 | begin
|
16 | if ((CLK = '1') AND (CLK'event)) then
|
17 | READY <= '0';
|
18 | if (RESET = '1') then
|
19 | isrunning <= '0';
|
20 | else
|
21 | if ((START = '1') AND (isrunning = '0')) then
|
22 | isrunning <= '1';
|
23 | tmp := '1';
|
24 | else
|
25 | if ((isrunning = '1') OR (tmp = '1')) then
|
26 | tmp := '0';
|
27 | if (cnt < 250) then
|
28 | cnt <= cnt + 1;
|
29 | else
|
30 | cnt <= 0;
|
31 | isrunning <= '0';
|
32 | READY <= '1';
|
33 | end if;
|
34 | end if;
|
35 | end if;
|
36 | end if;
|
37 | end if;
|
38 | end process;
|
39 |
|
40 | ClockGenerator: process (CLK, isrunning)
|
41 | begin
|
42 | IMPULSE_OUT <= CLK AND isrunning;
|
43 | end process;
|
44 | end Behavioral;
|
Zwei Fragen:
1. Ist das irgendwie einfacher /eleganter zu lösen?
2. Wenn ich die Synthese durchführe und mir das RTL-Schematic anschaue,
dann ist das Signal READY fest mit GND verbunden!? Die Simulation zeigt
aber das von mir gewünschte Verhalten
Wäre nett, wenn mit jemand einen Tipp und das Wochenende retten könnte!
:-)
Viele Grüße
Stefan