da4ml 0.3.2__py3-none-any.whl → 0.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of da4ml might be problematic. Click here for more details.
- da4ml/_version.py +2 -2
- da4ml/codegen/__init__.py +4 -7
- da4ml/codegen/hls/__init__.py +4 -0
- da4ml/codegen/{cpp/cpp_codegen.py → hls/hls_codegen.py} +19 -12
- da4ml/codegen/{cpp → hls}/hls_model.py +7 -7
- da4ml/codegen/hls/source/binder_util.hh +50 -0
- da4ml/codegen/{cpp → hls}/source/vitis_bitshift.hh +5 -3
- da4ml/codegen/rtl/__init__.py +15 -0
- da4ml/codegen/{verilog/source → rtl/common_source}/binder_util.hh +4 -4
- da4ml/codegen/{verilog/source → rtl/common_source}/build_binder.mk +7 -1
- da4ml/codegen/{verilog/source → rtl/common_source}/build_prj.tcl +28 -7
- da4ml/codegen/{verilog/verilog_model.py → rtl/rtl_model.py} +87 -16
- da4ml/codegen/{verilog → rtl/verilog}/__init__.py +0 -2
- da4ml/codegen/{verilog → rtl/verilog}/comb.py +32 -34
- da4ml/codegen/{verilog → rtl/verilog}/io_wrapper.py +8 -8
- da4ml/codegen/{verilog → rtl/verilog}/pipeline.py +10 -10
- da4ml/codegen/{verilog → rtl/verilog}/source/negative.v +2 -1
- da4ml/codegen/rtl/vhdl/__init__.py +10 -0
- da4ml/codegen/rtl/vhdl/comb.py +192 -0
- da4ml/codegen/rtl/vhdl/io_wrapper.py +157 -0
- da4ml/codegen/rtl/vhdl/pipeline.py +71 -0
- da4ml/codegen/rtl/vhdl/source/multiplier.vhd +40 -0
- da4ml/codegen/rtl/vhdl/source/mux.vhd +102 -0
- da4ml/codegen/rtl/vhdl/source/negative.vhd +35 -0
- da4ml/codegen/rtl/vhdl/source/shift_adder.vhd +101 -0
- da4ml/codegen/rtl/vhdl/source/template.xdc +32 -0
- da4ml/converter/hgq2/parser.py +4 -2
- da4ml/trace/fixed_variable.py +4 -0
- da4ml/trace/fixed_variable_array.py +4 -0
- da4ml/trace/ops/reduce_utils.py +3 -3
- {da4ml-0.3.2.dist-info → da4ml-0.4.0.dist-info}/METADATA +2 -2
- da4ml-0.4.0.dist-info/RECORD +76 -0
- da4ml/codegen/cpp/__init__.py +0 -4
- da4ml/codegen/cpp/source/binder_util.hh +0 -56
- da4ml-0.3.2.dist-info/RECORD +0 -66
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_binary.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_common.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_decl.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_fixed.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_fixed_base.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_fixed_ref.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_fixed_special.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_int.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_int_base.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_int_ref.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_int_special.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/ap_shift_reg.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/etc/ap_private.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/hls_math.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/hls_stream.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/ap_types/utils/x_hls_utils.h +0 -0
- /da4ml/codegen/{cpp → hls}/source/build_binder.mk +0 -0
- /da4ml/codegen/{verilog/source → rtl/common_source}/ioutil.hh +0 -0
- /da4ml/codegen/{verilog/source → rtl/common_source}/template.xdc +0 -0
- /da4ml/codegen/{verilog → rtl/verilog}/source/multiplier.v +0 -0
- /da4ml/codegen/{verilog → rtl/verilog}/source/mux.v +0 -0
- /da4ml/codegen/{verilog → rtl/verilog}/source/shift_adder.v +0 -0
- {da4ml-0.3.2.dist-info → da4ml-0.4.0.dist-info}/WHEEL +0 -0
- {da4ml-0.3.2.dist-info → da4ml-0.4.0.dist-info}/licenses/LICENSE +0 -0
- {da4ml-0.3.2.dist-info → da4ml-0.4.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
library ieee;
|
|
2
|
+
use ieee.std_logic_1164.all;
|
|
3
|
+
use ieee.numeric_std.all;
|
|
4
|
+
|
|
5
|
+
entity multiplier is
|
|
6
|
+
generic (
|
|
7
|
+
BW_INPUT0 : integer := 32;
|
|
8
|
+
BW_INPUT1 : integer := 32;
|
|
9
|
+
SIGNED0 : integer := 0;
|
|
10
|
+
SIGNED1 : integer := 0;
|
|
11
|
+
BW_OUT : integer := 32
|
|
12
|
+
);
|
|
13
|
+
port (
|
|
14
|
+
in0 : in std_logic_vector(BW_INPUT0-1 downto 0);
|
|
15
|
+
in1 : in std_logic_vector(BW_INPUT1-1 downto 0);
|
|
16
|
+
result : out std_logic_vector(BW_OUT-1 downto 0)
|
|
17
|
+
);
|
|
18
|
+
end entity multiplier;
|
|
19
|
+
|
|
20
|
+
architecture rtl of multiplier is
|
|
21
|
+
constant BW_BUF : integer := BW_INPUT0 + BW_INPUT1;
|
|
22
|
+
signal mult_buffer : std_logic_vector(BW_BUF-1 downto 0);
|
|
23
|
+
begin
|
|
24
|
+
|
|
25
|
+
gen_mult : process(in0, in1)
|
|
26
|
+
begin
|
|
27
|
+
if SIGNED0 = 1 and SIGNED1 = 1 then
|
|
28
|
+
mult_buffer <= std_logic_vector(resize(signed(in0) * signed(in1), BW_BUF));
|
|
29
|
+
elsif SIGNED0 = 1 and SIGNED1 = 0 then
|
|
30
|
+
mult_buffer <= std_logic_vector(resize(signed(in0) * signed('0' & in1), BW_BUF));
|
|
31
|
+
elsif SIGNED0 = 0 and SIGNED1 = 1 then
|
|
32
|
+
mult_buffer <= std_logic_vector(resize(signed('0' & in0) * signed(in1), BW_BUF));
|
|
33
|
+
else
|
|
34
|
+
mult_buffer <= std_logic_vector(resize(unsigned(in0) * unsigned(in1), BW_BUF));
|
|
35
|
+
end if;
|
|
36
|
+
end process;
|
|
37
|
+
|
|
38
|
+
result <= mult_buffer(BW_OUT-1 downto 0);
|
|
39
|
+
|
|
40
|
+
end architecture rtl;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
library ieee;
|
|
2
|
+
use ieee.std_logic_1164.all;
|
|
3
|
+
use ieee.numeric_std.all;
|
|
4
|
+
|
|
5
|
+
entity mux is
|
|
6
|
+
generic (
|
|
7
|
+
BW_INPUT0 : integer := 32;
|
|
8
|
+
BW_INPUT1 : integer := 32;
|
|
9
|
+
SIGNED0 : integer := 0;
|
|
10
|
+
SIGNED1 : integer := 0;
|
|
11
|
+
BW_OUT : integer := 32;
|
|
12
|
+
SHIFT1 : integer := 0;
|
|
13
|
+
INVERT1 : integer := 0
|
|
14
|
+
);
|
|
15
|
+
port (
|
|
16
|
+
key : in std_logic;
|
|
17
|
+
in0 : in std_logic_vector(BW_INPUT0-1 downto 0);
|
|
18
|
+
in1 : in std_logic_vector(BW_INPUT1-1 downto 0);
|
|
19
|
+
result : out std_logic_vector(BW_OUT-1 downto 0)
|
|
20
|
+
);
|
|
21
|
+
end entity mux;
|
|
22
|
+
|
|
23
|
+
architecture rtl of mux is
|
|
24
|
+
function max(L, R: integer) return integer is
|
|
25
|
+
begin
|
|
26
|
+
if L > R then
|
|
27
|
+
return L;
|
|
28
|
+
else
|
|
29
|
+
return R;
|
|
30
|
+
end if;
|
|
31
|
+
end function;
|
|
32
|
+
|
|
33
|
+
function if_then_else(cond: boolean; val_true: integer; val_false: integer) return integer is
|
|
34
|
+
begin
|
|
35
|
+
if cond then
|
|
36
|
+
return val_true;
|
|
37
|
+
else
|
|
38
|
+
return val_false;
|
|
39
|
+
end if;
|
|
40
|
+
end function;
|
|
41
|
+
|
|
42
|
+
constant IN0_NEED_BITS : integer := if_then_else(SHIFT1 < 0, BW_INPUT0 - SHIFT1, BW_INPUT0);
|
|
43
|
+
constant IN1_NEED_BITS : integer := if_then_else(SHIFT1 > 0, BW_INPUT1 + SHIFT1, BW_INPUT1);
|
|
44
|
+
constant EXTRA_PAD : integer := if_then_else(SIGNED0 /= SIGNED1, INVERT1 + 1, INVERT1);
|
|
45
|
+
constant BW_BUF : integer := max(IN0_NEED_BITS, IN1_NEED_BITS) + EXTRA_PAD;
|
|
46
|
+
|
|
47
|
+
signal in0_ext : std_logic_vector(BW_BUF-1 downto 0);
|
|
48
|
+
signal in1_ext : std_logic_vector(BW_BUF-1 downto 0);
|
|
49
|
+
signal out_buf : std_logic_vector(BW_BUF-1 downto 0);
|
|
50
|
+
|
|
51
|
+
begin
|
|
52
|
+
|
|
53
|
+
-- Extension and shifting for input 0
|
|
54
|
+
gen_in0_shift_neg: if SHIFT1 < 0 generate
|
|
55
|
+
gen_in0_signed: if SIGNED0 = 1 generate
|
|
56
|
+
in0_ext <= std_logic_vector(resize(signed(in0), BW_BUF)) sll (-SHIFT1);
|
|
57
|
+
end generate;
|
|
58
|
+
gen_in0_unsigned: if SIGNED0 = 0 generate
|
|
59
|
+
in0_ext <= std_logic_vector(resize(unsigned(in0), BW_BUF)) sll (-SHIFT1);
|
|
60
|
+
end generate;
|
|
61
|
+
end generate;
|
|
62
|
+
|
|
63
|
+
gen_in0_shift_pos: if SHIFT1 >= 0 generate
|
|
64
|
+
gen_in0_signed: if SIGNED0 = 1 generate
|
|
65
|
+
in0_ext <= std_logic_vector(resize(signed(in0), BW_BUF));
|
|
66
|
+
end generate;
|
|
67
|
+
gen_in0_unsigned: if SIGNED0 = 0 generate
|
|
68
|
+
in0_ext <= std_logic_vector(resize(unsigned(in0), BW_BUF));
|
|
69
|
+
end generate;
|
|
70
|
+
end generate;
|
|
71
|
+
|
|
72
|
+
-- Extension and shifting for input 1
|
|
73
|
+
gen_in1_shift_pos: if SHIFT1 > 0 generate
|
|
74
|
+
gen_in1_signed: if SIGNED1 = 1 generate
|
|
75
|
+
in1_ext <= std_logic_vector(resize(signed(in1), BW_BUF)) sll SHIFT1;
|
|
76
|
+
end generate;
|
|
77
|
+
gen_in1_unsigned: if SIGNED1 = 0 generate
|
|
78
|
+
in1_ext <= std_logic_vector(resize(unsigned(in1), BW_BUF)) sll SHIFT1;
|
|
79
|
+
end generate;
|
|
80
|
+
end generate;
|
|
81
|
+
|
|
82
|
+
gen_in1_shift_neg: if SHIFT1 <= 0 generate
|
|
83
|
+
gen_in1_signed: if SIGNED1 = 1 generate
|
|
84
|
+
in1_ext <= std_logic_vector(resize(signed(in1), BW_BUF));
|
|
85
|
+
end generate;
|
|
86
|
+
gen_in1_unsigned: if SIGNED1 = 0 generate
|
|
87
|
+
in1_ext <= std_logic_vector(resize(unsigned(in1), BW_BUF));
|
|
88
|
+
end generate;
|
|
89
|
+
end generate;
|
|
90
|
+
|
|
91
|
+
-- Mux logic
|
|
92
|
+
gen_invert: if INVERT1 = 1 generate
|
|
93
|
+
out_buf <= in0_ext when key = '1' else std_logic_vector(-signed(in1_ext));
|
|
94
|
+
end generate;
|
|
95
|
+
|
|
96
|
+
gen_no_invert: if INVERT1 = 0 generate
|
|
97
|
+
out_buf <= in0_ext when key = '1' else in1_ext;
|
|
98
|
+
end generate;
|
|
99
|
+
|
|
100
|
+
result <= out_buf(BW_OUT-1 downto 0);
|
|
101
|
+
|
|
102
|
+
end architecture rtl;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
library ieee;
|
|
2
|
+
use ieee.std_logic_1164.all;
|
|
3
|
+
use ieee.numeric_std.all;
|
|
4
|
+
|
|
5
|
+
entity negative is
|
|
6
|
+
generic (
|
|
7
|
+
BW_IN : integer := 32;
|
|
8
|
+
BW_OUT : integer := 32;
|
|
9
|
+
IN_SIGNED : integer := 0
|
|
10
|
+
);
|
|
11
|
+
port (
|
|
12
|
+
neg_in : in std_logic_vector(BW_IN-1 downto 0);
|
|
13
|
+
neg_out : out std_logic_vector(BW_OUT-1 downto 0)
|
|
14
|
+
);
|
|
15
|
+
end entity negative;
|
|
16
|
+
|
|
17
|
+
architecture rtl of negative is
|
|
18
|
+
signal in_ext : std_logic_vector(BW_OUT-1 downto 0);
|
|
19
|
+
begin
|
|
20
|
+
|
|
21
|
+
gen_lt : if BW_IN < BW_OUT generate
|
|
22
|
+
gen_signed : if IN_SIGNED = 1 generate
|
|
23
|
+
in_ext <= std_logic_vector(resize(signed(neg_in), BW_OUT));
|
|
24
|
+
end generate;
|
|
25
|
+
gen_unsigned : if IN_SIGNED = 0 generate
|
|
26
|
+
in_ext <= std_logic_vector(resize(unsigned(neg_in), BW_OUT));
|
|
27
|
+
end generate;
|
|
28
|
+
neg_out <= std_logic_vector(-signed(in_ext));
|
|
29
|
+
end generate;
|
|
30
|
+
|
|
31
|
+
gen_ge : if BW_IN >= BW_OUT generate
|
|
32
|
+
neg_out <= std_logic_vector(-signed(neg_in(BW_OUT-1 downto 0)));
|
|
33
|
+
end generate;
|
|
34
|
+
|
|
35
|
+
end architecture rtl;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
library ieee;
|
|
2
|
+
use ieee.std_logic_1164.all;
|
|
3
|
+
use ieee.numeric_std.all;
|
|
4
|
+
|
|
5
|
+
entity shift_adder is
|
|
6
|
+
generic (
|
|
7
|
+
BW_INPUT0 : integer := 32;
|
|
8
|
+
BW_INPUT1 : integer := 32;
|
|
9
|
+
SIGNED0 : integer := 0;
|
|
10
|
+
SIGNED1 : integer := 0;
|
|
11
|
+
BW_OUT : integer := 32;
|
|
12
|
+
SHIFT1 : integer := 0;
|
|
13
|
+
IS_SUB : integer := 0
|
|
14
|
+
);
|
|
15
|
+
port (
|
|
16
|
+
in0 : in std_logic_vector(BW_INPUT0-1 downto 0);
|
|
17
|
+
in1 : in std_logic_vector(BW_INPUT1-1 downto 0);
|
|
18
|
+
result : out std_logic_vector(BW_OUT-1 downto 0)
|
|
19
|
+
);
|
|
20
|
+
end entity shift_adder;
|
|
21
|
+
|
|
22
|
+
architecture rtl of shift_adder is
|
|
23
|
+
function max(L, R: integer) return integer is
|
|
24
|
+
begin
|
|
25
|
+
if L > R then
|
|
26
|
+
return L;
|
|
27
|
+
else
|
|
28
|
+
return R;
|
|
29
|
+
end if;
|
|
30
|
+
end function;
|
|
31
|
+
|
|
32
|
+
function if_then_else(cond: boolean; val_true: integer; val_false: integer) return integer is
|
|
33
|
+
begin
|
|
34
|
+
if cond then
|
|
35
|
+
return val_true;
|
|
36
|
+
else
|
|
37
|
+
return val_false;
|
|
38
|
+
end if;
|
|
39
|
+
end function;
|
|
40
|
+
|
|
41
|
+
constant IN0_NEED_BITS : integer := if_then_else(SHIFT1 < 0, BW_INPUT0 - SHIFT1, BW_INPUT0);
|
|
42
|
+
constant IN1_NEED_BITS : integer := if_then_else(SHIFT1 > 0, BW_INPUT1 + SHIFT1, BW_INPUT1);
|
|
43
|
+
constant EXTRA_PAD : integer := if_then_else(SIGNED0 /= SIGNED1, IS_SUB + 1, IS_SUB);
|
|
44
|
+
constant BW_ADD : integer := max(IN0_NEED_BITS, IN1_NEED_BITS) + EXTRA_PAD + 1;
|
|
45
|
+
|
|
46
|
+
signal in0_ext : std_logic_vector(BW_ADD-1 downto 0);
|
|
47
|
+
signal in1_ext : std_logic_vector(BW_ADD-1 downto 0);
|
|
48
|
+
signal accum : std_logic_vector(BW_ADD-1 downto 0);
|
|
49
|
+
|
|
50
|
+
begin
|
|
51
|
+
|
|
52
|
+
-- Extension and shifting for input 0
|
|
53
|
+
gen_in0_shift_neg: if SHIFT1 < 0 generate
|
|
54
|
+
gen_in0_signed: if SIGNED0 = 1 generate
|
|
55
|
+
in0_ext <= std_logic_vector(resize(signed(in0), BW_ADD)) sll (-SHIFT1);
|
|
56
|
+
end generate;
|
|
57
|
+
gen_in0_unsigned: if SIGNED0 = 0 generate
|
|
58
|
+
in0_ext <= std_logic_vector(resize(unsigned(in0), BW_ADD)) sll (-SHIFT1);
|
|
59
|
+
end generate;
|
|
60
|
+
end generate;
|
|
61
|
+
|
|
62
|
+
gen_in0_shift_pos: if SHIFT1 >= 0 generate
|
|
63
|
+
gen_in0_signed: if SIGNED0 = 1 generate
|
|
64
|
+
in0_ext <= std_logic_vector(resize(signed(in0), BW_ADD));
|
|
65
|
+
end generate;
|
|
66
|
+
gen_in0_unsigned: if SIGNED0 = 0 generate
|
|
67
|
+
in0_ext <= std_logic_vector(resize(unsigned(in0), BW_ADD));
|
|
68
|
+
end generate;
|
|
69
|
+
end generate;
|
|
70
|
+
|
|
71
|
+
-- Extension and shifting for input 1
|
|
72
|
+
gen_in1_shift_pos: if SHIFT1 > 0 generate
|
|
73
|
+
gen_in1_signed: if SIGNED1 = 1 generate
|
|
74
|
+
in1_ext <= std_logic_vector(resize(signed(in1), BW_ADD)) sll SHIFT1;
|
|
75
|
+
end generate;
|
|
76
|
+
gen_in1_unsigned: if SIGNED1 = 0 generate
|
|
77
|
+
in1_ext <= std_logic_vector(resize(unsigned(in1), BW_ADD)) sll SHIFT1;
|
|
78
|
+
end generate;
|
|
79
|
+
end generate;
|
|
80
|
+
|
|
81
|
+
gen_in1_shift_neg: if SHIFT1 <= 0 generate
|
|
82
|
+
gen_in1_signed: if SIGNED1 = 1 generate
|
|
83
|
+
in1_ext <= std_logic_vector(resize(signed(in1), BW_ADD));
|
|
84
|
+
end generate;
|
|
85
|
+
gen_in1_unsigned: if SIGNED1 = 0 generate
|
|
86
|
+
in1_ext <= std_logic_vector(resize(unsigned(in1), BW_ADD));
|
|
87
|
+
end generate;
|
|
88
|
+
end generate;
|
|
89
|
+
|
|
90
|
+
-- Addition/subtraction logic
|
|
91
|
+
gen_sub: if IS_SUB = 1 generate
|
|
92
|
+
accum <= std_logic_vector(signed(in0_ext) - signed(in1_ext));
|
|
93
|
+
end generate;
|
|
94
|
+
|
|
95
|
+
gen_add: if IS_SUB = 0 generate
|
|
96
|
+
accum <= std_logic_vector(signed(in0_ext) + signed(in1_ext));
|
|
97
|
+
end generate;
|
|
98
|
+
|
|
99
|
+
result <= accum(BW_OUT-1 downto 0);
|
|
100
|
+
|
|
101
|
+
end architecture rtl;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
set clock_period ${CLOCK_PERIOD}
|
|
2
|
+
|
|
3
|
+
# Clock uncertainty as percentage of clock period
|
|
4
|
+
set uncertainty_setup_r ${UNCERTAINITY_SETUP}
|
|
5
|
+
set uncertainty_hold_r ${UNCERTAINITY_HOLD}
|
|
6
|
+
set delay_max_r ${DELAY_MAX}
|
|
7
|
+
set delay_min_r ${DELAY_MIN}
|
|
8
|
+
|
|
9
|
+
# Calculate actual uncertainty values
|
|
10
|
+
set uncertainty_setup [expr {$clock_period * $uncertainty_setup_r}]
|
|
11
|
+
set uncertainty_hold [expr {$clock_period * $uncertainty_hold_r}]
|
|
12
|
+
set delay_max [expr {$clock_period * $delay_max_r}]
|
|
13
|
+
set delay_min [expr {$clock_period * $delay_min_r}]
|
|
14
|
+
|
|
15
|
+
# Create clock with variable period
|
|
16
|
+
create_clock -period $clock_period -name sys_clk [get_ports {clk}]
|
|
17
|
+
|
|
18
|
+
# Input/Output constraints
|
|
19
|
+
set_input_delay -clock sys_clk -max $delay_max [get_ports {inp[*]}]
|
|
20
|
+
set_input_delay -clock sys_clk -min $delay_min [get_ports {inp[*]}]
|
|
21
|
+
|
|
22
|
+
set_output_delay -clock sys_clk -max $delay_max [get_ports {out[*]}]
|
|
23
|
+
set_output_delay -clock sys_clk -min $delay_min [get_ports {out[*]}]
|
|
24
|
+
|
|
25
|
+
# Apply calculated uncertainty values
|
|
26
|
+
set_clock_uncertainty -setup $uncertainty_setup [get_clocks sys_clk]
|
|
27
|
+
set_clock_uncertainty -hold $uncertainty_hold [get_clocks sys_clk]
|
|
28
|
+
|
|
29
|
+
set_property HD.CLK_SRC BUFG_X0Y0 [get_ports clk]
|
|
30
|
+
|
|
31
|
+
set_property retiming_forward 1 [get_cells {stage[*]_inp}]
|
|
32
|
+
set_property retiming_backward 1 [get_cells {stage[*]_inp}]
|
da4ml/converter/hgq2/parser.py
CHANGED
|
@@ -6,8 +6,8 @@ import keras
|
|
|
6
6
|
import numpy as np
|
|
7
7
|
from keras import KerasTensor, Operation
|
|
8
8
|
|
|
9
|
-
from ...trace import FixedVariableArray, HWConfig, comb_trace
|
|
10
|
-
from ...trace.
|
|
9
|
+
from ...trace import FixedVariableArray, FixedVariableArrayInput, HWConfig, comb_trace
|
|
10
|
+
from ...trace.fixed_variable import FixedVariable
|
|
11
11
|
from .replica import _registry
|
|
12
12
|
|
|
13
13
|
|
|
@@ -55,6 +55,8 @@ def replace_tensors(tensor_map: dict[KerasTensor, FixedVariableArray], obj: Any)
|
|
|
55
55
|
def _flatten_arr(args: Any) -> FixedVariableArray:
|
|
56
56
|
if isinstance(args, FixedVariableArray):
|
|
57
57
|
return np.ravel(args) # type: ignore
|
|
58
|
+
if isinstance(args, FixedVariable):
|
|
59
|
+
return FixedVariableArray(np.array([args]))
|
|
58
60
|
if not isinstance(args, Sequence):
|
|
59
61
|
return None # type: ignore
|
|
60
62
|
args = [_flatten_arr(a) for a in args]
|
da4ml/trace/fixed_variable.py
CHANGED
|
@@ -265,6 +265,10 @@ class FixedVariable:
|
|
|
265
265
|
def __sub__(self, other: 'FixedVariable|int|float|Decimal'):
|
|
266
266
|
return self + (-other)
|
|
267
267
|
|
|
268
|
+
def __truediv__(self, other: 'int|float|Decimal'):
|
|
269
|
+
assert not isinstance(other, FixedVariable), 'Division by variable is not supported'
|
|
270
|
+
return self * (1 / other)
|
|
271
|
+
|
|
268
272
|
def __mul__(self, other: 'FixedVariable|int|float|Decimal') -> 'FixedVariable':
|
|
269
273
|
if other == 0:
|
|
270
274
|
return FixedVariable(0, 0, 1, hwconf=self.hwconf, opr='const')
|
|
@@ -164,6 +164,10 @@ class FixedVariableArray:
|
|
|
164
164
|
latency: NDArray[np.floating] | float = 0.0,
|
|
165
165
|
solver_options: dict[str, Any] | None = None,
|
|
166
166
|
):
|
|
167
|
+
mask = k + i + f <= 0
|
|
168
|
+
k = np.where(mask, 0, k)
|
|
169
|
+
i = np.where(mask, 0, i)
|
|
170
|
+
f = np.where(mask, 0, f)
|
|
167
171
|
step = 2.0**-f
|
|
168
172
|
_high = 2.0**i
|
|
169
173
|
high, low = _high - step, -_high * k
|
da4ml/trace/ops/reduce_utils.py
CHANGED
|
@@ -99,7 +99,7 @@ def reduce(operator: Callable[[T, T], T], x: TA, axis: int | Sequence[int] | Non
|
|
|
99
99
|
r = _arr.reshape(target_shape) # type: ignore
|
|
100
100
|
|
|
101
101
|
if isinstance(x, FixedVariableArray):
|
|
102
|
-
|
|
103
|
-
if
|
|
104
|
-
return
|
|
102
|
+
r = FixedVariableArray(r, solver_config)
|
|
103
|
+
if r.size == 1 and not keepdims:
|
|
104
|
+
return r.ravel()[0] # type: ignore
|
|
105
105
|
return r if r.size > 1 or keepdims else r.ravel()[0] # type: ignore
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: da4ml
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary:
|
|
3
|
+
Version: 0.4.0
|
|
4
|
+
Summary: Distributed Arithmetic for Machine Learning
|
|
5
5
|
Author-email: Chang Sun <chsun@cern.ch>
|
|
6
6
|
License: GNU Lesser General Public License v3 (LGPLv3)
|
|
7
7
|
Project-URL: repository, https://github.com/calad0i/da4ml
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
da4ml/__init__.py,sha256=IETRRvzsJvPMLu1kzzi8UN5FYaM5MhNaXH2A_ZKr2_w,469
|
|
2
|
+
da4ml/_version.py,sha256=2_0GUP7yBCXRus-qiJKxQD62z172WSs1sQ6DVpPsbmM,704
|
|
3
|
+
da4ml/cmvm/__init__.py,sha256=4Tbt913k9zP0w8R1p6Oss06v5jrManbUhskyHl6e-U0,154
|
|
4
|
+
da4ml/cmvm/api.py,sha256=JpecMt6g8zutGh_uWT61_0iX8TuXct7-jq7N7HMIsgA,9626
|
|
5
|
+
da4ml/cmvm/types.py,sha256=O8BuBZ2SyucxoXt_KbulAuHNgim7Ls3M6Ovw8prLgXM,21340
|
|
6
|
+
da4ml/cmvm/core/__init__.py,sha256=bp2CXI4EOVOQSho1qwfusNs0RliZRt2dV0hZ33W_Kjo,7703
|
|
7
|
+
da4ml/cmvm/core/indexers.py,sha256=QjXgvExS-B2abHTJPDG4NufMdMEflo1i6cUhFOgJpH4,2945
|
|
8
|
+
da4ml/cmvm/core/state_opr.py,sha256=wLqO8qVuM2-qCE5LDeYJDNkUruIPHy63obsv4-x-aR8,8661
|
|
9
|
+
da4ml/cmvm/util/__init__.py,sha256=DkBlUEKA_Gu7n576ja_xZlAQfToWmNL9VXU-jmj6a-g,145
|
|
10
|
+
da4ml/cmvm/util/bit_decompose.py,sha256=SUco70HRYf4r1JU6BXwcgabDrhm_yAmucae5FC67i4I,2216
|
|
11
|
+
da4ml/cmvm/util/mat_decompose.py,sha256=eSJNlXwx_jxgqt5vLJrSLQaeq2ZXu8j9mC4d-eq883M,4094
|
|
12
|
+
da4ml/codegen/__init__.py,sha256=ldMaaixWMxEpLS6skyAgpGCcIMVHdeRCNy57-JxGn3Y,161
|
|
13
|
+
da4ml/codegen/hls/__init__.py,sha256=LkTtnKTGKX39-wpf7jb10BZ15-dpw4pIlQoATYfVOec,134
|
|
14
|
+
da4ml/codegen/hls/hls_codegen.py,sha256=XuhdYnFVNkz5FoiIF31xAnU2THKKCBytPlGEiLjsIew,6514
|
|
15
|
+
da4ml/codegen/hls/hls_model.py,sha256=mj6Oc5JaHA4ogJ3ISJ18XcqHBbJchy1muvSNUXbZEIQ,8988
|
|
16
|
+
da4ml/codegen/hls/source/binder_util.hh,sha256=ClECVxcEynE_9i4jWCV4y1dnadG3wFqLZfjxg4qHFQQ,1752
|
|
17
|
+
da4ml/codegen/hls/source/build_binder.mk,sha256=RLu4TP28aJsveyMOHxuDRGEJVoIPMo9T8WyPtqnmtbQ,584
|
|
18
|
+
da4ml/codegen/hls/source/vitis_bitshift.hh,sha256=u8wjT_cRn7bXcbC5pH3-rS76ekRbwv-VWAAdaP52-dw,765
|
|
19
|
+
da4ml/codegen/hls/source/ap_types/ap_binary.h,sha256=yOcafu2IofstDqxn0wDq8vY3JIwZQ9H5z6IY1dEqMr0,2764
|
|
20
|
+
da4ml/codegen/hls/source/ap_types/ap_common.h,sha256=1hJY9uvKOdwRSSll5uehUISZR4tsSsQ1z4PNRUc44KU,10180
|
|
21
|
+
da4ml/codegen/hls/source/ap_types/ap_decl.h,sha256=z1HsH-2RSvSoofTZR7RHeqIfAnEYVuHcIu_ute9gjEg,6473
|
|
22
|
+
da4ml/codegen/hls/source/ap_types/ap_fixed.h,sha256=3ld4qyF475nDto57AHcsLd-PfoJ7dlplDoZPLXIo6d4,12185
|
|
23
|
+
da4ml/codegen/hls/source/ap_types/ap_fixed_base.h,sha256=Cd1AJQZjHxVKbvo4w9a9ylkEyNjdXHR7VF9iUoGTb0o,85182
|
|
24
|
+
da4ml/codegen/hls/source/ap_types/ap_fixed_ref.h,sha256=TO9yZqdWf0VksXmG4SN9_n_CDYQVWU4yuja0YfkrQCw,27302
|
|
25
|
+
da4ml/codegen/hls/source/ap_types/ap_fixed_special.h,sha256=yXfQnjAc8vJv5T6R9a4L_eA0U_a0ypzK_RSn8yqzt_s,6985
|
|
26
|
+
da4ml/codegen/hls/source/ap_types/ap_int.h,sha256=nTiyrFN8IPCGRs5RYpCkLT9y4IxaqoRUHtIbpUiOLNA,10012
|
|
27
|
+
da4ml/codegen/hls/source/ap_types/ap_int_base.h,sha256=Kt4QjfUW85r8lxjY4ESqelR_CnpM0ubb4K5d2G03GMQ,71735
|
|
28
|
+
da4ml/codegen/hls/source/ap_types/ap_int_ref.h,sha256=5rsOdablweC9hKGtQ8Kktr077sEQ91gzSH5G5hM7m5Y,55218
|
|
29
|
+
da4ml/codegen/hls/source/ap_types/ap_int_special.h,sha256=HIvRRuiKGpAnCpigURX0cOQUX88dbp3lGkUWpbglMCI,6301
|
|
30
|
+
da4ml/codegen/hls/source/ap_types/ap_shift_reg.h,sha256=wqe8j3ikbdZiXwYsYlAsFbOFeQLhYXIbKoRC6fJGeuc,4894
|
|
31
|
+
da4ml/codegen/hls/source/ap_types/hls_math.h,sha256=abFBoZzYjm_pfC2wkuclVh1HuvYJ_YobnN-1Q99GRic,674
|
|
32
|
+
da4ml/codegen/hls/source/ap_types/hls_stream.h,sha256=NTkVfbE48c6XnMIfR9WzJbDwUnfe6y19xJXxBS3G--I,7480
|
|
33
|
+
da4ml/codegen/hls/source/ap_types/etc/ap_private.h,sha256=TDdxGIX0r3D6Ql8KeXoceRmHhdlwFA3Akr3-vvMVAtk,261465
|
|
34
|
+
da4ml/codegen/hls/source/ap_types/utils/x_hls_utils.h,sha256=x24cf1HyZKv0J8YQIoUvYE3uw6SNL7vWetRGIiFm2Jw,2227
|
|
35
|
+
da4ml/codegen/rtl/__init__.py,sha256=51VNqMc0JygphulBB4jjqeL9Sd18IUjGhkp2oyUDdnA,505
|
|
36
|
+
da4ml/codegen/rtl/rtl_model.py,sha256=Kb3LwNIkQ6nC591xSU8z-BuemQYwfQk-Bc55LheIHnc,14318
|
|
37
|
+
da4ml/codegen/rtl/common_source/binder_util.hh,sha256=gAcfnfzgDt2OudljfeQjtUtncNVjwRmEwu5VI7VSF6Q,2545
|
|
38
|
+
da4ml/codegen/rtl/common_source/build_binder.mk,sha256=i1CsER5jtY3GmKJCw4H8f70vh_2_FJyNVt3FTLzdJf8,1386
|
|
39
|
+
da4ml/codegen/rtl/common_source/build_prj.tcl,sha256=QkKZTJOsOfQxgDUmDw8vnrQvUluYWz_yI5VB3oyIzIo,3651
|
|
40
|
+
da4ml/codegen/rtl/common_source/ioutil.hh,sha256=QXiHbOfkprOL6b-gBQGwcEOQ39uO-bRxKxwObluiK44,3967
|
|
41
|
+
da4ml/codegen/rtl/common_source/template.xdc,sha256=GlSRy8tw_orohSuUwUSNEYJLLkAAHttGTfLTcQqRQDg,1262
|
|
42
|
+
da4ml/codegen/rtl/verilog/__init__.py,sha256=ZMFGN7atMF98kDVbbUm8dGPr0C8D8ZBfVUJnDOMEn4o,238
|
|
43
|
+
da4ml/codegen/rtl/verilog/comb.py,sha256=9pyZ5n-wefj_yoRaQxxbpY7HAlTZYUx2JY2hrBqgPwU,7174
|
|
44
|
+
da4ml/codegen/rtl/verilog/io_wrapper.py,sha256=8uSBMFbWRzSsxe7rP3yJLhiXm-MBwk5cyrLBqnantYE,5045
|
|
45
|
+
da4ml/codegen/rtl/verilog/pipeline.py,sha256=Qd_6pJOWN9yzxFhWGnsGlfxDQIEfVx4KTCbzYmwgjD0,2420
|
|
46
|
+
da4ml/codegen/rtl/verilog/source/multiplier.v,sha256=MfgRYi7jYPp4W94KLKWpc2MPu2Dg9CDiQ3lJizSIlIQ,1122
|
|
47
|
+
da4ml/codegen/rtl/verilog/source/mux.v,sha256=1PMSQKGR_Cku1EQnePBVCuX6we_dqYBXW54WBEURvs0,1928
|
|
48
|
+
da4ml/codegen/rtl/verilog/source/negative.v,sha256=YRfXVxyVQ1vu6LPCWrFzCsAFJxVIQZGZgwCoTOrMXlw,762
|
|
49
|
+
da4ml/codegen/rtl/verilog/source/shift_adder.v,sha256=qrpXBX9bhHI-o75v5zshOfq0giEATvbeGgTir20_S3Q,1915
|
|
50
|
+
da4ml/codegen/rtl/vhdl/__init__.py,sha256=ZMFGN7atMF98kDVbbUm8dGPr0C8D8ZBfVUJnDOMEn4o,238
|
|
51
|
+
da4ml/codegen/rtl/vhdl/comb.py,sha256=F6CZbL3XnQUS-ILmF3ubTX_G62kMt1xMQJZEFymCgF8,8272
|
|
52
|
+
da4ml/codegen/rtl/vhdl/io_wrapper.py,sha256=tdwIHWv5WnADPHxgAQmk4_qRldkeI7icRbkaneAkt-w,5322
|
|
53
|
+
da4ml/codegen/rtl/vhdl/pipeline.py,sha256=tjMYreqo1eHIepdOqX71GYePDLYjlsuphotpw19faKA,2641
|
|
54
|
+
da4ml/codegen/rtl/vhdl/source/multiplier.vhd,sha256=Hx63VZy_nVrv7qokwz50fTQVB7LbSBpfRKXhv4lXRAQ,1323
|
|
55
|
+
da4ml/codegen/rtl/vhdl/source/mux.vhd,sha256=tN8XbK0kD71arjEU--tidtWFpmdyxT37E7HLRC0zMYw,3442
|
|
56
|
+
da4ml/codegen/rtl/vhdl/source/negative.vhd,sha256=rTOGEdbONDcpWmOw_g3BTr3f5rZEFIhoG_0X0c_Q2NQ,1019
|
|
57
|
+
da4ml/codegen/rtl/vhdl/source/shift_adder.vhd,sha256=pIBchIa0zXmRcqwGF308_TEzh6aWOTboTEir6lMiSrE,3455
|
|
58
|
+
da4ml/codegen/rtl/vhdl/source/template.xdc,sha256=GlSRy8tw_orohSuUwUSNEYJLLkAAHttGTfLTcQqRQDg,1262
|
|
59
|
+
da4ml/converter/__init__.py,sha256=x7J2PEXYZsVWffRAkucLxbwzzU404eaijMdLwdhBxtY,57
|
|
60
|
+
da4ml/converter/hgq2/__init__.py,sha256=-gnT_7zXY-KQtPLxsqngwDKZ2TUIynn996pUjjB03B8,59
|
|
61
|
+
da4ml/converter/hgq2/parser.py,sha256=Yc5V-B_aEslqIXXJihRi3GMjF9vMkmUQ2_yHMGHMPVo,5573
|
|
62
|
+
da4ml/converter/hgq2/replica.py,sha256=aKi6BF2x4s3VUF1Q-__GE4-is9eSC3H8TGFDT05vTWc,16292
|
|
63
|
+
da4ml/trace/__init__.py,sha256=dv-rti3t8iE0RqeThfOb40mAg8FZB2WkkGQq3enJft0,282
|
|
64
|
+
da4ml/trace/fixed_variable.py,sha256=7vaXFZToCVzPtUZcHv4aoqpqJp46SHUzSWTQijVT0os,21101
|
|
65
|
+
da4ml/trace/fixed_variable_array.py,sha256=mJj9aU-jLCPVkFXrTbcRQndtUKEuhVwiFUGVSGX7PHE,12975
|
|
66
|
+
da4ml/trace/pipeline.py,sha256=AVeO9BNpQlo_WO6S1nQl7RxiHs5VFRR10tWMg_36C2o,5354
|
|
67
|
+
da4ml/trace/tracer.py,sha256=xnaVO4oTWwasfiEBqqeY9o60Lek3eX65IIbvB7JtVKQ,6099
|
|
68
|
+
da4ml/trace/ops/__init__.py,sha256=fz5Cg7ZQqPkZlUj4bIOKY6aaoA1fX_G22TeA8I1n4qY,2166
|
|
69
|
+
da4ml/trace/ops/conv_utils.py,sha256=Yn73t4F6Tcs1hBwK08L1DPOin2HYVcng4PSkU4vuZFo,8245
|
|
70
|
+
da4ml/trace/ops/einsum_utils.py,sha256=ODofbvR98FwKBTDZsJ0ObbMjU9_GjPu5AbGuWX6sdCY,11453
|
|
71
|
+
da4ml/trace/ops/reduce_utils.py,sha256=vQjEUUbvnW8inAYJWHDzgy-PbgwIdHlH-uzPzSEvrSc,3494
|
|
72
|
+
da4ml-0.4.0.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
|
73
|
+
da4ml-0.4.0.dist-info/METADATA,sha256=TbsF6SmOrTNwmH7r9yAjpzfIiRJCUpYgbDADHtqvMfM,4059
|
|
74
|
+
da4ml-0.4.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
75
|
+
da4ml-0.4.0.dist-info/top_level.txt,sha256=N0tnKVwRqFiffFdeAzCgFq71hUNySh5-ITbNd6-R58Q,6
|
|
76
|
+
da4ml-0.4.0.dist-info/RECORD,,
|
da4ml/codegen/cpp/__init__.py
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
#include <cstddef>
|
|
3
|
-
|
|
4
|
-
#ifdef _OPENMP
|
|
5
|
-
#include <algorithm>
|
|
6
|
-
#include <omp.h>
|
|
7
|
-
constexpr bool _openmp = true;
|
|
8
|
-
#else
|
|
9
|
-
constexpr bool _openmp = false;
|
|
10
|
-
#endif
|
|
11
|
-
|
|
12
|
-
template <typename CONFIG_T, typename T> void _inference(T *c_inp, T *c_out, size_t n_samples)
|
|
13
|
-
{
|
|
14
|
-
typename CONFIG_T::inp_t in_fixed_buf[CONFIG_T::N_inp];
|
|
15
|
-
typename CONFIG_T::out_t out_fixed_buf[CONFIG_T::N_out];
|
|
16
|
-
|
|
17
|
-
for(size_t i = 0; i < n_samples; ++i)
|
|
18
|
-
{
|
|
19
|
-
size_t offset_in = i * CONFIG_T::N_inp;
|
|
20
|
-
size_t offset_out = i * CONFIG_T::N_out;
|
|
21
|
-
for(size_t j = 0; j < CONFIG_T::N_inp; ++j)
|
|
22
|
-
{
|
|
23
|
-
in_fixed_buf[j] = c_inp[offset_in + j];
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
CONFIG_T::f(in_fixed_buf, out_fixed_buf);
|
|
27
|
-
|
|
28
|
-
for(size_t j = 0; j < CONFIG_T::N_out; ++j)
|
|
29
|
-
{
|
|
30
|
-
c_out[offset_out + j] = out_fixed_buf[j];
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
template <typename CONFIG_T, typename T> void batch_inference(T *c_inp, T *c_out, size_t n_samples)
|
|
36
|
-
{
|
|
37
|
-
#ifdef _OPENMP
|
|
38
|
-
size_t n_max_threads = omp_get_max_threads();
|
|
39
|
-
size_t n_samples_per_thread = std::max<size_t>(n_samples / n_max_threads, 32);
|
|
40
|
-
size_t n_thread = n_samples / n_samples_per_thread;
|
|
41
|
-
n_thread += (n_samples % n_samples_per_thread) ? 1 : 0;
|
|
42
|
-
|
|
43
|
-
#pragma omp parallel for num_threads(n_thread) schedule(static)
|
|
44
|
-
for(size_t i = 0; i < n_thread; ++i)
|
|
45
|
-
{
|
|
46
|
-
size_t start = i * n_samples_per_thread;
|
|
47
|
-
size_t end = std::min<size_t>(start + n_samples_per_thread, n_samples);
|
|
48
|
-
size_t n_samples_this_thread = end - start;
|
|
49
|
-
size_t offset_in = start * CONFIG_T::N_inp;
|
|
50
|
-
size_t offset_out = start * CONFIG_T::N_out;
|
|
51
|
-
_inference<CONFIG_T, T>(&c_inp[offset_in], &c_out[offset_out], n_samples_this_thread);
|
|
52
|
-
}
|
|
53
|
-
#else
|
|
54
|
-
_inference<CONFIG_T, T>(c_inp, c_out, n_samples);
|
|
55
|
-
#endif
|
|
56
|
-
}
|
da4ml-0.3.2.dist-info/RECORD
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
da4ml/__init__.py,sha256=IETRRvzsJvPMLu1kzzi8UN5FYaM5MhNaXH2A_ZKr2_w,469
|
|
2
|
-
da4ml/_version.py,sha256=e8NqPtZ8fggRgk3GPrqZ_U_BDV8aSULw1u_Gn9NNbnk,704
|
|
3
|
-
da4ml/cmvm/__init__.py,sha256=4Tbt913k9zP0w8R1p6Oss06v5jrManbUhskyHl6e-U0,154
|
|
4
|
-
da4ml/cmvm/api.py,sha256=JpecMt6g8zutGh_uWT61_0iX8TuXct7-jq7N7HMIsgA,9626
|
|
5
|
-
da4ml/cmvm/types.py,sha256=O8BuBZ2SyucxoXt_KbulAuHNgim7Ls3M6Ovw8prLgXM,21340
|
|
6
|
-
da4ml/cmvm/core/__init__.py,sha256=bp2CXI4EOVOQSho1qwfusNs0RliZRt2dV0hZ33W_Kjo,7703
|
|
7
|
-
da4ml/cmvm/core/indexers.py,sha256=QjXgvExS-B2abHTJPDG4NufMdMEflo1i6cUhFOgJpH4,2945
|
|
8
|
-
da4ml/cmvm/core/state_opr.py,sha256=wLqO8qVuM2-qCE5LDeYJDNkUruIPHy63obsv4-x-aR8,8661
|
|
9
|
-
da4ml/cmvm/util/__init__.py,sha256=DkBlUEKA_Gu7n576ja_xZlAQfToWmNL9VXU-jmj6a-g,145
|
|
10
|
-
da4ml/cmvm/util/bit_decompose.py,sha256=SUco70HRYf4r1JU6BXwcgabDrhm_yAmucae5FC67i4I,2216
|
|
11
|
-
da4ml/cmvm/util/mat_decompose.py,sha256=eSJNlXwx_jxgqt5vLJrSLQaeq2ZXu8j9mC4d-eq883M,4094
|
|
12
|
-
da4ml/codegen/__init__.py,sha256=Chdh3oO_vLR4saLbT9VxBPz_0wlEzxJldFSZaVUJo7U,331
|
|
13
|
-
da4ml/codegen/cpp/__init__.py,sha256=SIePoi_T4iJph50OQUosAnaVuLCckukYjLxp91Y8xQs,134
|
|
14
|
-
da4ml/codegen/cpp/cpp_codegen.py,sha256=ot293c8aHBx7wy1R7hnB9IVI22jYMO0476ghYKD8ECA,6162
|
|
15
|
-
da4ml/codegen/cpp/hls_model.py,sha256=J5lnB8sAvMy0Bo5MSJOpgyUm1tzEJqBxgPTlOd38Gbg,8978
|
|
16
|
-
da4ml/codegen/cpp/source/binder_util.hh,sha256=pBVmhXIDvdCr8n2wwYehc3Fpp60sWYrrZaDoP3x9JZE,1880
|
|
17
|
-
da4ml/codegen/cpp/source/build_binder.mk,sha256=RLu4TP28aJsveyMOHxuDRGEJVoIPMo9T8WyPtqnmtbQ,584
|
|
18
|
-
da4ml/codegen/cpp/source/vitis_bitshift.hh,sha256=yFpYCVJ8gof-EzPjkIWWZYmdFh_wk133Pxzs7f61IQo,774
|
|
19
|
-
da4ml/codegen/cpp/source/ap_types/ap_binary.h,sha256=yOcafu2IofstDqxn0wDq8vY3JIwZQ9H5z6IY1dEqMr0,2764
|
|
20
|
-
da4ml/codegen/cpp/source/ap_types/ap_common.h,sha256=1hJY9uvKOdwRSSll5uehUISZR4tsSsQ1z4PNRUc44KU,10180
|
|
21
|
-
da4ml/codegen/cpp/source/ap_types/ap_decl.h,sha256=z1HsH-2RSvSoofTZR7RHeqIfAnEYVuHcIu_ute9gjEg,6473
|
|
22
|
-
da4ml/codegen/cpp/source/ap_types/ap_fixed.h,sha256=3ld4qyF475nDto57AHcsLd-PfoJ7dlplDoZPLXIo6d4,12185
|
|
23
|
-
da4ml/codegen/cpp/source/ap_types/ap_fixed_base.h,sha256=Cd1AJQZjHxVKbvo4w9a9ylkEyNjdXHR7VF9iUoGTb0o,85182
|
|
24
|
-
da4ml/codegen/cpp/source/ap_types/ap_fixed_ref.h,sha256=TO9yZqdWf0VksXmG4SN9_n_CDYQVWU4yuja0YfkrQCw,27302
|
|
25
|
-
da4ml/codegen/cpp/source/ap_types/ap_fixed_special.h,sha256=yXfQnjAc8vJv5T6R9a4L_eA0U_a0ypzK_RSn8yqzt_s,6985
|
|
26
|
-
da4ml/codegen/cpp/source/ap_types/ap_int.h,sha256=nTiyrFN8IPCGRs5RYpCkLT9y4IxaqoRUHtIbpUiOLNA,10012
|
|
27
|
-
da4ml/codegen/cpp/source/ap_types/ap_int_base.h,sha256=Kt4QjfUW85r8lxjY4ESqelR_CnpM0ubb4K5d2G03GMQ,71735
|
|
28
|
-
da4ml/codegen/cpp/source/ap_types/ap_int_ref.h,sha256=5rsOdablweC9hKGtQ8Kktr077sEQ91gzSH5G5hM7m5Y,55218
|
|
29
|
-
da4ml/codegen/cpp/source/ap_types/ap_int_special.h,sha256=HIvRRuiKGpAnCpigURX0cOQUX88dbp3lGkUWpbglMCI,6301
|
|
30
|
-
da4ml/codegen/cpp/source/ap_types/ap_shift_reg.h,sha256=wqe8j3ikbdZiXwYsYlAsFbOFeQLhYXIbKoRC6fJGeuc,4894
|
|
31
|
-
da4ml/codegen/cpp/source/ap_types/hls_math.h,sha256=abFBoZzYjm_pfC2wkuclVh1HuvYJ_YobnN-1Q99GRic,674
|
|
32
|
-
da4ml/codegen/cpp/source/ap_types/hls_stream.h,sha256=NTkVfbE48c6XnMIfR9WzJbDwUnfe6y19xJXxBS3G--I,7480
|
|
33
|
-
da4ml/codegen/cpp/source/ap_types/etc/ap_private.h,sha256=TDdxGIX0r3D6Ql8KeXoceRmHhdlwFA3Akr3-vvMVAtk,261465
|
|
34
|
-
da4ml/codegen/cpp/source/ap_types/utils/x_hls_utils.h,sha256=x24cf1HyZKv0J8YQIoUvYE3uw6SNL7vWetRGIiFm2Jw,2227
|
|
35
|
-
da4ml/codegen/verilog/__init__.py,sha256=rXmW2V9sDp2RYMDAWlhj_gfMXH3G5lPNmLrFtsJjn_A,298
|
|
36
|
-
da4ml/codegen/verilog/comb.py,sha256=AnrfJxJXe3hytXiX00VGbdW91AAJDF-dLdsSSWBivdU,7961
|
|
37
|
-
da4ml/codegen/verilog/io_wrapper.py,sha256=SSs-ZRhBVLR6tpFso8GNGk-FH6JDe-p7LPvVPjTspxo,5002
|
|
38
|
-
da4ml/codegen/verilog/pipeline.py,sha256=YsPRTLp04Aofg33QMw6_ga3fNX9LeCD7Pq2PnERLWOg,2377
|
|
39
|
-
da4ml/codegen/verilog/verilog_model.py,sha256=2uyrpQN_f1cdF5fz0fBR5nh6idHlzhh_JneLkJAruQs,12172
|
|
40
|
-
da4ml/codegen/verilog/source/binder_util.hh,sha256=2sab9M0vYBsaimzJ8tWJ9LsxYKMe3xTqdFSGO7YRPbk,2521
|
|
41
|
-
da4ml/codegen/verilog/source/build_binder.mk,sha256=rQbI98itE_b1wIQ_0uCXfBzNmGK2XT4vWmRyCJNnPKk,960
|
|
42
|
-
da4ml/codegen/verilog/source/build_prj.tcl,sha256=JA-zLl7fd2PV-BFaX22-MTex04QTi0urWUXNAEUDTy0,3003
|
|
43
|
-
da4ml/codegen/verilog/source/ioutil.hh,sha256=QXiHbOfkprOL6b-gBQGwcEOQ39uO-bRxKxwObluiK44,3967
|
|
44
|
-
da4ml/codegen/verilog/source/multiplier.v,sha256=MfgRYi7jYPp4W94KLKWpc2MPu2Dg9CDiQ3lJizSIlIQ,1122
|
|
45
|
-
da4ml/codegen/verilog/source/mux.v,sha256=1PMSQKGR_Cku1EQnePBVCuX6we_dqYBXW54WBEURvs0,1928
|
|
46
|
-
da4ml/codegen/verilog/source/negative.v,sha256=YphTCLnYslktsnCPq1xjbYgIFavani5NBbqs20uwhBI,688
|
|
47
|
-
da4ml/codegen/verilog/source/shift_adder.v,sha256=qrpXBX9bhHI-o75v5zshOfq0giEATvbeGgTir20_S3Q,1915
|
|
48
|
-
da4ml/codegen/verilog/source/template.xdc,sha256=GlSRy8tw_orohSuUwUSNEYJLLkAAHttGTfLTcQqRQDg,1262
|
|
49
|
-
da4ml/converter/__init__.py,sha256=x7J2PEXYZsVWffRAkucLxbwzzU404eaijMdLwdhBxtY,57
|
|
50
|
-
da4ml/converter/hgq2/__init__.py,sha256=-gnT_7zXY-KQtPLxsqngwDKZ2TUIynn996pUjjB03B8,59
|
|
51
|
-
da4ml/converter/hgq2/parser.py,sha256=O55QTrlkev0lvxiIweXlTGG9RPcfjdrJgpkZc-rwetg,5472
|
|
52
|
-
da4ml/converter/hgq2/replica.py,sha256=aKi6BF2x4s3VUF1Q-__GE4-is9eSC3H8TGFDT05vTWc,16292
|
|
53
|
-
da4ml/trace/__init__.py,sha256=dv-rti3t8iE0RqeThfOb40mAg8FZB2WkkGQq3enJft0,282
|
|
54
|
-
da4ml/trace/fixed_variable.py,sha256=samW_xChnERsMaXVQz7aKUQJsIrnSHu2ox4x9dMzhR0,20918
|
|
55
|
-
da4ml/trace/fixed_variable_array.py,sha256=1gGSc-ZmRG59sUXvgdN7pulG4XhacAGmgSmzq7nAhJ4,12846
|
|
56
|
-
da4ml/trace/pipeline.py,sha256=AVeO9BNpQlo_WO6S1nQl7RxiHs5VFRR10tWMg_36C2o,5354
|
|
57
|
-
da4ml/trace/tracer.py,sha256=xnaVO4oTWwasfiEBqqeY9o60Lek3eX65IIbvB7JtVKQ,6099
|
|
58
|
-
da4ml/trace/ops/__init__.py,sha256=fz5Cg7ZQqPkZlUj4bIOKY6aaoA1fX_G22TeA8I1n4qY,2166
|
|
59
|
-
da4ml/trace/ops/conv_utils.py,sha256=Yn73t4F6Tcs1hBwK08L1DPOin2HYVcng4PSkU4vuZFo,8245
|
|
60
|
-
da4ml/trace/ops/einsum_utils.py,sha256=ODofbvR98FwKBTDZsJ0ObbMjU9_GjPu5AbGuWX6sdCY,11453
|
|
61
|
-
da4ml/trace/ops/reduce_utils.py,sha256=9bi-fizhl1BPy9quQzaWMs83eCDSRMFag2PuvqlVFgI,3500
|
|
62
|
-
da4ml-0.3.2.dist-info/licenses/LICENSE,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
|
63
|
-
da4ml-0.3.2.dist-info/METADATA,sha256=zZnCaLH3ndDuURdIXAZD37A06L0ommMlBzfuL93lG-E,4055
|
|
64
|
-
da4ml-0.3.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
65
|
-
da4ml-0.3.2.dist-info/top_level.txt,sha256=N0tnKVwRqFiffFdeAzCgFq71hUNySh5-ITbNd6-R58Q,6
|
|
66
|
-
da4ml-0.3.2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|