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

Subversion Repositories saturn

[/] [saturn/] [tags/] [Release IPCommunication v1.0/] [jk_chgclk.vhd] - Diff between revs 2 and 7

Only display areas with differences | Details | Blame | View Log

Rev 2 Rev 7
--============================================================================= 
--============================================================================= 
--  TITRE : jk_chgclk
--  TITRE : jk_chgclk
--  DESCRIPTION : 
--  DESCRIPTION : 
--       Assure la transformation d'un pulse synchrone de clk1
--       Assure la transformation d'un pulse synchrone de clk1
--       en un pulse de clk2
--       en un pulse de clk2
--       Il faut 
--       Il faut 
--            - que freq(clk1) >> freq(clk2);
--            - que freq(clk1) >> freq(clk2);
--            - que la période des pulses sur clk1 soit inférieure à 2 fois la période de clk2
--            - que la période des pulses sur clk1 soit inférieure à 2 fois la période de clk2
--       Principe : une bascule JK est mise à 1 sur pulse1
--       Principe : une bascule JK est mise à 1 sur pulse1
--       Une triple FF assure la détection du front montant de la JK avec clk2
--       Une triple FF assure la détection du front montant de la JK avec clk2
--       Le pulse généré sur clk2 est passé dans une triple FF pour détecter
--       Le pulse généré sur clk2 est passé dans une triple FF pour détecter
--       le front montant avec clk1 et clearer la JK
--       le front montant avec clk1 et clearer la JK
 
 
--  FICHIER :        jk_chgclk.vhd 
--  FICHIER :        jk_chgclk.vhd 
--=============================================================================
--=============================================================================
--  CREATION 
--  CREATION 
--  DATE        AUTEUR  PROJET  REVISION 
--  DATE        AUTEUR  PROJET  REVISION 
--  29/02/2012  DRA     CONCERTO        V1.0 
--  29/02/2012  DRA     CONCERTO        V1.0 
--=============================================================================
--=============================================================================
--  HISTORIQUE  DES  MODIFICATIONS :
--  HISTORIQUE  DES  MODIFICATIONS :
--  DATE        AUTEUR  PROJET  REVISION 
--  DATE        AUTEUR  PROJET  REVISION 
--=============================================================================
--=============================================================================
 
 
LIBRARY IEEE;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
 
 
 
 
 
 
-- Uncomment the following library declaration if instantiating
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
-- any Xilinx primitives in this code.
--library UNISIM;
--library UNISIM;
--use UNISIM.VComponents.all;
--use UNISIM.VComponents.all;
 
 
ENTITY jk_chgclk IS
ENTITY jk_chgclk IS
   PORT (
   PORT (
      rstn     : IN  STD_LOGIC;  -- Reset général
      rstn     : IN  STD_LOGIC;  -- Reset général
      clk1     : IN  STD_LOGIC;  -- Horloge principale 1
      clk1     : IN  STD_LOGIC;  -- Horloge principale 1
      clk2     : IN  STD_LOGIC;  -- Horloge principale 2
      clk2     : IN  STD_LOGIC;  -- Horloge principale 2
      pulsein  : IN  STD_LOGIC;  -- Signal synchronie de clk1 à prendre en compte avec clk2
      pulsein  : IN  STD_LOGIC;  -- Signal synchronie de clk1 à prendre en compte avec clk2
      pulseout : OUT STD_LOGIC   -- Pulse sur clk2 sur front montant de pulse1
      pulseout : OUT STD_LOGIC   -- Pulse sur clk2 sur front montant de pulse1
      );
      );
