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

Private GIT Repository
aaccecc90fd51298b2007d3c4cd482243880933a
[blast.git] / deserializer_3x1.vhd
1 -------------------------------------------------------------------------------
2 --
3 --  File          : deserializer_3x1.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 deserialization of 3 element into
11 --                  3 parallel outputs
12 --  
13 --
14 --  Note          : 
15 --
16 -------------------------------------------------------------------------------
17
18 library IEEE;
19 use IEEE.std_logic_1164.all;
20 use IEEE.numeric_std.all;
21
22 entity deserializer_3x1 is
23   generic(
24     in_width : natural := 8
25     );
26   port(
27     clk           : in  std_logic;
28     reset         : in  std_logic;
29     data_in       : in  std_logic_vector(in_width-1 downto 0);
30     data_in_enb   : in  std_logic;
31     data1_out     : out std_logic_vector(in_width-1 downto 0);
32     data1_out_enb : out std_logic;
33     data2_out     : out std_logic_vector(in_width-1 downto 0);
34     data2_out_enb : out std_logic;    
35     data3_out     : out std_logic_vector(in_width-1 downto 0);
36     data3_out_enb : out std_logic
37
38     );
39 end deserializer_3x1;
40
41
42 architecture rtl of deserializer_3x1 is
43
44   -- Signals
45   signal do_out    : std_logic;
46   signal data1_reg : std_logic_vector(in_width-1 downto 0);
47   signal data2_reg : std_logic_vector(in_width-1 downto 0);
48
49   signal count : unsigned(1 downto 0);
50
51 begin
52
53   deser_process : process (clk, reset)
54   begin
55     if reset = '1' then
56       count     <= to_unsigned(0, 2);
57       data1_reg <= (others => '0');
58       data2_reg <= (others => '0');
59       data1_out <= (others => '0');
60       data2_out <= (others => '0');
61       data3_out <= (others => '0');
62       do_out    <= '0';
63
64     elsif rising_edge(clk) then
65
66       do_out    <= '0';
67       data1_out <= (others => '0');
68       data2_out <= (others => '0');
69       data3_out <= (others => '0');
70
71       if data_in_enb = '1' then
72
73         if count = 0 then
74           data1_reg <= data_in;
75           count     <= count + 1;
76         elsif count = 1 then
77           data2_reg <= data_in;
78           count     <= count + 1;
79         elsif count = 2 then
80           data1_out <= data1_reg;
81           data2_out <= data2_reg;
82           data3_out <= data_in;
83           do_out    <= '1';
84           count     <= to_unsigned(0, 2);
85         end if;
86       end if;
87     end if;
88
89   end process deser_process;
90
91   data1_out_enb <= do_out;
92   data2_out_enb <= do_out;
93   data3_out_enb <= do_out;  
94
95 end rtl;
96