]> AND Private Git Repository - blast.git/blob - threshold_extctl.vhd
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
add graph modif, progress on vhdl generation
[blast.git] / threshold_extctl.vhd
1 -------------------------------------------------------------------------------
2 --
3 --  File          : threshold _extctl.vhd
4 --  Related files : 
5 --
6 --  Author(s)     : stephane Domas (sdomas@univ-fcomte.fr)
7 --
8 --  Creation Date : 2017/10/16
9 --
10 --  Description   : This IP does a threshold based on a external signal
11 --  
12 --
13 --  Note          : input data is kept as is depending on the fact that
14 --                  the keep_in signal is asserted to 1 or not. It it is not,
15 --                  then input is replaced by the default_value given as a
16 --                  generic. Note that keep_in_enb and data_in_enb must be
17 --                  asserted to 1 at the same time so that the block gives an output
18 --
19 -------------------------------------------------------------------------------
20
21 library IEEE;
22 use IEEE.std_logic_1164.all;
23 use IEEE.numeric_std.all;
24
25 entity threshold_extctl is
26   generic(
27     in_width      : natural := 8;
28     default_value : natural := 0
29     );
30   port(
31     clk          : in  std_logic;
32     reset        : in  std_logic;
33     data_in      : in  std_logic_vector(in_width-1 downto 0);
34     data_in_enb  : in  std_logic;
35     keep_in      : in  std_logic;
36     keep_in_enb  : in  std_logic;
37     data_out     : out std_logic_vector(in_width-1 downto 0);
38     data_out_enb : out std_logic
39
40     );
41 end threshold_extctl;
42
43
44 architecture rtl of threshold_extctl is
45
46   -- Signals
47   signal def_val : unsigned(in_width-1 downto 0);
48
49 begin
50
51   def_val <= to_unsigned(default_value, in_width);
52
53   threshold_process : process (clk, reset)
54   begin
55     if reset = '1' then
56
57       data_out_enb <= '0';
58       data_out     <= (others => '0');
59
60     elsif rising_edge(clk) then
61
62       data_out_enb <= '0';
63
64       if data_in_enb = '1' and keep_in_enb = '1' then
65
66         if keep_in = '1' then
67           data_out <= data_in;
68         else
69           data_out <= std_logic_vector(def_val);
70         end if;
71         data_out_enb <= '1';
72       end if;
73     end if;
74   end process threshold_process;
75
76 end rtl;
77