Project

General

Profile

Statistics
| Branch: | Tag: | Revision:

lustrec-tests / vhdl_json / vhdl_files / 2-exportOK / cnes_guidelines / rule / data / STD_05100_good.vhd @ 2051e520

History | View | Annotate | Download (2.87 KB)

1 2051e520 Arnaud Dieumegard
-------------------------------------------------------------------------------------------------
2
-- Company   : CNES
3
-- Author    : Mickael Carl (CNES)
4
-- Copyright : Copyright (c) CNES.
5
-- Licensing : GNU GPLv3
6
-------------------------------------------------------------------------------------------------
7
-- Version         : V1
8
-- Version history :
9
--    V1 : 2015-04-07 : Mickael Carl (CNES): Creation
10
-------------------------------------------------------------------------------------------------
11
-- File name          : STD_05100_good.vhd
12
-- File Creation date : 2015-04-07
13
-- Project name       : VHDL Handbook CNES Edition
14
-------------------------------------------------------------------------------------------------
15
-- Softwares             :  Microsoft Windows (Windows 7) - Editor (Eclipse + VEditor)
16
-------------------------------------------------------------------------------------------------
17
-- Description : Handbook example: Metastability management: good example
18
--
19
-- Limitations : This file is an example of the VHDL handbook made by CNES. It is a stub aimed at
20
--               demonstrating good practices in VHDL and as such, its design is minimalistic.
21
--               It is provided as is, without any warranty.
22
--
23
-------------------------------------------------------------------------------------------------
24
-- Naming conventions:
25
--
26
-- i_Port: Input entity port
27
-- o_Port: Output entity port
28
-- b_Port: Bidirectional entity port
29
-- g_My_Generic: Generic entity port
30
--
31
-- c_My_Constant: Constant definition
32
-- t_My_Type: Custom type definition
33
--
34
-- My_Signal_n: Active low signal
35
-- v_My_Variable: Variable
36
-- sm_My_Signal: FSM signal
37
-- pkg_Param: Element Param coming from a package
38
--
39
-- My_Signal_re: Rising edge detection of My_Signal
40
-- My_Signal_fe: Falling edge detection of My_Signal
41
-- My_Signal_rX: X times registered My_Signal signal
42
--
43
-- P_Process_Name: Process
44
--
45
-------------------------------------------------------------------------------------------------
46
47
library IEEE;
48
use IEEE.std_logic_1164.all;
49
use IEEE.numeric_std.all;
50
51
--CODE
52
entity STD_05100_good is
53
   port (
54
      i_Reset : in  std_logic;          -- Reset signal
55
      i_Clock : in  std_logic;          -- Clock signal
56
      i_A     : in  std_logic;          -- Some async signal
57
      o_A     : out std_logic           -- Synchronized signal
58
      );
59
end STD_05100_good;
60
61
architecture Behavioral of STD_05100_good is
62
   signal A_r  : std_logic;             -- Used to synchronize i_A
63
   signal A_r2 : std_logic;             -- Module output
64
begin
65
   -- Double registration of signal A to synchronize it and avoid metastability
66
   P_Register2 : process(i_Reset, i_Clock)
67
   begin
68
      if (i_Reset = '1') then
69
         A_r  <= '0';
70
         A_r2 <= '0';
71
      elsif (rising_edge(i_Clock)) then
72
            A_r  <= i_A;
73
            A_r2 <= A_r;
74
      end if;
75
   end process;
76
77
   o_A <= A_r2;
78
end Behavioral;
79
--CODE