Hallo zusammen,
da ich vor ein paar Tagen schon mal eine Frage gestellt habe und sofort
hilfreiche Antworten bekommen habe, wende ich mich nochmal an euch :)
Ich habe in meinem VHDL Code einen Timer gebaut, der einfach bei jeder
steigenden Taktflanke 1 hochzählt. Die Clock dafür läuft mit 50 Mhz und
der timer counter zählt von 0 bis 50000, also bis hoch auf 1000us.
Hier der VHDL Code dafür:
1 | entity timer_counter is
|
2 |
|
3 | port (
|
4 | i_clock : in std_logic;
|
5 | i_reset : in std_logic;
|
6 | o_counter : out integer
|
7 | );
|
8 |
|
9 | end entity timer_counter;
|
10 |
|
11 | architecture behaviour of timer_counter is
|
12 |
|
13 | signal r_counter : integer range 0 to 50000 := 0;
|
14 |
|
15 | begin
|
16 | process(i_clock)
|
17 |
|
18 | begin
|
19 | if rising_edge(i_clock) then
|
20 | if i_reset = '1' then
|
21 | r_counter <= 0;
|
22 | else
|
23 | r_counter <= r_counter + 1;
|
24 | end if;
|
25 | end if;
|
26 | end process;
|
27 |
|
28 | o_counter <= r_counter;
|
29 |
|
30 | end behaviour;
|
Ich würde diesen Timer gerne in einem anderen Modul verwenden, und habe
ihn daher mit Hilfe der .work lib in einem anderen .vhd file angelegt:
1 |
|
2 | bus_timer : entity work.timer_counter
|
3 | port map (
|
4 | i_clock => i_main_clk,
|
5 | i_reset => r_timer_reset,
|
6 | o_counter => r_timer_counter
|
7 | );
|
Wie ihr sehen könnt, soll der timer von dort mit Hilfe des Signals
r_timer_reset zurückgesetzt werde.
Ich würde diesen Timer gerne aus zwei, parallel laufenden Prozessen
resetten können, da in meiner Anwendung nur immer einer der beiden
Prozesse "aktiv" sein wird während der andere unbeteiligt im Idle state
sein wird.
Dafür habe ich mir überlegt zwei Hilfssignale einzuführen und diese
beiden zu ver-odern.
1 | r_timer_reset <= r_timer_reset0 or r_timer_reset1;
|
r_timer_reset0 wird in Prozess 1 gesetzt.
r_timer_reset1 wird in Prozess 2 gesetzt.
Beide Prozesse werden von dem selben Takt auf die steigende Flanke
ausgeführt.
Mein Problem:
Wenn ich den timer direkt über r_timer_reset zurücksetzte funktioniert
es wie es soll, der timer funktioniert also.
Ich ahbe auch schon versucht nur das eine reset Signal zu vernwenden,
also so:
1 | r_timer_reset <= r_timer_reset0;
|
Auch das hat leider nicht funktioniert.
Die Methode mit den beiden ver-oderten Signalen funktioniert leider
icht.
Bin ich damit auf dem Holzweg? Bin für jede Hilfe dankbar. Gruß