END jk_chgclk;
END jk_chgclk;
 
 
ARCHITECTURE rtl of jk_chgclk is
ARCHITECTURE rtl of jk_chgclk is
   SIGNAL clk1_to_clk2 : STD_LOGIC_VECTOR(2 DOWNTO 0);   -- Triple FF pour le front de JK avec clk2
   SIGNAL clk1_to_clk2 : STD_LOGIC_VECTOR(2 DOWNTO 0);   -- Triple FF pour le front de JK avec clk2
   SIGNAL clk2_to_clk1 : STD_LOGIC_VECTOR(2 DOWNTO 0);   -- Triple FF pour le front de front_jk avec clk1
   SIGNAL clk2_to_clk1 : STD_LOGIC_VECTOR(2 DOWNTO 0);   -- Triple FF pour le front de front_jk avec clk1
   SIGNAL jk_clk1      : STD_LOGIC;                      -- JK de mémorisation de pulse1
   SIGNAL jk_clk1      : STD_LOGIC;                      -- JK de mémorisation de pulse1
   SIGNAL front_jk     : STD_LOGIC;                      -- Détection du front de JK avec clk2
   SIGNAL front_jk     : STD_LOGIC;                      -- Détection du front de JK avec clk2
 
 
BEGIN
BEGIN
   -- Process de passage de clk1 à clk2
   -- Process de passage de clk1 à clk2
   toclk2 : PROCESS(clk2, rstn)
   toclk2 : PROCESS(clk2, rstn)
   BEGIN
   BEGIN
      IF (rstn = '0') THEN
      IF (rstn = '0') THEN
         clk1_to_clk2 <= (OTHERS => '0');
         clk1_to_clk2 <= (OTHERS => '0');
      ELSIF (clk2'EVENT and clk2 = '1') THEN
      ELSIF (clk2'EVENT and clk2 = '1') THEN
      -- Triple FF sur la bascule JK
      -- Triple FF sur la bascule JK
         clk1_to_clk2 <= clk1_to_clk2(1 DOWNTO 0) & jk_clk1;
         clk1_to_clk2 <= clk1_to_clk2(1 DOWNTO 0) & jk_clk1;
      END IF;
      END IF;
   END PROCESS;
   END PROCESS;
   front_jk <= clk1_to_clk2(2) AND NOT(clk1_to_clk2(1));
   front_jk <= clk1_to_clk2(2) AND NOT(clk1_to_clk2(1));
   pulseout <= front_jk;
   pulseout <= front_jk;
 
 
   -- Process de passage de clk2 à clk1 et de gestion de la JK
   -- Process de passage de clk2 à clk1 et de gestion de la JK
   backtoclk1 : PROCESS(clk1, rstn)
   backtoclk1 : PROCESS(clk1, rstn)
   BEGIN
   BEGIN
      IF (rstn = '0') THEN
      IF (rstn = '0') THEN
         clk2_to_clk1 <= (OTHERS => '0');
         clk2_to_clk1 <= (OTHERS => '0');
         jk_clk1 <= '0';
         jk_clk1 <= '0';
      ELSIF (clk1'EVENT and clk1 = '1') THEN
      ELSIF (clk1'EVENT and clk1 = '1') THEN
         clk2_to_clk1 <= clk2_to_clk1(1 DOWNTO 0) & front_jk;  -- Triple FF sur le front_jk
         clk2_to_clk1 <= clk2_to_clk1(1 DOWNTO 0) & front_jk;  -- Triple FF sur le front_jk
         IF (clk2_to_clk1(2) = '1' AND clk2_to_clk1(1) = '0') THEN
         IF (clk2_to_clk1(2) = '1' AND clk2_to_clk1(1) = '0') THEN
         -- Priorité au clear sinon on peu avoir un deadlock
         -- Priorité au clear sinon on peu avoir un deadlock
            jk_clk1 <= '0';
            jk_clk1 <= '0';
         ELSIF (pulsein = '1') THEN
         ELSIF (pulsein = '1') THEN
         -- A chaque pulse sur pulse1
         -- A chaque pulse sur pulse1
            jk_clk1 <= '1';        -- On mémorise l'info
            jk_clk1 <= '1';        -- On mémorise l'info
         END IF;
         END IF;
      END IF;
      END IF;
   END PROCESS;
   END PROCESS;
 
 
END rtl;
END rtl;
 
 
 
 

powered by: WebSVN 2.1.0

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