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

Private GIT Repository
moved vhdl gen. into block
[blast.git] / checker.vhd
1 -------------------------------------------------------------------------------
2 --
3 --  File          : checker.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 on an input
11 --  
12 --
13 --  Note          : The  input is compared to one (or two) values and depending
14 --                  on the result and the type of the comparison, the check output
15 --                  is asserted to 1 or not.
16 --                  The values are fixed by generic parameter.
17 --                  The type of check is fixed by a generic paramter
18 --                  type 1 : test if lesser or equal than X
19 --                  type 2 : test if gretar or equal than X
20 --                  type 3 : test if greater or equal than X and lesser or equal than Y
21 --
22 --
23 -------------------------------------------------------------------------------
24
25 library IEEE;
26 use IEEE.std_logic_1164.all;
27 use IEEE.numeric_std.all;
28
29 entity checker is
30   generic(
31     in_width   : natural := 8;
32     check_type : natural := 1;
33     inf_value  : natural := 0;
34     sup_value  : natural := 0
35     );
36   port(
37     clk          : in  std_logic;
38     reset        : in  std_logic;
39     data_in      : in  std_logic_vector(in_width-1 downto 0);
40     data_in_enb  : in  std_logic;
41     data_out     : out std_logic_vector(in_width-1 downto 0);
42     data_out_enb : out std_logic;
43     check_out    : out std_logic;
44     check_out_enb : out std_logic
45     );
46 end checker;
47
48
49 architecture rtl of checker is
50
51 begin
52
53   check_process : process (clk, reset)
54   begin
55     if reset = '1' then
56
57       check_out    <= '0';
58       data_out <= (others => '0');
59       data_out_enb    <= '0';
60       check_out_enb    <= '0';      
61
62     elsif rising_edge(clk) then
63
64       check_out    <= '0';
65       data_out <= (others => '0');
66       data_out_enb    <= '0';
67       check_out_enb    <= '0';
68       
69       if data_in_enb = '1' then
70         
71         data_out <= data_in;
72         data_out_enb <= '1';
73         check_out_enb    <= '1';
74         
75         if check_type = 1 then
76           if unsigned(data_in) <= inf_value then
77             check_out <= '1';
78           end if;          
79         elsif check_type = 2 then
80           if unsigned(data_in) >= inf_value then
81             check_out <= '1';
82           end if;          
83         elsif check_type = 3 then
84           if unsigned(data_in) >= inf_value and unsigned(data_in) <= sup_value then
85             check_out <= '1';
86           end if;                  
87         end if;
88       end if;
89     end if;
90
91   end process check_process;
92
93 end rtl;
94