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
Gast
#1715043
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.
Stimmt vergessen ;-)
>> 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 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.