bitwurschtler schrieb:
> Vergesst meinen Einwand es, nix anders, da die zeile vor dem IF
> riding_edge(clk).
Es ändert sich nichts, wenn die Zeile nach dem "if...clk" steht:
1 | PROCESS (clk)
|
2 | BEGIN
|
3 | IF (clk='1' AND clk'event) THEN
|
4 | cnt <= cnt + '1';
|
5 | END IF;
|
6 | led <= (sig1 OR sig2);
|
7 | END PROCESS;
|
Trotzdem ist in diesem Fall die Simulation /falsch/: weil sig1 und sig2
in der Sensitivliste fehlen, sieht es so aus, als ob sich led synchron
zum Takt ändert. In der Realität macht der Synthesizer einfach eine
kombinatorische Zuweisung...
bitwurschtler schrieb:
> was die Or-Verknüpfung genau tätigt.
So wie es im Eröffnungpost steht, ist es eine simple Concurrent
Beschreibung. Ich mache das gern so, dass kombinatorische Zuweisungen
nebenläufig sind und getaktete Zuweisungen (=Fliplflops) in einen
Prozess kommen.
Trotzdem kann man auch einen Takt nebenläufig beschreiben:
1 | store <= data when rising_edge(clk);
|
Das ergibt genau das selbe wie das:
1 | process (clk) begin
|
2 | if rising_edge(clk) then
|
3 | store <= data;
|
4 | end if;
|
5 | end process;
|
Oder wie auch das hier:
1 | process begin
|
2 | wait until rising_edge(clk);
|
3 | store <= data;
|
4 | end process;
|
store ergibt hier in allen 3 Fällen ein Flipflop (oder mehrere, wenn es
Vektoren sind).