forked from philouxy/Langage-VHDL---Exemple-code-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
div_frequence.vhd
114 lines (94 loc) · 3.19 KB
/
div_frequence.vhd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
-----------------------------------------------------------------------------------//
-- Nom du projet : COMPTEUR_BONNE_ANNEE
-- Nom du fichier : div_frequence.vhd
-- Date de création : 25.01.2018
-- Date de modification : xx.xx.2017
--
-- Auteur : Philou (Ph. Bovey)
--
-- Description : A l'aide d'une FPGA (EMP1270T144C5) et d'une carte
-- électronique créée par l'ETML-ES,
-- réalisation / simulation
-- diviseur de fréquence générique - on recoit la
-- fréquence de base / le nb de tic max et on créer
-- le signal de la nouvelle clock
--
-- Remarques : lien
-- 1) https://fr.wikibooks.org/wiki/TD3_VHDL_Compteurs_et_registres
----------------------------------------------------------------------------------//
-- déclaration standart des librairies standart pour le VHDL --
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
--use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use ieee.numeric_std.all; -- pour les opérations mathématiques et convertion
-- déclaration de l'entité (Entrées / Sorties) --
entity DIV_FREQ is
port(
------------
-- entrée --
------------
-- logique --
CLK_IN : in std_logic; -- horloge a 1.8432 MHz
-- bus --
BUS_VAL_TIC : in std_logic_vector(0 to 23);
------------
-- sortie --
------------
-- logique --
-- bus --
CLK_OUT : out std_logic;
----------------------------------------------------
-- Elément uniquement utiliser pour la simulation --
----------------------------------------------------
clk_SIM : out std_logic
);
END DIV_FREQ;
architecture COMP_DIV_F of DIV_FREQ is
----------------------
-- signaux internes --
----------------------
-- constantes --
-- signaux --
-- logique --
-- bus --
-- entier --
signal nb_tic, cpt_p_1HZ, cpt_f_1HZ : integer; --: std_logic_vector(0 to 23);
begin
-------------------------------------------------------
-- recuperation de la valeur max en valeur numérique --
-------------------------------------------------------
nb_tic <= to_integer(unsigned(BUS_VAL_TIC));
----------------------------------
-- compteur tic horloge systeme --
----------------------------------
CMPT_ETAT_PRESENT : process(CLK_IN)
begin
-- MAJ de tous du compteur => Etat P prend Etat F --
if ((CLK_IN'event) and (CLK_IN = '1')) then
cpt_p_1HZ <= cpt_f_1HZ;
end if;
end process;
CMPT_ETAT_FUTUR_1HZ : process(cpt_p_1HZ)
begin
if (cpt_p_1HZ >= nb_tic) then
cpt_f_1HZ <= 0; --(others => 0); -- remise à 0
else
cpt_f_1HZ <= cpt_p_1HZ + 1; -- incrémentation
end if;
end process;
-------------------------------------
-- Horloge rapport cyclique de 50% --
-------------------------------------
CLK_1HZ_50P : process (CLK_IN)
begin
-- synchronisation sur la clock pour éviter des effets --
if rising_edge(CLK_IN) then
if (cpt_p_1HZ <= (nb_tic/2)) then
CLK_OUT <= '0';
else
CLK_OUT <= '1';
end if;
end if;
end process;
end architecture;