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

Subversion Repositories lateq

[/] [lateq/] [trunk/] [hdl_single_type/] [src/] [tree_adder_1st.vhd] - Blame information for rev 4

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 wzab
-------------------------------------------------------------------------------
2
-- Title      : Multiinput adder for creating hierarchical adders
3
-- Project    : 
4
-------------------------------------------------------------------------------
5
-- File       : max_finder_1st.vhd
6
-- Author     : Wojciech M. Zabolotny ( wzab01<at>gmail.com )
7
-- Company    :
8
-- License    : BSD
9
-- Created    : 2013-11-01
10
-- Last update: 2015-09-23
11
-- Platform   : 
12
-- Standard   : VHDL'93/02
13
-------------------------------------------------------------------------------
14
-- Description: 
15
-------------------------------------------------------------------------------
16
-- Copyright (c) 2014 
17
-------------------------------------------------------------------------------
18
-- Revisions  :
19
-- Date        Version  Author  Description
20
-- 2013-11-01  1.0      WZab    Created
21
-------------------------------------------------------------------------------
22
 
23
library IEEE;
24
use IEEE.STD_LOGIC_1164.all;
25
 
26
use IEEE.NUMERIC_STD.all;
27
library work;
28
use work.lateq_pkg.all;
29
use work.ex1_pkg.all;
30
use work.ex1_trees_pkg.all;
31
 
32
entity tree_adder_1st is
33
  port (
34
    dins  : in  T_EX1_ADD_INS;
35
    dout  : out T_USER_DATA_MRK;
36
    clk   : in  std_logic;
37
    rst_p : in  std_logic);
38
end tree_adder_1st;
39
 
40
architecture beh of tree_adder_1st is
41
 
42
begin
43
 
44
  process (clk, rst_p) is
45
    variable res   : T_USER_DATA_MRK;
46
    variable first : boolean;
47
  begin  -- process
48
    if clk'event and clk = '1' then     -- rising clock edge
49
      if rst_p = '1' then               -- asynchronous reset (active low)
50
        dout <= C_USER_DATA_MRK_INIT;
51
      else
52
        first := true;
53
        res   := C_USER_DATA_MRK_INIT;
54
        for i in 0 to EX1_NOF_INS_IN_ADD-1 loop
55
          -- Use only valid inputs
56
          if dins(i).valid then
57
            if first then
58
              res := dins(i);
59
              first := false;
60
            else
61
              -- In simulation check delays the adjustment blocks should equalize
62
              -- time marks. So any time marker difference is a sign of serious problem!
63
              -- pragma translate_off
64
              assert res.lateq_mrk = dins(i).lateq_mrk report "in entity:" & tree_adder_1st'instance_name &
65
                "Different delays between input 0 and input " &
66
                integer'image(i) & ": " & integer'image(res.lateq_mrk) & "<>" & integer'image(dins(i).lateq_mrk)
67
                severity failure;
68
              -- pragma translate_on
69
              null;                     -- to avoid syntax error in synthesis
70
              res.data := res.data + dins(i).data;
71
            end if;
72
          end if;
73
        end loop;  -- i
74
        dout <= res;
75
        --report "adder " & tree_adder_1st'instance_name & " result:" & integer'image(to_integer(res.data)) severity note;
76
      end if;
77
    end if;
78
  end process;
79
 
80
end beh;

powered by: WebSVN 2.1.0

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