Hallo Zusammen, noch eine Anfängerfrage: Ich möchte einen CPLD-Baustein dazu bringen, ein 32Mhz-Signal (Vss 5V) welches durch einen Quarz-Oszi "eingespeisst" wird, soweit runter zu teilen, das sich z.B. ein 4MHz-Signal (Vss 5V) als Ausgang eines von mir bestimmten Pins ergibt. Könnte mir hier jemand einen Ansatz nennen. Ich erwarte nicht die Lösung in Form eines VHDL-Codes, sondern nur gedankliche Ansatzpunkte ;) Ich bin bereits soweit, das ich dies theoretisch mit den vom CPLD zur Verfügung gestellten T-FlipFlops realisieren könnte...dafür benötige ich 3 T-FF, ist das richtig (da ein T-FF meine Frequenz jeweils durch 2 teilt)? THX J
frequenz tut man am besten mit ffs teilen. ja, ein ff kann die frequenz durch 2 teilen
Na einen Zähler von 0-7, binär also 3 Bit und das Höchste Bit ist dein Signal für den Pin. Damit ist du 50% high und 50%Low Pseudocode ========== count std_logic_vector(2 downto 0); if count ="111" then count <= "000"; else count <= count + 1; end if; Signal_Out <= count(2); John
John-eric K. schrieb: > if count ="111" then > > count <= "000"; > > else Nicht nötig, da ein std_logic_vector den Überlauf von selbst macht.
>> Nicht nötig, da ein std_logic_vector den Überlauf von selbst macht.
Diese Erklärung ist zu simpel und stimmt so unbesehen nicht. Die
korrekte Aussage wäre:
Der in den Bibliotheken
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
überladene Operator + macht den Überlauf.
Aber allgemein gilt: mit std_logic_vector sollte man nicht rechnen, denn
abhängig von der eingebunden Library (signed/unsigned) kommen u.U.
andere Ergebnisse heraus...
Besser ist die Verwendung der
use ieee.numeric_std.all;
und der darin enthaltenen (Vektor-)Datentypen signed und unsigend:
1 | library ieee; |
2 | use ieee.std_logic_1164.all; |
3 | use ieee.numeric_std.all; |
4 | :
|
5 | count unsigned(2 downto 0) := "000"; |
6 | :
|
7 | if count ="111" then |
8 | count <= "000"; |
9 | else
|
10 | count <= count + 1; |
11 | end if; |
12 | :
|
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.