OpenCores
URL https://opencores.org/ocsvn/saturn/saturn/trunk

Subversion Repositories saturn

[/] [saturn/] [trunk/] [IPCommunication/] [jk_chgclk.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 DavidRAMBA
--============================================================================= 
2
--  TITRE : jk_chgclk
3
--  DESCRIPTION : 
4
--       Assure la transformation d'un pulse synchrone de clk1
5
--       en un pulse de clk2
6
--       Il faut 
7
--            - que freq(clk1) >> freq(clk2);
8
--            - que la période des pulses sur clk1 soit inférieure à 2 fois la période de clk2
9
--       Principe : une bascule JK est mise à 1 sur pulse1
10
--       Une triple FF assure la détection du front montant de la JK avec clk2
11
--       Le pulse généré sur clk2 est passé dans une triple FF pour détecter
12
--       le front montant avec clk1 et clearer la JK
13
 
14
--  FICHIER :        jk_chgclk.vhd 
15
--=============================================================================
16
--  CREATION 
17
--  DATE        AUTEUR  PROJET  REVISION 
18
--  29/02/2012  DRA     CONCERTO        V1.0 
19
--=============================================================================
20
--  HISTORIQUE  DES  MODIFICATIONS :
21
--  DATE        AUTEUR  PROJET  REVISION 
22
--=============================================================================
23
 
24
LIBRARY IEEE;
25
USE IEEE.STD_LOGIC_1164.ALL;
26
USE IEEE.STD_LOGIC_ARITH.ALL;
27
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
28
 
29
 
30
 
31
-- Uncomment the following library declaration if instantiating
32
-- any Xilinx primitives in this code.
33
--library UNISIM;
34
--use UNISIM.VComponents.all;
35
 
36
ENTITY jk_chgclk IS
37
   PORT (
38
      rstn     : IN  STD_LOGIC;  -- Reset général
39
      clk1     : IN  STD_LOGIC;  -- Horloge principale 1
40
      clk2     : IN  STD_LOGIC;  -- Horloge principale 2
41
      pulsein  : IN  STD_LOGIC;  -- Signal synchronie de clk1 à prendre en compte avec clk2
42
      pulseout : OUT STD_LOGIC   -- Pulse sur clk2 sur front montant de pulse1
43
      );
44
END jk_chgclk;
45
 
46
ARCHITECTURE rtl of jk_chgclk is
47
   SIGNAL clk1_to_clk2 : STD_LOGIC_VECTOR(2 DOWNTO 0);   -- Triple FF pour le front de JK avec clk2
48
   SIGNAL clk2_to_clk1 : STD_LOGIC_VECTOR(2 DOWNTO 0);   -- Triple FF pour le front de front_jk avec clk1
49
   SIGNAL jk_clk1      : STD_LOGIC;                      -- JK de mémorisation de pulse1
50
   SIGNAL front_jk     : STD_LOGIC;                      -- Détection du front de JK avec clk2
51
 
52
BEGIN
53
   -- Process de passage de clk1 à clk2
54
   toclk2 : PROCESS(clk2, rstn)
55
   BEGIN
56
      IF (rstn = '0') THEN
57
         clk1_to_clk2 <= (OTHERS => '0');
58
      ELSIF (clk2'EVENT and clk2 = '1') THEN
59
      -- Triple FF sur la bascule JK
60
         clk1_to_clk2 <= clk1_to_clk2(1 DOWNTO 0) & jk_clk1;
61
      END IF;
62
   END PROCESS;
63
   front_jk <= clk1_to_clk2(2) AND NOT(clk1_to_clk2(1));
64
   pulseout <= front_jk;
65
 
66
   -- Process de passage de clk2 à clk1 et de gestion de la JK
67
   backtoclk1 : PROCESS(clk1, rstn)
68
   BEGIN
69
      IF (rstn = '0') THEN
70
         clk2_to_clk1 <= (OTHERS => '0');
71
         jk_clk1 <= '0';
72
      ELSIF (clk1'EVENT and clk1 = '1') THEN
73
         clk2_to_clk1 <= clk2_to_clk1(1 DOWNTO 0) & front_jk;  -- Triple FF sur le front_jk
74
         IF (clk2_to_clk1(2) = '1' AND clk2_to_clk1(1) = '0') THEN
75
         -- Priorité au clear sinon on peu avoir un deadlock
76
            jk_clk1 <= '0';
77
         ELSIF (pulsein = '1') THEN
78
         -- A chaque pulse sur pulse1
79
            jk_clk1 <= '1';        -- On mémorise l'info
80
         END IF;
81
      END IF;
82
   END PROCESS;
83
 
84
END rtl;
85
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.