J'essaie de ralentir une fréquence de 50 MHz jusqu'à 25,175 MHz pour une utilisation avec un contrôleur VGA. J'ai déjà un diviseur d'horloge, mais j'ai du mal à ralentir l'horloge chaque fois que la division résultante de la vitesse d'horloge actuelle et la vitesse d'horloge désirée n'est pas un nombre entier. C'EST À DIRE. 50000000/25175000 ~ 1,98. Le diviseur d'horloge se compile et s'exécute, mais ne génère rien si la division est un nombre décimal. Voici mon code:Diviseur d'horloge VHDL avec décimales
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY Clockdiv IS PORT (
Clkin: IN STD_LOGIC;
Clk: OUT STD_LOGIC);
END Clockdiv;
ARCHITECTURE Behavior OF Clockdiv IS
CONSTANT max: INTEGER := 50000000/25175000;
CONSTANT half: INTEGER := max/2;
SIGNAL count: INTEGER RANGE 0 TO max;
BEGIN
PROCESS
BEGIN
WAIT UNTIL Clkin'EVENT and Clkin = '1';
IF count < max THEN
count <= count + 1;
ELSE
count <= 0;
END IF;
IF count < half THEN
Clk <= '0';
ELSE
Clk <= '1';
END IF;
END PROCESS;
END Behavior;
Je recherche google et trouvé en utilisant le type de données REAL vous permettra d'utiliser les décimales, mais quand je l'ai changé les variables que je utilise pour réaux, Quartus me donne l'erreur: Error (10414): VHDL Unsupported Feature error at Clockdiv.vhd(12): cannot synthesize non-constant real objects or values
. Puis, si je change "count" en un type CONSTANT
, j'obtiens l'erreur: Error (10477): VHDL error at Clockdiv.vhd(18): name "count" must represent signal
.
Est-ce que quelqu'un sait comment je peux ralentir une horloge à 25,175 MHz? Aussi, quelqu'un sait-il comment ralentir une horloge afin que le compilateur soit satisfait de la division résultante étant une valeur décimale?
Merci
Sur quelle carte travaillez-vous? Il pourrait venir avec un gestionnaire d'horloge numérique (DCM) qui pourrait offrir un meilleur résultat de division et une implémentation plus simple.Je sais que les cartes Spartan 3a de Xilinx ont les –
J'utilise une carte Altera DE1 pour cela. Le FPGA sur cette carte a 4 PLL, mais pour autant que je sache, il n'y a pas de gestionnaire d'horloge numérique comme Paul Seeb l'a mentionné. Donc, je suppose que ma prochaine question est, comment puis-je profiter d'une PLL dans Quartus à utiliser comme le diviseur d'horloge? –
Si vous avez des PLL, vous pouvez faire des horloges de fréquence supérieure/inférieure aussi longtemps que le matériel peut atteindre la fréquence désirée. Je pense que la plupart des DCM le font de cette façon. Par exemple, doubler la vitesse d'horloge est réalisé par XORing votre horloge avec et 90deg signal d'horloge déphasé –