Machen Sie einen clock-divider
Fand ich diesen code, wie man ein clock-divider. Ich habe eine Allgemeine Verständnis, wie man eine Trennlinie mit Hilfe von Zählern, aber ich nicht sicher, was dieser code macht und warum Ihr es tun.
entity clkdiv is
Port ( mclk : in STD_LOGIC;
clr : in STD_LOGIC;
clk190 : out STD_LOGIC;
clk48 : out STD_LOGIC);
end clkdiv;
architecture clkdiv of clkdiv is
signal q: std_logic_vector(23 downto 0);
begin
--clock divider
process(mclk,clr)
begin
if clr ='1' then
q <= X"000000";
elsif mclk'event and mclk = '1' then
q <= q+1;
end if;
end process;
clk48 <= q(19);
clk190 <= q(17);
end clkdiv;
Ich weiß, das Beispiel ist auf der basis 2-board -, input clock 50MHz. Dieser code erzeugen soll eine 48hz clock-signal und 190hz clock-signal.
InformationsquelleAutor user1175889 | 2013-10-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
50MHz/48Hz = 104166.7, so dass Sie nicht bekommen kann es genau.
Wenn Sie einen Zähler, der zählt bis zu 104167 bei 50MHz, erhalten Sie ein einzelner Impuls nahe an 48 Hz (47.9999846 Hz - das ist wahrscheinlich gut genug für die meisten Zwecke).
Nicht verwenden, wird die Ausgabe des Zählers als eine Uhr mit einem einzigen Impuls, wenn es umschlingt als clock-enable - erhalten Sie viel bessere Ergebnisse, dass die Art und Weise. Eine einzelne Uhr in der gesamten design mit aktivierten Abschnitten ist der Weg, es zu tun.
Ich kann nicht Lesen, dass der code als Kommentar, aber ich würde vorschlagen, die Verwendung von INTEGER-Typen, wie es einfacher, mit zu arbeiten, als std_logic_vectors für diese Art der Sache. Sie können auch die compiler, die zum berechnen der end-Wert aus der Frequenz und der bekannten Taktfrequenz, anstatt nur harte Codierung Konstanten, die sind schwer zu überprüfen
wäre das mit dem ip-core im xilinx, ja, ich weiß nicht, wie man das nutzen.
Nein, keine IP-core erforderlich, schreiben Sie einfach den VHDL mit
integer
TypenInformationsquelleAutor Martin Thompson
Was der obige code macht ist einfach, dass es schafft ein VHDL-Modul enthält einen 24 bit-Zähler
q
, gezählt wird bis auf jede steigende Flanke von der master-Uhrmclk
. Dann leitetclk190
undclk48
durch die Verwendung von verschiedenen bits des Zählers direkt als clock-Signale.Beispielsweise mit
mclk
bei 50 MHz, lsb (q(0)
), würde effektiv bei 25 MHz. Jede steigende Flanke vonmclk
gibt Ihnen eine Kante aufq(0)
- ebenso nach oben, so dass jedes nachfolgende bit läuft mit der halben Frequenz des vorherigen bit.Zum Beispiel:
Ihrer abgeleiteten Takte werden können, wird daher davon abhängen, Ihre master-clock, und:
Jedoch - Generierung Uhren wie dies oft der falsche Weg, es zu tun!
Kann es scheinen, als ob Sie sich schön synchronisiert Uhren, aber in Wirklichkeit, werden Sie leicht verzerrt im Vergleich zu jedem anderen, seit Sie erstellen, was ist bekannt als ein gated clock (viele tools wird auch warnen Sie über diese).
Mehr info auf, dass hier, wie ein Weg, die gleiche Sache zu tun (aber besser) mit der Uhr ermöglicht: VHDL: erstellen einer sehr langsamen clock-Impuls basiert auf einem sehr schnellen Takt
Ist es so schwer zu sehen?;) Nur verschiebt die bits, die Sie verwenden auf der linken Seite, das ist
clk48 <= q(20)
undclk190 <= q(18)
, das doppelte der divisor, und Sie geben, was Sie brauchen, von einem 100-MHz-Takt. Werden Sie sicher, dass Sie verstehen und die Tücken des gated-clocks, bevor Sie base-zu viel design auf diese wenn...Der Grund warum ich Frage ist, weil ich hab Verschiebung der bits nach Links und das signal war nicht so toll, das war das erste, was ich versuchte, ich nehme an ich habe etwas falsch gemacht, aber danke für das Beispiel
Was meinst du mit "das signal war nicht so toll"?
Es ging zu schnell,
InformationsquelleAutor sonicwave