Sehr schön. Also das folgende funktioniert schon direkt:
1 | architecture Behavioral of BridgeDriver is
|
2 | type State_t is (Off, Start, Charge, Enabled, Running);
|
3 | signal State : State_t := Start;
|
4 |
|
5 | signal ALI : STD_LOGIC := '0';
|
6 | signal AHI : STD_LOGIC := '0';
|
7 | signal BLI : STD_LOGIC := '0';
|
8 | signal BHI : STD_LOGIC := '0';
|
9 |
|
10 | begin
|
11 | process(IN_CLOCK, State)
|
12 | begin
|
13 | if rising_edge(IN_CLOCK) then
|
14 | case State is
|
15 | when Start => ALI <= '0';
|
16 | AHI <= '0';
|
17 | BLI <= '0';
|
18 | BHI <= '0';
|
19 | State <= Charge;
|
20 |
|
21 | when Charge => ALI <= '1';
|
22 | BLI <= '1';
|
23 | State <= Enabled;
|
24 |
|
25 | when Enabled => ALI <= '0';
|
26 | AHI <= '1';
|
27 | State <= Running;
|
28 |
|
29 | when Running => ALI <= not ALI;
|
30 | AHI <= not AHI;
|
31 |
|
32 | when others =>
|
33 | end case;
|
34 | end if;
|
35 | end process;
|
36 |
|
37 | OUT_ALI <= ALI;
|
38 | OUT_AHI <= AHI;
|
39 | OUT_BLI <= BLI;
|
40 | OUT_BHI <= BHI;
|
41 |
|
42 | end Behavioral;
|
Jetzt möchte ich aber in meinem CPLD asynchrone Logik entwickeln. Das
heißt ich möchte jetzt, dass die Ausgänge asynchron verändert werden
können. Das ganze soll ein Chopper-Stromgregler werden.
- Bei Taktbeginn (rising_edge von IN_CLOCK) sollen die Ausgänge gesetzt
werden.
- Bei einem "Komparator-Interrupt" sollen die Ausgänge zurückgesetzt
werden.
Ich dachte nun eigentlich, dass die Signale ALI, AHI, BLI, BHI intern
als Flipflops realisiert werden (können). Und zwar ein solches FF, was
asynchron gesetzt oder zurückgesetzt werden kann. Das Prinzipschaltbild
ist mal im Anhang angehängt (Datenblatt L297).
Wenn ich allerdings einen zweiten Prozess machen möchte, der die Signale
entsprechend zurücksetzt, dann beschwert sich VHDL darüber, dass die
"Signals connected to multiple drivers".
1 | process(IN_COMP, State)
|
2 | begin
|
3 | if rising_edge(IN_COMP) then
|
4 | case State is
|
5 | when Enabled => ALI <= '1';
|
6 | AHI <= '0';
|
7 |
|
8 | when others =>
|
9 | end case;
|
10 | end if;
|
11 | end process;
|
Ich bin ein Hardware Mensch und bin gerade etwas empört, dass man als
Hardware Mensch erst wieder auf Software ebene "hochgehen" muss um
Hardware zu definieren ;-) Sprich, ich weiß, wie die Hardware aussehen
muss und muss jetzt einen Weg finden das korrekt in Software zu
beschreiben.