Herbert schrieb:
> Es funktioniert so dennoch nicht.
Was funktioniert nicht?
> Aber es geht, wenn ich die Clocks separat generiere:
Der gepostete Code funktioniert mit Garantie nicht so, wie du es willst.
1 | signal CNT0 : integer range 0 to 39 := 0;
|
2 | :
|
3 | :
|
4 | begin
|
5 |
|
6 | CLOCK: process
|
7 | begin
|
8 | wait until CLK'event and CLK = '1';
|
9 | CNT0 <= CNT0 + 1; -- wie weit wird der CNT0 wohl zählen?
|
10 | if CNT0 = 0 then
|
11 | :
|
12 | else
|
13 | :
|
14 | end if;
|
Es gibt hier keinen automatischen Überlauf von 39 nach 0 !!!
CNT0 zählt in der realen Hardware bis 63 und läuft dann auf 0 über...
Rate mal, wie ich auf 63 komme (Als Tipp: wieviele Bits braucht die Zahl
39)?
Bei den 999 ist es übrigens wesentlich weniger ungenau, denn der nächste
Überlauf passiert da bei 1023.
> Was bedeute diese?
Dass du jetzt einen Takt verwendest, der nicht von einem Taktnetz kommt.
Und kaum zu glauben: gerade erst habe ich geschreiben, mir schwane
Übles, und schon macht er es... :-/
1 | wait until CLK'event and CLK = '1';
|
2 | :
|
3 | wait until SCLK'event and SCLK = '1';
|
Absolut unnötigerweise 2 Takte in 1 Design. Lies dir mal den
Beitrag "Re: VHDL Einsteigerset" durch. Insbesondere
den Abschnitt zum Anfängerdesign.
Probiers mal mit meinem Code...
1 | LED: process(CLK) --- Enable verwenden
|
2 | begin
|
3 | if rising_edge(CLK) then
|
4 | if SEN='1' then
|
5 | LEDS <= not LEDS;
|
6 | end if;
|
7 | end if;
|
8 | end process;
|
Oder versuch mal nachzuvollziehen, wie ich das meine...