Im Anhang ein Timing Diagramm... Hoffe das ist einigermaßen
verständlich.
Der FPGA ist ein ARRIA V. Läuft momentan mit 50 Mhz.
Hatte überlegt das mit einer FSM zu realisieren, bin da aber nicht
weitergekommen, weil ich die State Übergänge ja nicht mit einer
steigenden Flanke realisieren kann. Oder ist da ein Denkfehler.
1 | BEGIN
|
2 | PROCESS (clk, reset)
|
3 | BEGIN
|
4 | IF reset = '0' THEN
|
5 | state <= s0;
|
6 | ELSIF (clk'EVENT AND clk = '1') THEN
|
7 | CASE state IS
|
8 | WHEN s0=>
|
9 | IF start = '0' THEN
|
10 | state <= s1;
|
11 | END IF;
|
12 |
|
13 | WHEN s1=>
|
14 | IF rising_edge (input_a) THEN
|
15 | state <= s2;
|
16 | END IF;
|
17 | WHEN s2 =>
|
18 | IF rising_edge(input_b) THEN
|
19 | state <= s1;
|
20 | END IF;
|
21 | END CASE;
|
22 | END IF;
|
23 | END PROCESS;
|
24 |
|
25 | --state machine process.
|
26 | process (state)
|
27 | begin
|
28 | case state is
|
29 | when s0 => --when current state is "s0"
|
30 | count <= '0';
|
31 |
|
32 | when s1 => --when current state is "s1"
|
33 | count <= '0';
|
34 |
|
35 | when s2 => --when current state is "s1"
|
36 | count <= '1';
|
37 |
|
38 | end case;
|
39 | end process;
|
40 |
|
41 | q <= count ;
|
42 |
|
43 | end behavioral;
|
Das geht so nicht weil ich in den Case - When kein FF einbauen kann. Mit
fehlt da nur gerade der richtige Lösungsweg.
Gruß Jan