Hallo zusammen,
ich bin noch blutiger VHDL und FPGA Anfänger, desshalb diese
wahrscheinlich sehr einfache Frage für die ich aber leider trotzdem
keine Antwort gefunden habe..
Ich habe einen 50 Mhz Taktgeber (Quarzoszillator) und möchte in
regelmäßigen Abständen, also mit fester Frequenz einen kurzen, zwei
clock cycles langen Puls erzeugen.
Mein VHDL Code dafür sieht bisher so aus:
1 |
|
2 | -- signale in der architecture:
|
3 | signal r_pulse : std_logic := '0';
|
4 | signal r_count1 : integer range 0 to 25000000 := 0;
|
5 | signal r_count2 : integer range 0 to 2 := 0;
|
1 |
|
2 | -- Prozess nach begin Key-Word..
|
3 | pulse_generator: process(i_main_Clk)
|
4 |
|
5 | begin
|
6 | if rising_edge(i_main_Clk) then
|
7 | if r_count1 = (25000000-1) then
|
8 | r_count1 <= 0;
|
9 | r_pulse <= not r_pulse;
|
10 | else
|
11 | r_count1 <= r_count1 + 1;
|
12 | end if;
|
13 |
|
14 | if r_pulse = '1' and r_count2 < 2 then
|
15 | r_count2 <= r_count2 + 1;
|
16 | elsif r_count2 = 2 then
|
17 | r_pulse <= '0';
|
18 | r_count2 <= 0;
|
19 | end if;
|
20 | end if;
|
21 | end process;
|
22 |
|
23 | o_pulse <= r_pulse;
|
i_main_Clk ist der 50 Mhz Takt. Und r_pulse soll der zwei clock cycles
lange Puls werden.
Das funktioniert in meinem FPGA auch (fast) so wie ich es mir vorstelle.
Im Anhang ein Bild vom Logic Analyzer.
1. Der Puls ist 60ns Sekunden lang. Wie schaffe ich es ihn nur 40ns
Sekunden lang zu machen? Das Register r_count2 wird ja schon auf <2
verglichen..
2. Gibt es für das Problem eine schönere Lösung, ich habe das Gefühl das
ist eher keine wirklich schöne Lösung, aber mir fehlt da glaub ich noch
die Erfahung.
Danke schonmal für jede Hilfe. Gruß