Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
B
BSD
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
chengshuyao
BSD
Commits
7889538b
Commit
7889538b
authored
Jul 18, 2025
by
chengshuyao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add vector mode for AIGs
parent
6751fa64
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
717 additions
and
31 deletions
+717
-31
src/BSD.cpp
+1
-1
src/BSD.h
+129
-23
src/c1908_vec.h
+533
-0
src/readme.md
+12
-2
src/top.h
+22
-5
src/write_vec.sh
+19
-0
src/zstart.sh
+1
-0
No files found.
src/BSD.cpp
View file @
7889538b
...
@@ -32,7 +32,7 @@ using namespace std;
...
@@ -32,7 +32,7 @@ using namespace std;
//电路的parameter Circuit_parameter
//电路的parameter Circuit_parameter
int
circuit_index
=
9999
;
//电路编号
int
circuit_index
=
9999
;
//电路编号
extern
const
int
parameter_max_orders
=
8
;
extern
const
int
parameter_max_orders
=
8
;
...
...
src/BSD.h
View file @
7889538b
...
@@ -74,7 +74,9 @@ public:
...
@@ -74,7 +74,9 @@ public:
bool
**
simplify_list
;
bool
**
simplify_list
;
bool
cal_infer_result
(
bool
input_data
[
parameter_input_bit_width
],
int
which_root_node
,
bool
neg
);
bool
cal_infer_result
(
bool
input_data
[
parameter_input_bit_width
],
int
which_root_node
,
bool
neg
);
bool
*
io_generator
(
bool
input_data
[
parameter_input_bit_width
],
bool
*
output_data
);
bool
*
io_generator
(
bool
input_data
[
parameter_input_bit_width
],
bool
*
output_data
);
int
*
io_generator_vec
(
int
input_data
[
parameter_input_bit_width
],
int
*
output_data
);
bool
io_generator_single
(
bool
input_data
[
parameter_input_bit_width
],
int
which_bit_output
);
bool
io_generator_single
(
bool
input_data
[
parameter_input_bit_width
],
int
which_bit_output
);
int
io_generator_single_vec
(
int
input_data
[
parameter_input_bit_width
],
int
which_bit_output
);
int
set_random_input_data
(
bool
**
mask_input_data
);
int
set_random_input_data
(
bool
**
mask_input_data
);
int
mask_random_input_data
(
int
depth
,
bool
mask
[
parameter_input_bit_width
],
int
amount
,
int
*
most_influence
,
bool
**
mask_input_data
);
int
mask_random_input_data
(
int
depth
,
bool
mask
[
parameter_input_bit_width
],
int
amount
,
int
*
most_influence
,
bool
**
mask_input_data
);
int
next_bit_layer
(
int
depth
,
int
order_num
);
int
next_bit_layer
(
int
depth
,
int
order_num
);
...
@@ -197,7 +199,15 @@ int BDD_class::BSD_samples_sort_each_layer(){
...
@@ -197,7 +199,15 @@ int BDD_class::BSD_samples_sort_each_layer(){
bool
*
BDD_class
::
io_generator
(
bool
input_data
[
parameter_input_bit_width
],
bool
*
output_bits
){
bool
*
BDD_class
::
io_generator
(
bool
input_data
[
parameter_input_bit_width
],
bool
*
output_bits
){
//bool* output_bits = new bool [parameter_output_bit_width];
//bool* output_bits = new bool [parameter_output_bit_width];
output_bits
=
io_generator_function
(
input_data
,
which_demo_function
,
output_bits
);
output_bits
=
io_generator_function
(
input_data
,
output_bits
);
//io_read_times += 1;
return
output_bits
;
};
int
*
BDD_class
::
io_generator_vec
(
int
input_data
[
parameter_input_bit_width
],
int
*
output_bits
){
//bool* output_bits = new bool [parameter_output_bit_width];
//cout<<"Debug 4"<<endl;
output_bits
=
io_generator_function_vec
(
input_data
,
output_bits
);
//cout<<"Debug 5"<<endl;
//io_read_times += 1;
//io_read_times += 1;
return
output_bits
;
return
output_bits
;
};
};
...
@@ -206,12 +216,26 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i
...
@@ -206,12 +216,26 @@ bool BDD_class::io_generator_single(bool input_data[parameter_input_bit_width],i
bool
output_bit
;
bool
output_bit
;
bool
*
output_bits
=
new
bool
[
100
];
bool
*
output_bits
=
new
bool
[
100
];
output_bits
=
io_generator
(
input_data
,
output_bits
);
output_bits
=
io_generator_function
(
input_data
,
output_bits
);
output_bit
=
output_bits
[
which_bit_output
]
;
delete
[]
output_bits
;
return
output_bit
;
};
int
BDD_class
::
io_generator_single_vec
(
int
input_data
[
parameter_input_bit_width
],
int
which_bit_output
){
//cout<<"Debug 3"<<endl;
int
output_bit
;
//cout<<"Debug 3"<<endl;
int
*
output_bits
=
new
int
[
100
];
//cout<<"Debug 3"<<endl;
output_bits
=
io_generator_function_vec
(
input_data
,
output_bits
);
output_bit
=
output_bits
[
which_bit_output
]
;
output_bit
=
output_bits
[
which_bit_output
]
;
//cout<<"which bit output "<<which_bit_output<<" "<<hex<<output_bit<<endl;
delete
[]
output_bits
;
delete
[]
output_bits
;
return
output_bit
;
return
output_bit
;
};
};
int
BDD_class
::
train_BDD
(
BDD_node
**
BDD
,
int
*
most_influence
,
int
start_depth
,
int
how_many_start_nodes
,
BDD_node
*
start_nodes
){
int
BDD_class
::
train_BDD
(
BDD_node
**
BDD
,
int
*
most_influence
,
int
start_depth
,
int
how_many_start_nodes
,
BDD_node
*
start_nodes
){
int
i
,
j
;
int
i
,
j
;
...
@@ -433,33 +457,114 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
...
@@ -433,33 +457,114 @@ int BDD_class::train_BDD(BDD_node** BDD,int* most_influence,int start_depth, int
BSD_samples
=
BSD_samples_sort
;
BSD_samples
=
BSD_samples_sort
;
most_influence
[
i
]
=
next_bit_layer
(
i
,
order_num
);
most_influence
[
i
]
=
next_bit_layer
(
i
,
order_num
);
BSD_samples
=
BSD_samples_train
;
BSD_samples
=
int
(
BSD_samples_train
/
31
)
*
31
;
cout
<<
BSD_samples
<<
endl
;
cout
<<
BSD_samples
<<
endl
;
cout
<<
"The BSD is on layer: "
<<
i
<<
" "
;
cout
<<
"The BSD is on layer: "
<<
i
<<
" "
;
cout
<<
"The input bit is: x"
<<
most_influence
[
i
]
<<
endl
;
cout
<<
"The input bit is: x"
<<
most_influence
[
i
]
<<
endl
;
cout
<<
"BSD width at this layer: "
<<
BDD_width_each_layer
[
i
]
<<
endl
;
cout
<<
"BSD width at this layer: "
<<
BDD_width_each_layer
[
i
]
<<
endl
;
set_random_input_data
(
mask_input_data
);
set_random_input_data
(
mask_input_data
);
// #pragma omp parallel for
// for(long zj=0;zj<BDD_width_each_layer[i]*BSD_samples;zj++){
// int j = int(zj/BSD_samples);
// int zi = int(zj%BSD_samples);
// bool mask_input_data_left [parameter_input_bit_width];
// bool mask_input_data_right[parameter_input_bit_width];
// for (int jj=0;jj<parameter_input_bit_width;jj++){
// mask_input_data_left [jj] = mask_input_data[zi][jj];
// mask_input_data_right[jj] = mask_input_data[zi][jj];
// }
// for (int jj=0;jj<i;jj++){
// mask_input_data_left [most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]];
// mask_input_data_right[most_influence[jj]] = BDD_mask_this[j].mask[most_influence[jj]];
// }
// mask_input_data_left [most_influence[i]] = 0;
// mask_input_data_right[most_influence[i]] = 1;
// bool left_mask_output_data_b = io_generator_single(mask_input_data_left ,BDD[i][j].which_bit_output);
// bool right_mask_output_data_b = io_generator_single(mask_input_data_right,BDD[i][j].which_bit_output);
// right_mask_output_data_all[zj] = right_mask_output_data_b;
// left_mask_output_data_all [zj] = left_mask_output_data_b;
//
// }
int
vec_length
=
31
;
#pragma omp parallel for
#pragma omp parallel for
for
(
long
zj
=
0
;
zj
<
BDD_width_each_layer
[
i
]
*
BSD_samples
;
zj
++
){
for
(
long
zk
=
0
;
zk
<
int
(
BDD_width_each_layer
[
i
]
*
int
(
BSD_samples
/
vec_length
));
zk
++
){
int
j
=
int
(
zj
/
BSD_samples
);
bool
**
vec_input_left
=
new
bool
*
[
parameter_input_bit_width
];
int
zi
=
int
(
zj
%
BSD_samples
);
bool
**
vec_input_right
=
new
bool
*
[
parameter_input_bit_width
];
bool
mask_input_data_left
[
parameter_input_bit_width
];
for
(
int
kk
=
0
;
kk
<
parameter_input_bit_width
;
kk
++
){
bool
mask_input_data_right
[
parameter_input_bit_width
];
vec_input_left
[
kk
]
=
new
bool
[
32
];
for
(
int
jj
=
0
;
jj
<
parameter_input_bit_width
;
jj
++
){
vec_input_right
[
kk
]
=
new
bool
[
32
];
mask_input_data_left
[
jj
]
=
mask_input_data
[
zi
][
jj
];
}
mask_input_data_right
[
jj
]
=
mask_input_data
[
zi
][
jj
];
int
*
vec_input_left_int
=
new
int
[
parameter_input_bit_width
];
}
int
*
vec_input_right_int
=
new
int
[
parameter_input_bit_width
];
for
(
int
jj
=
0
;
jj
<
i
;
jj
++
){
int
j
=
int
(
vec_length
*
zk
/
BSD_samples
);
mask_input_data_left
[
most_influence
[
jj
]]
=
BDD_mask_this
[
j
].
mask
[
most_influence
[
jj
]];
for
(
int
kk
=
0
;
kk
<
32
;
kk
++
){
mask_input_data_right
[
most_influence
[
jj
]]
=
BDD_mask_this
[
j
].
mask
[
most_influence
[
jj
]];
if
(
kk
<
vec_length
){
long
zj
=
vec_length
*
zk
+
kk
;
int
zi
=
int
(
zj
%
BSD_samples
);
for
(
int
jj
=
0
;
jj
<
parameter_input_bit_width
;
jj
++
){
vec_input_left
[
jj
][
kk
]
=
mask_input_data
[
zi
][
jj
];
vec_input_right
[
jj
][
kk
]
=
mask_input_data
[
zi
][
jj
];
}
for
(
int
jj
=
0
;
jj
<
i
;
jj
++
){
vec_input_left
[
most_influence
[
jj
]][
kk
]
=
BDD_mask_this
[
j
].
mask
[
most_influence
[
jj
]];
vec_input_right
[
most_influence
[
jj
]][
kk
]
=
BDD_mask_this
[
j
].
mask
[
most_influence
[
jj
]];
}
vec_input_left
[
most_influence
[
i
]][
kk
]
=
0
;
vec_input_right
[
most_influence
[
i
]][
kk
]
=
1
;
}
else
{
for
(
int
jj
=
0
;
jj
<
parameter_input_bit_width
;
jj
++
){
vec_input_left
[
jj
][
kk
]
=
0
;
vec_input_right
[
jj
][
kk
]
=
0
;
}
}
}
mask_input_data_left
[
most_influence
[
i
]]
=
0
;
// cout<<vec_input_left[0][kk];
mask_input_data_right
[
most_influence
[
i
]]
=
1
;
}
bool
left_mask_output_data_b
=
io_generator_single
(
mask_input_data_left
,
BDD
[
i
][
j
].
which_bit_output
);
// cout<<" ";
bool
right_mask_output_data_b
=
io_generator_single
(
mask_input_data_right
,
BDD
[
i
][
j
].
which_bit_output
);
//cout<<"Debug 0"<<endl;
right_mask_output_data_all
[
zj
]
=
right_mask_output_data_b
;
for
(
int
kk
=
0
;
kk
<
parameter_input_bit_width
;
kk
++
){
left_mask_output_data_all
[
zj
]
=
left_mask_output_data_b
;
vec_input_left_int
[
kk
]
=
cvt_bit_to_number
(
vec_input_left
[
kk
],
vec_length
);
vec_input_right_int
[
kk
]
=
cvt_bit_to_number
(
vec_input_right
[
kk
],
vec_length
);
}
// cout<<hex<<vec_input_left_int[0]<<" input"<<endl;
//cout<<"Debug 1"<<endl;
int
vec_output_left_int
;
int
vec_output_right_int
;
vec_output_left_int
=
io_generator_single_vec
(
vec_input_left_int
,
BDD
[
i
][
j
].
which_bit_output
);
vec_output_right_int
=
io_generator_single_vec
(
vec_input_right_int
,
BDD
[
i
][
j
].
which_bit_output
);
//cout<<"Debug 2"<<endl;
bool
*
vec_output_left
=
new
bool
[
32
];
bool
*
vec_output_right
=
new
bool
[
32
];
// cout<<"output "<<hex<<vec_output_left_int<<" ";
cvt_number_to_bit
(
vec_output_left
,
vec_output_left_int
,
32
);
cvt_number_to_bit
(
vec_output_right
,
vec_output_right_int
,
32
);
// for(int kk=0;kk<32;kk++){
// cout<<vec_output_left[31-kk];
// }
// cout<<endl;
for
(
int
kk
=
0
;
kk
<
vec_length
;
kk
++
){
long
zj
=
vec_length
*
zk
+
kk
;
int
j
=
int
(
zj
/
BSD_samples
);
int
zi
=
int
(
zj
%
BSD_samples
);
right_mask_output_data_all
[
zj
]
=
vec_output_right
[
31
-
kk
];
left_mask_output_data_all
[
zj
]
=
vec_output_left
[
31
-
kk
];
//bool* test_vec_input_right = new bool [parameter_input_bit_width];
//bool* test_vec_input_left = new bool [parameter_input_bit_width];
//for(int jj=0;jj<parameter_input_bit_width;jj++){
// test_vec_input_right[jj] = vec_input_right[jj][kk] ;
// test_vec_input_left[jj] = vec_input_left [jj][kk] ;
//}
//right_mask_output_data_all[zj] = io_generator_single(test_vec_input_right,BDD[i][j].which_bit_output);
//left_mask_output_data_all[zj] = io_generator_single(test_vec_input_left, BDD[i][j].which_bit_output);
}
for
(
int
kk
=
0
;
kk
<
parameter_input_bit_width
;
kk
++
){
delete
[]
vec_input_left
[
kk
]
;
delete
[]
vec_input_right
[
kk
]
;
}
delete
[]
vec_input_left
;
delete
[]
vec_input_right
;
delete
[]
vec_output_left
;
delete
[]
vec_output_right
;
}
}
for
(
int
j
=
0
;
j
<
BDD_width_each_layer
[
i
];
j
++
){
for
(
int
j
=
0
;
j
<
BDD_width_each_layer
[
i
];
j
++
){
...
@@ -770,7 +875,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){
...
@@ -770,7 +875,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){
//#pragma omp parallel for
//#pragma omp parallel for
for
(
long
zj
=
0
;
zj
<
how_many_start_nodes
*
parameter_test_ios
;
zj
++
){
for
(
long
zj
=
0
;
zj
<
how_many_start_nodes
*
parameter_test_ios
;
zj
++
){
int
test_bit
=
int
(
zj
/
parameter_test_ios
);
int
test_bit
=
int
(
zj
/
parameter_test_ios
);
bool
test_input_data
[
parameter_input_bit_width
];
bool
*
test_input_data
=
new
bool
[
parameter_input_bit_width
];
bool
test_output_data
;
bool
test_output_data
;
bool
infer_output_data
;
bool
infer_output_data
;
for
(
int
j
=
0
;
j
<
parameter_input_bit_width
;
j
++
){
for
(
int
j
=
0
;
j
<
parameter_input_bit_width
;
j
++
){
...
@@ -789,6 +894,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){
...
@@ -789,6 +894,7 @@ int BDD_class::BDD_infer(BDD_node** BDD,int* most_influence){
test_output_data
=
io_generator_single
(
test_input_data
,
BDD
[
start_depth
][
test_bit
].
which_bit_output
);
test_output_data
=
io_generator_single
(
test_input_data
,
BDD
[
start_depth
][
test_bit
].
which_bit_output
);
infer_output_data
=
cal_infer_result
(
test_input_data
,
test_bit
,
0
);
infer_output_data
=
cal_infer_result
(
test_input_data
,
test_bit
,
0
);
error_all
[
zj
]
=
(
test_output_data
!=
infer_output_data
);
error_all
[
zj
]
=
(
test_output_data
!=
infer_output_data
);
delete
[]
test_input_data
;
}
}
circuit_accuracy_all_bits
=
new
double
[
how_many_start_nodes
];
circuit_accuracy_all_bits
=
new
double
[
how_many_start_nodes
];
for
(
int
test_bit
=
0
;
test_bit
<
how_many_start_nodes
;
test_bit
++
){
for
(
int
test_bit
=
0
;
test_bit
<
how_many_start_nodes
;
test_bit
++
){
...
...
src/c1908_vec.h
0 → 100644
View file @
7889538b
void
io_generator_outer_vec
(
int
*
pi
,
int
*
po
)
{
int
n0
=
0
;
int
n1
=
pi
[
0
];
int
n2
=
pi
[
1
];
int
n3
=
pi
[
2
];
int
n4
=
pi
[
3
];
int
n5
=
pi
[
4
];
int
n6
=
pi
[
5
];
int
n7
=
pi
[
6
];
int
n8
=
pi
[
7
];
int
n9
=
pi
[
8
];
int
n10
=
pi
[
9
];
int
n11
=
pi
[
10
];
int
n12
=
pi
[
11
];
int
n13
=
pi
[
12
];
int
n14
=
pi
[
13
];
int
n15
=
pi
[
14
];
int
n16
=
pi
[
15
];
int
n17
=
pi
[
16
];
int
n18
=
pi
[
17
];
int
n19
=
pi
[
18
];
int
n20
=
pi
[
19
];
int
n21
=
pi
[
20
];
int
n22
=
pi
[
21
];
int
n23
=
pi
[
22
];
int
n24
=
pi
[
23
];
int
n25
=
pi
[
24
];
int
n26
=
pi
[
25
];
int
n27
=
pi
[
26
];
int
n28
=
pi
[
27
];
int
n29
=
pi
[
28
];
int
n30
=
pi
[
29
];
int
n31
=
pi
[
30
];
int
n32
=
pi
[
31
];
int
n33
=
pi
[
32
];
int
n34
=
n33
&
~
n3
;
int
n35
=
n25
&
n23
;
int
n36
=
~
n35
&
n34
;
int
n37
=
n32
&
~
n30
;
int
n38
=
n37
&
n3
;
int
n39
=
n38
&
~
n35
;
int
n40
=
~
n39
&
~
n36
;
int
n41
=
~
n7
&
~
n4
;
int
n42
=
n7
&
n4
;
int
n43
=
~
n42
&
~
n41
;
int
n44
=
n43
&
~
n13
;
int
n45
=
~
n43
&
n13
;
int
n46
=
~
n45
&
~
n44
;
int
n47
=
~
n25
&
n18
;
int
n48
=
n47
&
~
n3
;
int
n49
=
n48
&
~
n15
;
int
n50
=
~
n48
&
n15
;
int
n51
=
~
n50
&
~
n49
;
int
n52
=
~
n51
&
n10
;
int
n53
=
n51
&
~
n10
;
int
n54
=
~
n53
&
~
n52
;
int
n55
=
~
n14
&
~
n8
;
int
n56
=
n14
&
n8
;
int
n57
=
~
n56
&
~
n55
;
int
n58
=
n57
&
~
n16
;
int
n59
=
~
n57
&
n16
;
int
n60
=
~
n59
&
~
n58
;
int
n61
=
n60
&
~
n54
;
int
n62
=
~
n60
&
n54
;
int
n63
=
~
n62
&
~
n61
;
int
n64
=
~
n63
&
~
n46
;
int
n65
=
n63
&
n46
;
int
n66
=
~
n65
&
~
n64
;
int
n67
=
~
n66
&
~
n32
;
int
n68
=
~
n67
&
~
n28
;
int
n69
=
n67
&
n28
;
int
n70
=
~
n69
&
~
n68
;
int
n71
=
n23
&
n19
;
int
n72
=
n71
&
~
n3
;
int
n73
=
~
n15
&
~
n9
;
int
n74
=
n15
&
n9
;
int
n75
=
~
n74
&
~
n73
;
int
n76
=
~
n75
&
~
n11
;
int
n77
=
n75
&
n11
;
int
n78
=
~
n77
&
~
n76
;
int
n79
=
~
n7
&
~
n5
;
int
n80
=
n7
&
n5
;
int
n81
=
~
n80
&
~
n79
;
int
n82
=
~
n81
&
~
n24
;
int
n83
=
n81
&
n24
;
int
n84
=
~
n83
&
~
n82
;
int
n85
=
~
n84
&
~
n78
;
int
n86
=
n84
&
n78
;
int
n87
=
~
n86
&
~
n85
;
int
n88
=
~
n87
&
n72
;
int
n89
=
n87
&
~
n72
;
int
n90
=
~
n89
&
~
n88
;
int
n91
=
~
n90
&
~
n32
;
int
n92
=
~
n91
&
~
n29
;
int
n93
=
n91
&
n29
;
int
n94
=
~
n93
&
~
n92
;
int
n95
=
~
n94
&
~
n70
;
int
n96
=
~
n6
&
~
n5
;
int
n97
=
n6
&
n5
;
int
n98
=
~
n97
&
~
n96
;
int
n99
=
~
n98
&
~
n4
;
int
n100
=
n98
&
n4
;
int
n101
=
~
n100
&
~
n99
;
int
n102
=
~
n12
&
~
n11
;
int
n103
=
n12
&
n11
;
int
n104
=
~
n103
&
~
n102
;
int
n105
=
n104
&
n10
;
int
n106
=
~
n104
&
~
n10
;
int
n107
=
~
n106
&
~
n105
;
int
n108
=
~
n16
&
~
n15
;
int
n109
=
n16
&
n15
;
int
n110
=
~
n109
&
~
n108
;
int
n111
=
n110
&
~
n9
;
int
n112
=
~
n110
&
n9
;
int
n113
=
~
n112
&
~
n111
;
int
n114
=
~
n113
&
~
n107
;
int
n115
=
n113
&
n107
;
int
n116
=
~
n115
&
~
n114
;
int
n117
=
~
n116
&
~
n101
;
int
n118
=
n116
&
n101
;
int
n119
=
~
n118
&
~
n117
;
int
n120
=
~
n25
&
n17
;
int
n121
=
n120
&
~
n3
;
int
n122
=
~
n121
&
~
n1
;
int
n123
=
n121
&
n1
;
int
n124
=
~
n123
&
~
n122
;
int
n125
=
~
n124
&
~
n119
;
int
n126
=
n124
&
n119
;
int
n127
=
~
n126
&
~
n125
;
int
n128
=
~
n127
&
~
n32
;
int
n129
=
~
n128
&
~
n27
;
int
n130
=
n128
&
n27
;
int
n131
=
~
n130
&
~
n129
;
int
n132
=
~
n32
&
n23
;
int
n133
=
~
n132
&
n19
;
int
n134
=
n23
&
n20
;
int
n135
=
n134
&
~
n3
;
int
n136
=
n135
&
~
n12
;
int
n137
=
~
n135
&
n12
;
int
n138
=
~
n137
&
~
n136
;
int
n139
=
~
n9
&
~
n6
;
int
n140
=
n9
&
n6
;
int
n141
=
~
n140
&
~
n139
;
int
n142
=
~
n141
&
~
n2
;
int
n143
=
n141
&
n2
;
int
n144
=
~
n143
&
~
n142
;
int
n145
=
~
n144
&
n60
;
int
n146
=
n144
&
~
n60
;
int
n147
=
~
n146
&
~
n145
;
int
n148
=
~
n147
&
~
n138
;
int
n149
=
n147
&
n138
;
int
n150
=
~
n149
&
~
n148
;
int
n151
=
~
n150
&
~
n32
;
int
n152
=
~
n151
&
~
n133
;
int
n153
=
n151
&
n133
;
int
n154
=
~
n153
&
~
n152
;
int
n155
=
~
n154
&
n131
;
int
n156
=
n155
&
n95
;
int
n157
=
n156
&
~
n40
;
int
n158
=
n22
&
~
n3
;
int
n159
=
~
n14
&
~
n2
;
int
n160
=
n14
&
n2
;
int
n161
=
~
n160
&
~
n159
;
int
n162
=
n161
&
n158
;
int
n163
=
~
n161
&
~
n158
;
int
n164
=
~
n163
&
~
n162
;
int
n165
=
~
n24
&
~
n13
;
int
n166
=
n24
&
n13
;
int
n167
=
~
n166
&
~
n165
;
int
n168
=
n167
&
~
n1
;
int
n169
=
~
n167
&
n1
;
int
n170
=
~
n169
&
~
n168
;
int
n171
=
~
n170
&
~
n113
;
int
n172
=
n170
&
n113
;
int
n173
=
~
n172
&
~
n171
;
int
n174
=
n173
&
~
n107
;
int
n175
=
~
n173
&
n107
;
int
n176
=
~
n175
&
~
n174
;
int
n177
=
~
n176
&
~
n164
;
int
n178
=
n176
&
n164
;
int
n179
=
~
n178
&
~
n177
;
int
n180
=
~
n179
&
~
n32
;
int
n181
=
~
n180
&
~
n26
;
int
n182
=
n180
&
n26
;
int
n183
=
~
n182
&
~
n181
;
int
n184
=
~
n132
&
n20
;
int
n185
=
~
n184
&
n183
;
int
n186
=
~
n32
&
~
n25
;
int
n187
=
~
n186
&
n17
;
int
n188
=
~
n7
&
~
n2
;
int
n189
=
n7
&
n2
;
int
n190
=
~
n189
&
~
n188
;
int
n191
=
~
n170
&
~
n101
;
int
n192
=
n170
&
n101
;
int
n193
=
~
n192
&
~
n191
;
int
n194
=
~
n193
&
n190
;
int
n195
=
n193
&
~
n190
;
int
n196
=
~
n195
&
~
n194
;
int
n197
=
n21
&
~
n3
;
int
n198
=
~
n113
&
~
n8
;
int
n199
=
n113
&
n8
;
int
n200
=
~
n199
&
~
n198
;
int
n201
=
~
n200
&
~
n197
;
int
n202
=
n200
&
n197
;
int
n203
=
~
n202
&
~
n201
;
int
n204
=
~
n203
&
~
n196
;
int
n205
=
n203
&
n196
;
int
n206
=
~
n205
&
~
n204
;
int
n207
=
~
n206
&
~
n32
;
int
n208
=
~
n207
&
~
n187
;
int
n209
=
n207
&
n187
;
int
n210
=
~
n209
&
~
n208
;
int
n211
=
~
n186
&
n18
;
int
n212
=
~
n211
&
n210
;
int
n213
=
n212
&
n185
;
int
n214
=
n213
&
n157
;
int
n215
=
~
n214
&
~
n1
;
int
n216
=
n214
&
n1
;
int
n217
=
~
n216
&
~
n215
;
int
n218
=
~
n67
&
~
n28
;
int
n219
=
n67
&
n28
;
int
n220
=
~
n219
&
~
n218
;
int
n221
=
n220
&
~
n94
;
int
n222
=
~
n128
&
~
n27
;
int
n223
=
n128
&
n27
;
int
n224
=
~
n223
&
~
n222
;
int
n225
=
~
n224
&
~
n154
;
int
n226
=
n225
&
n221
;
int
n227
=
n226
&
~
n40
;
int
n228
=
n227
&
n213
;
int
n229
=
~
n228
&
~
n13
;
int
n230
=
n228
&
n13
;
int
n231
=
~
n230
&
~
n229
;
int
n232
=
n94
&
~
n70
;
int
n233
=
n232
&
n225
;
int
n234
=
n233
&
~
n40
;
int
n235
=
n234
&
n213
;
int
n236
=
~
n235
&
~
n24
;
int
n237
=
n235
&
n24
;
int
n238
=
~
n237
&
~
n236
;
int
n239
=
~
n224
&
n154
;
int
n240
=
n239
&
n95
;
int
n241
=
n240
&
~
n40
;
int
n242
=
n241
&
n213
;
int
n243
=
~
n242
&
~
n2
;
int
n244
=
n242
&
n2
;
int
n245
=
~
n244
&
~
n243
;
int
n246
=
n32
&
~
n31
;
int
n247
=
n246
&
n3
;
int
n248
=
n247
&
~
n35
;
int
n249
=
~
n248
&
~
n36
;
int
n250
=
n154
&
n131
;
int
n251
=
n250
&
n232
;
int
n252
=
n251
&
~
n249
;
int
n253
=
n252
&
n213
;
int
n254
=
~
n253
&
~
n9
;
int
n255
=
n253
&
n9
;
int
n256
=
~
n255
&
~
n254
;
int
n257
=
n220
&
n94
;
int
n258
=
n257
&
n155
;
int
n259
=
n258
&
~
n249
;
int
n260
=
n259
&
n213
;
int
n261
=
~
n260
&
~
n15
;
int
n262
=
n260
&
n15
;
int
n263
=
~
n262
&
~
n261
;
int
n264
=
n250
&
n221
;
int
n265
=
n264
&
~
n249
;
int
n266
=
n265
&
n213
;
int
n267
=
~
n266
&
~
n16
;
int
n268
=
n266
&
n16
;
int
n269
=
~
n268
&
~
n267
;
int
n270
=
n221
&
n155
;
int
n271
=
n270
&
~
n40
;
int
n272
=
~
n184
&
~
n183
;
int
n273
=
n272
&
n212
;
int
n274
=
n273
&
n271
;
int
n275
=
~
n274
&
~
n4
;
int
n276
=
n274
&
n4
;
int
n277
=
~
n276
&
~
n275
;
int
n278
=
n232
&
n155
;
int
n279
=
n278
&
~
n40
;
int
n280
=
n279
&
n273
;
int
n281
=
~
n280
&
~
n5
;
int
n282
=
n280
&
n5
;
int
n283
=
~
n282
&
~
n281
;
int
n284
=
n250
&
n95
;
int
n285
=
n284
&
~
n40
;
int
n286
=
n285
&
n273
;
int
n287
=
~
n286
&
~
n6
;
int
n288
=
n286
&
n6
;
int
n289
=
~
n288
&
~
n287
;
int
n290
=
n257
&
n225
;
int
n291
=
n290
&
~
n40
;
int
n292
=
n291
&
n273
;
int
n293
=
~
n292
&
~
n7
;
int
n294
=
n292
&
n7
;
int
n295
=
~
n294
&
~
n293
;
int
n296
=
n239
&
n221
;
int
n297
=
n296
&
~
n249
;
int
n298
=
n297
&
n273
;
int
n299
=
~
n298
&
~
n8
;
int
n300
=
n298
&
n8
;
int
n301
=
~
n300
&
~
n299
;
int
n302
=
n270
&
~
n249
;
int
n303
=
~
n211
&
~
n210
;
int
n304
=
n303
&
n185
;
int
n305
=
n304
&
n302
;
int
n306
=
~
n305
&
~
n10
;
int
n307
=
n305
&
n10
;
int
n308
=
~
n307
&
~
n306
;
int
n309
=
n278
&
~
n249
;
int
n310
=
n309
&
n304
;
int
n311
=
~
n310
&
~
n11
;
int
n312
=
n310
&
n11
;
int
n313
=
~
n312
&
~
n311
;
int
n314
=
n284
&
~
n249
;
int
n315
=
n314
&
n304
;
int
n316
=
~
n315
&
~
n12
;
int
n317
=
n315
&
n12
;
int
n318
=
~
n317
&
~
n316
;
int
n319
=
n304
&
n297
;
int
n320
=
~
n319
&
~
n14
;
int
n321
=
n319
&
n14
;
int
n322
=
~
n321
&
~
n320
;
int
n323
=
~
n154
&
~
n94
;
int
n324
=
n323
&
~
n70
;
int
n325
=
n324
&
~
n224
;
int
n326
=
n325
&
~
n211
;
int
n327
=
n326
&
~
n183
;
int
n328
=
n327
&
~
n210
;
int
n329
=
n328
&
~
n184
;
int
n330
=
~
n329
&
~
n3
;
int
n331
=
n330
&
~
n33
;
int
n332
=
n330
&
n33
;
int
n333
=
n273
&
n250
;
int
n334
=
n333
&
n95
;
int
n335
=
n334
&
~
n40
;
int
n336
=
n273
&
n225
;
int
n337
=
n336
&
n257
;
int
n338
=
n337
&
~
n40
;
int
n339
=
~
n338
&
~
n335
;
int
n340
=
n273
&
n155
;
int
n341
=
n340
&
n221
;
int
n342
=
n341
&
~
n40
;
int
n343
=
n340
&
n232
;
int
n344
=
n343
&
~
n40
;
int
n345
=
~
n344
&
~
n342
;
int
n346
=
n213
&
n155
;
int
n347
=
n346
&
n95
;
int
n348
=
n347
&
~
n40
;
int
n349
=
n225
&
n213
;
int
n350
=
n349
&
n221
;
int
n351
=
n350
&
~
n40
;
int
n352
=
~
n351
&
~
n348
;
int
n353
=
n349
&
n232
;
int
n354
=
n353
&
~
n40
;
int
n355
=
n239
&
n213
;
int
n356
=
n355
&
n95
;
int
n357
=
n356
&
~
n40
;
int
n358
=
~
n357
&
~
n354
;
int
n359
=
n358
&
n352
;
int
n360
=
n359
&
n345
;
int
n361
=
n360
&
n339
;
int
n362
=
n361
&
n332
;
int
n363
=
n304
&
n225
;
int
n364
=
n363
&
n95
;
int
n365
=
n364
&
n36
;
int
n366
=
n336
&
n95
;
int
n367
=
n366
&
n36
;
int
n368
=
n346
&
n257
;
int
n369
=
n368
&
~
n249
;
int
n370
=
n250
&
n213
;
int
n371
=
n370
&
n221
;
int
n372
=
n371
&
~
n249
;
int
n373
=
~
n372
&
~
n369
;
int
n374
=
n304
&
n250
;
int
n375
=
n374
&
n95
;
int
n376
=
n375
&
~
n249
;
int
n377
=
n304
&
n239
;
int
n378
=
n377
&
n221
;
int
n379
=
n378
&
~
n249
;
int
n380
=
~
n379
&
~
n376
;
int
n381
=
n370
&
n232
;
int
n382
=
n381
&
~
n249
;
int
n383
=
n273
&
n239
;
int
n384
=
n383
&
n221
;
int
n385
=
n384
&
~
n249
;
int
n386
=
~
n385
&
~
n382
;
int
n387
=
n304
&
n155
;
int
n388
=
n387
&
n221
;
int
n389
=
n388
&
~
n249
;
int
n390
=
n387
&
n232
;
int
n391
=
n390
&
~
n249
;
int
n392
=
~
n391
&
~
n389
;
int
n393
=
n392
&
n386
;
int
n394
=
n393
&
n380
;
int
n395
=
n394
&
n373
;
int
n396
=
n395
&
~
n367
;
int
n397
=
n396
&
~
n365
;
int
n398
=
n397
&
n362
;
int
n399
=
n303
&
n272
;
int
n400
=
n399
&
n225
;
int
n401
=
n400
&
n232
;
int
n402
=
n401
&
n36
;
int
n403
=
n400
&
n221
;
int
n404
=
n403
&
n36
;
int
n405
=
n399
&
n155
;
int
n406
=
n405
&
n95
;
int
n407
=
n406
&
n36
;
int
n408
=
~
n407
&
~
n404
;
int
n409
=
n408
&
~
n402
;
int
n410
=
n409
&
n398
;
int
n411
=
n211
&
~
n210
;
int
n412
=
n411
&
n272
;
int
n413
=
n412
&
n225
;
int
n414
=
n413
&
n95
;
int
n415
=
n414
&
n36
;
int
n416
=
n184
&
~
n183
;
int
n417
=
n416
&
n303
;
int
n418
=
n417
&
n225
;
int
n419
=
n418
&
n95
;
int
n420
=
n419
&
n36
;
int
n421
=
n399
&
n239
;
int
n422
=
n421
&
n95
;
int
n423
=
n422
&
n36
;
int
n424
=
~
n423
&
~
n420
;
int
n425
=
n424
&
~
n415
;
int
n426
=
n425
&
n410
;
int
n427
=
~
n426
&
~
n331
;
int
n428
=
n395
&
n361
;
int
n429
=
n32
&
n17
;
int
n430
=
n429
&
~
n428
;
int
n431
=
n430
&
~
n206
;
int
n432
=
~
n430
&
n206
;
int
n433
=
~
n432
&
~
n431
;
int
n434
=
~
n33
&
n3
;
int
n435
=
~
n434
&
n433
;
int
n436
=
n32
&
n26
;
int
n437
=
n436
&
~
n428
;
int
n438
=
~
n437
&
~
n179
;
int
n439
=
n437
&
n179
;
int
n440
=
~
n439
&
~
n438
;
int
n441
=
~
n440
&
~
n434
;
int
n442
=
n32
&
n28
;
int
n443
=
n442
&
~
n428
;
int
n444
=
~
n443
&
~
n66
;
int
n445
=
n443
&
n66
;
int
n446
=
~
n445
&
~
n444
;
int
n447
=
~
n446
&
~
n434
;
int
n448
=
n32
&
n29
;
int
n449
=
n448
&
~
n428
;
int
n450
=
~
n449
&
~
n90
;
int
n451
=
n449
&
n90
;
int
n452
=
~
n451
&
~
n450
;
int
n453
=
~
n452
&
~
n434
;
int
n454
=
n32
&
n19
;
int
n455
=
n454
&
~
n428
;
int
n456
=
~
n455
&
~
n150
;
int
n457
=
n455
&
n150
;
int
n458
=
~
n457
&
~
n456
;
int
n459
=
~
n458
&
~
n434
;
int
n460
=
n30
&
n21
;
int
n461
=
~
n460
&
n3
;
int
n462
=
~
n30
&
n3
;
int
n463
=
~
n462
&
~
n196
;
int
n464
=
~
n354
&
n352
;
int
n465
=
n464
&
~
n357
;
int
n466
=
n465
&
~
n342
;
int
n467
=
n466
&
~
n344
;
int
n468
=
n467
&
~
n335
;
int
n469
=
n468
&
~
n338
;
int
n470
=
~
n469
&
~
n3
;
int
n471
=
~
n470
&
n463
;
int
n472
=
n470
&
~
n463
;
int
n473
=
~
n472
&
~
n471
;
int
n474
=
~
n473
&
n461
;
int
n475
=
n473
&
~
n461
;
int
n476
=
~
n475
&
~
n474
;
int
n477
=
n31
&
n22
;
int
n478
=
~
n477
&
n3
;
int
n479
=
~
n31
&
n3
;
int
n480
=
~
n116
&
n57
;
int
n481
=
n116
&
~
n57
;
int
n482
=
~
n481
&
~
n480
;
int
n483
=
~
n482
&
~
n479
;
int
n484
=
~
n389
&
n386
;
int
n485
=
n484
&
~
n391
;
int
n486
=
n485
&
~
n376
;
int
n487
=
n486
&
~
n379
;
int
n488
=
n487
&
~
n369
;
int
n489
=
n488
&
~
n372
;
int
n490
=
~
n489
&
~
n3
;
int
n491
=
~
n490
&
n483
;
int
n492
=
n490
&
~
n483
;
int
n493
=
~
n492
&
~
n491
;
int
n494
=
~
n493
&
n478
;
int
n495
=
n493
&
~
n478
;
int
n496
=
~
n495
&
~
n494
;
int
n497
=
n32
&
n27
;
int
n498
=
n497
&
~
n428
;
int
n499
=
~
n498
&
~
n119
;
int
n500
=
n498
&
n119
;
int
n501
=
~
n500
&
~
n499
;
int
n502
=
~
n501
&
~
n124
;
int
n503
=
n501
&
n124
;
int
n504
=
~
n503
&
~
n502
;
int
n505
=
~
n504
&
~
n434
;
po
[
0
]
=
n217
;
po
[
1
]
=
n231
;
po
[
2
]
=
n238
;
po
[
3
]
=
n245
;
po
[
4
]
=
n256
;
po
[
5
]
=
n263
;
po
[
6
]
=
n269
;
po
[
7
]
=
n277
;
po
[
8
]
=
n283
;
po
[
9
]
=
n289
;
po
[
10
]
=
n295
;
po
[
11
]
=
n301
;
po
[
12
]
=
n308
;
po
[
13
]
=
n313
;
po
[
14
]
=
n318
;
po
[
15
]
=
n322
;
po
[
16
]
=
n427
;
po
[
17
]
=
n435
;
po
[
18
]
=
n441
;
po
[
19
]
=
n447
;
po
[
20
]
=
n453
;
po
[
21
]
=
n459
;
po
[
22
]
=
n476
;
po
[
23
]
=
n496
;
po
[
24
]
=
n505
;
}
src/readme.md
View file @
7889538b
...
@@ -2,9 +2,19 @@ src/
...
@@ -2,9 +2,19 @@ src/
The latest version of the BSD Learner.
The latest version of the BSD Learner.
1.
Use BSD_Learner to design your own circuit.
1.
For AIGs, modify and run write_vec.h
Edit top.h:
Modify:
Line 1 your own module name.
Execute in the terminal:
bash write_vec.sh
2.
Use BSD_Learner to design your own circuit.
Modify top.h:
Line 1: modify input bitwidth;
Line 1: modify input bitwidth;
Line 2: modify output bitwidth;
Line 2: modify output bitwidth;
...
...
src/top.h
View file @
7889538b
extern
const
int
parameter_input_bit_width
=
33
+
5
;
//输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
extern
const
int
parameter_input_bit_width
=
33
+
5
;
//输入bit有几位,写在+6前面。+6是为了防止一些bug的冗余设计。
extern
const
int
parameter_output_bit_width
=
25
;
//输出bit有几位
extern
const
int
parameter_output_bit_width
=
25
;
//输出bit有几位
#include"io_generator/c1908.h"
#include"io_generator/c1908.h"
#include"io_generator_function.h"
#include"c1908_vec.h"
//#include"io_generator_function.h"
int
parameter_search_iterations
=
1000
;
//最大设计次数
int
parameter_search_iterations
=
1000
;
//最大设计次数
int
parameter_test_ios
=
10
0
;
//测试要求多少样本
int
parameter_test_ios
=
10
24
;
//测试要求多少样本
extern
const
int
parameter_max_samples
=
int
(
parameter_test_ios
*
20
);
//BSD每一个节点最多进行多少次采样
extern
const
int
parameter_max_samples
=
int
(
parameter_test_ios
*
16
);
//BSD每一个节点最多进行多少次采样
bool
*
io_generator_function
(
bool
input_data
[
parameter_input_bit_width
],
int
which_demo_function
,
bool
*
output_data
)
{
bool
*
io_generator_function
(
bool
input_data
[
parameter_input_bit_width
],
bool
*
output_data
)
{
int
i
,
j
;
int
i
,
j
;
...
@@ -18,7 +19,23 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width],int which
...
@@ -18,7 +19,23 @@ bool* io_generator_function(bool input_data[parameter_input_bit_width],int which
for
(
i
=
0
;
i
<
parameter_output_bit_width
;
i
++
){
for
(
i
=
0
;
i
<
parameter_output_bit_width
;
i
++
){
output_data
[
i
]
=
output_data_temp
[
i
];
output_data
[
i
]
=
output_data_temp
[
i
];
}
}
delete
output_data_temp
;
delete
[]
output_data_temp
;
return
output_data
;
}
int
*
io_generator_function_vec
(
int
input_data
[
parameter_input_bit_width
],
int
*
output_data
)
{
int
i
,
j
;
int
*
output_data_temp
=
new
int
[
100
];
io_generator_outer_vec
(
input_data
,
output_data_temp
);
//io_generator_single_function_1(input_data,output_data_temp);
for
(
i
=
0
;
i
<
parameter_output_bit_width
;
i
++
){
output_data
[
i
]
=
output_data_temp
[
i
];
}
delete
[]
output_data_temp
;
return
output_data
;
return
output_data
;
}
}
src/write_vec.sh
0 → 100644
View file @
7889538b
module_name
=
"c1908"
vim
-c
"open io_generator/
${
module_name
}
.h"
\
-c
"1d"
\
-c
"1d"
\
-c
":$"
\
-c
"d"
cp io_generator/
${
module_name
}
.h
${
module_name
}
_vec.h
vim
-c
"open
${
module_name
}
_vec.h"
\
-c
"1d"
\
-c
"1d"
\
-c
"1,
$
s/io_generator_outer/io_generator_outer_vec"
vim
-c
"open
${
module_name
}
_vec.h"
\
-c
"1,
$
s/vec_vec/vec"
\
-c
"1,
$
s/bool/int/g"
\
-c
"1,
$
s/!/
\~
/g"
\
-c
"1,
$
s/&&/and/g"
\
-c
"1,
$
s/and/
\&
/g"
\
-c
"1,
$
s/false/0/g"
\
-c
"1,
$
s/true/-1/g"
\
src/zstart.sh
View file @
7889538b
...
@@ -2,5 +2,6 @@ export PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/bin:/lustre
...
@@ -2,5 +2,6 @@ export PATH=/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/bin:/lustre
export
LIBRARY_PATH
=
/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/lib
export
LIBRARY_PATH
=
/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/lib
export
LD_LIBRARY_PATH
=
/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/lib
export
LD_LIBRARY_PATH
=
/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/bin:/lustre/S/chengshuyao/haoshiming/anaconda3/envs/BSD/lib
rm rtl/
*
rm rtl/
*
#bash write_vec.sh
g++ BSD.cpp
-O3
-std
=
c++11
-fopenmp
-pg
g++ BSD.cpp
-O3
-std
=
c++11
-fopenmp
-pg
./a.out
./a.out
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment