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

Subversion Repositories mult_booth_array

[/] [mult_booth_array/] [trunk/] [vhdl/] [register_chain.vhd] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 plutonium
---------------------------------------------------------------------------------------------
2
-- Author:          Martin Kumm
3
-- Contact:         kumm@uni-kassel.de
4
-- License:         LGPL
5
-- Date:            31.10.2014
6
-- Compatibility:   Xilinx FPGAs of Virtex 5-7, Spartan 6 and Series 7 architectures
7
--
8
-- Description:
9
-- Simple register chain for a delay with arbitrary length (set by generic delay)
10
---------------------------------------------------------------------------------------------
11
library ieee;
12
use ieee.std_logic_1164.all;
13
use ieee.std_logic_arith.all;
14
use ieee.std_logic_unsigned.all;
15
 
16
entity register_chain is
17
  generic(
18
    word_size : integer;
19
    delay : integer
20
  );
21
  port(
22
      clk_i : in std_logic;
23
      rst_i : in std_logic;
24
          ce_i  : in  std_logic;
25
      d_i : in std_logic_vector(word_size-1 downto 0);
26
      q_o : out std_logic_vector(word_size-1 downto 0)
27
  );
28
end register_chain;
29
 
30
architecture register_chain_arch of register_chain is
31
 
32
type register_line is array(0 to delay-1) of std_logic_vector(word_size-1 downto 0);
33
 
34
signal d_delayed : register_line;
35
 
36
begin
37
 
38
implement_register_chain: if delay > 0 generate
39
        process (clk_i, rst_i)
40
        begin
41
                if rst_i = '1' then
42
            for i in 0 to delay-1 loop
43
              d_delayed(i) <= (others => '0');
44
            end loop;
45
                elsif clk_i'event and clk_i = '1' then
46
                        if ce_i = '1' then
47
                    d_delayed(0) <= d_i;
48
 
49
                    for i in 0 to delay-2 loop
50
                      d_delayed(i+1) <= d_delayed(i);
51
                    end loop;
52
            end if;
53
          end if;
54
        end process;
55
        q_o <= d_delayed(delay-1);
56
end generate;
57
 
58
implement_wire: if delay = 0 generate
59
        q_o <= d_i;
60
end generate;
61
 
62
end register_chain_arch;

powered by: WebSVN 2.1.0

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