Implemented basic tests for generated flat C code circuits.
This commit is contained in:
parent
de127e8c46
commit
f1142b51d9
1
.gitignore
vendored
1
.gitignore
vendored
@ -1,4 +1,5 @@
|
||||
__pycache__/
|
||||
.vscode
|
||||
test.py
|
||||
Makefile
|
||||
*.c
|
||||
|
39
Tests/Flat_c_circuits/Adders/fa.c
Normal file
39
Tests/Flat_c_circuits/Adders/fa.c
Normal file
@ -0,0 +1,39 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t full_adder(uint8_t a, uint8_t b, uint8_t cin){
|
||||
uint8_t out = 0;
|
||||
uint8_t full_adder_a = 0;
|
||||
uint8_t full_adder_b = 0;
|
||||
uint8_t full_adder_y0 = 0;
|
||||
uint8_t full_adder_y1 = 0;
|
||||
uint8_t full_adder_cin = 0;
|
||||
uint8_t full_adder_y2 = 0;
|
||||
uint8_t full_adder_y3 = 0;
|
||||
uint8_t full_adder_y4 = 0;
|
||||
|
||||
full_adder_a = ((a >> 0) & 0x01);
|
||||
full_adder_b = ((b >> 0) & 0x01);
|
||||
full_adder_cin = ((cin >> 0) & 0x01);
|
||||
full_adder_y0 = full_adder_a ^ full_adder_b;
|
||||
full_adder_y1 = full_adder_a & full_adder_b;
|
||||
full_adder_y2 = full_adder_y0 ^ full_adder_cin;
|
||||
full_adder_y3 = full_adder_y0 & full_adder_cin;
|
||||
full_adder_y4 = full_adder_y1 | full_adder_y3;
|
||||
|
||||
out |= (full_adder_y2 & 0x01) << 0;
|
||||
out |= (full_adder_y4 & 0x01) << 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
for (int j = 0; j < 2; j++){
|
||||
for (int k = 0; k < 2; k++){
|
||||
assert((i + j + k) == full_adder(i,j,k));
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
29
Tests/Flat_c_circuits/Adders/ha.c
Normal file
29
Tests/Flat_c_circuits/Adders/ha.c
Normal file
@ -0,0 +1,29 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t half_adder(uint8_t a, uint8_t b){
|
||||
uint8_t out = 0;
|
||||
uint8_t half_adder_a = 0;
|
||||
uint8_t half_adder_b = 0;
|
||||
uint8_t half_adder_y0 = 0;
|
||||
uint8_t half_adder_y1 = 0;
|
||||
|
||||
half_adder_a = ((a >> 0) & 0x01);
|
||||
half_adder_b = ((b >> 0) & 0x01);
|
||||
half_adder_y0 = half_adder_a ^ half_adder_b;
|
||||
half_adder_y1 = half_adder_a & half_adder_b;
|
||||
|
||||
out |= (half_adder_y0 & 0x01) << 0;
|
||||
out |= (half_adder_y1 & 0x01) << 1;
|
||||
return out;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
for (int j = 0; j < 2; j++){
|
||||
assert((i + j) == half_adder(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
66
Tests/Flat_c_circuits/Adders/s_rca2.c
Normal file
66
Tests/Flat_c_circuits/Adders/s_rca2.c
Normal file
@ -0,0 +1,66 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint64_t s_rca2(int64_t a, int64_t b){
|
||||
uint8_t out = 0;
|
||||
uint8_t s_rca2_ha_a = 0;
|
||||
uint8_t s_rca2_ha_b = 0;
|
||||
uint8_t s_rca2_ha_y0 = 0;
|
||||
uint8_t s_rca2_ha_y1 = 0;
|
||||
uint8_t s_rca2_fa1_a = 0;
|
||||
uint8_t s_rca2_fa1_b = 0;
|
||||
uint8_t s_rca2_fa1_y0 = 0;
|
||||
uint8_t s_rca2_fa1_y1 = 0;
|
||||
uint8_t s_rca2_fa1_s_rca2_ha_y1 = 0;
|
||||
uint8_t s_rca2_fa1_y2 = 0;
|
||||
uint8_t s_rca2_fa1_y3 = 0;
|
||||
uint8_t s_rca2_fa1_y4 = 0;
|
||||
uint8_t s_rca2_xor_1_a = 0;
|
||||
uint8_t s_rca2_xor_1_b = 0;
|
||||
uint8_t s_rca2_xor_1_y0 = 0;
|
||||
uint8_t s_rca2_xor_2_s_rca2_xor_1_y0 = 0;
|
||||
uint8_t s_rca2_xor_2_s_rca2_fa1_y4 = 0;
|
||||
uint8_t s_rca2_xor_2_y0 = 0;
|
||||
|
||||
s_rca2_ha_a = ((a >> 0) & 0x01);
|
||||
s_rca2_ha_b = ((b >> 0) & 0x01);
|
||||
s_rca2_ha_y0 = s_rca2_ha_a ^ s_rca2_ha_b;
|
||||
s_rca2_ha_y1 = s_rca2_ha_a & s_rca2_ha_b;
|
||||
s_rca2_fa1_a = ((a >> 1) & 0x01);
|
||||
s_rca2_fa1_b = ((b >> 1) & 0x01);
|
||||
s_rca2_fa1_s_rca2_ha_y1 = ((s_rca2_ha_y1 >> 0) & 0x01);
|
||||
s_rca2_fa1_y0 = s_rca2_fa1_a ^ s_rca2_fa1_b;
|
||||
s_rca2_fa1_y1 = s_rca2_fa1_a & s_rca2_fa1_b;
|
||||
s_rca2_fa1_y2 = s_rca2_fa1_y0 ^ s_rca2_fa1_s_rca2_ha_y1;
|
||||
s_rca2_fa1_y3 = s_rca2_fa1_y0 & s_rca2_fa1_s_rca2_ha_y1;
|
||||
s_rca2_fa1_y4 = s_rca2_fa1_y1 | s_rca2_fa1_y3;
|
||||
s_rca2_xor_1_a = ((a >> 1) & 0x01);
|
||||
s_rca2_xor_1_b = ((b >> 1) & 0x01);
|
||||
s_rca2_xor_1_y0 = s_rca2_xor_1_a ^ s_rca2_xor_1_b;
|
||||
s_rca2_xor_2_s_rca2_xor_1_y0 = ((s_rca2_xor_1_y0 >> 0) & 0x01);
|
||||
s_rca2_xor_2_s_rca2_fa1_y4 = ((s_rca2_fa1_y4 >> 0) & 0x01);
|
||||
s_rca2_xor_2_y0 = s_rca2_xor_2_s_rca2_xor_1_y0 ^ s_rca2_xor_2_s_rca2_fa1_y4;
|
||||
|
||||
out |= (s_rca2_ha_y0 & 0x01) << 0;
|
||||
out |= (s_rca2_fa1_y2 & 0x01) << 1;
|
||||
out |= (s_rca2_xor_2_y0 & 0x01) << 2;
|
||||
return out;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
int result = 0;
|
||||
for (int i = -2; i < 2; i++){
|
||||
for (int j = -2; j < 2; j++){
|
||||
result = i + j;
|
||||
|
||||
// Calculating 2's complement in case of negative sum
|
||||
if (result < 0) {
|
||||
result = 8 + result;
|
||||
}
|
||||
|
||||
assert(result == (int)s_rca2(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
134
Tests/Flat_c_circuits/Adders/s_rca6.c
Normal file
134
Tests/Flat_c_circuits/Adders/s_rca6.c
Normal file
@ -0,0 +1,134 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint64_t s_rca6(int64_t a, int64_t b){
|
||||
uint8_t out = 0;
|
||||
uint8_t s_rca6_ha_a = 0;
|
||||
uint8_t s_rca6_ha_b = 0;
|
||||
uint8_t s_rca6_ha_y0 = 0;
|
||||
uint8_t s_rca6_ha_y1 = 0;
|
||||
uint8_t s_rca6_fa1_a = 0;
|
||||
uint8_t s_rca6_fa1_b = 0;
|
||||
uint8_t s_rca6_fa1_y0 = 0;
|
||||
uint8_t s_rca6_fa1_y1 = 0;
|
||||
uint8_t s_rca6_fa1_s_rca6_ha_y1 = 0;
|
||||
uint8_t s_rca6_fa1_y2 = 0;
|
||||
uint8_t s_rca6_fa1_y3 = 0;
|
||||
uint8_t s_rca6_fa1_y4 = 0;
|
||||
uint8_t s_rca6_fa2_a = 0;
|
||||
uint8_t s_rca6_fa2_b = 0;
|
||||
uint8_t s_rca6_fa2_y0 = 0;
|
||||
uint8_t s_rca6_fa2_y1 = 0;
|
||||
uint8_t s_rca6_fa2_s_rca6_fa1_y4 = 0;
|
||||
uint8_t s_rca6_fa2_y2 = 0;
|
||||
uint8_t s_rca6_fa2_y3 = 0;
|
||||
uint8_t s_rca6_fa2_y4 = 0;
|
||||
uint8_t s_rca6_fa3_a = 0;
|
||||
uint8_t s_rca6_fa3_b = 0;
|
||||
uint8_t s_rca6_fa3_y0 = 0;
|
||||
uint8_t s_rca6_fa3_y1 = 0;
|
||||
uint8_t s_rca6_fa3_s_rca6_fa2_y4 = 0;
|
||||
uint8_t s_rca6_fa3_y2 = 0;
|
||||
uint8_t s_rca6_fa3_y3 = 0;
|
||||
uint8_t s_rca6_fa3_y4 = 0;
|
||||
uint8_t s_rca6_fa4_a = 0;
|
||||
uint8_t s_rca6_fa4_b = 0;
|
||||
uint8_t s_rca6_fa4_y0 = 0;
|
||||
uint8_t s_rca6_fa4_y1 = 0;
|
||||
uint8_t s_rca6_fa4_s_rca6_fa3_y4 = 0;
|
||||
uint8_t s_rca6_fa4_y2 = 0;
|
||||
uint8_t s_rca6_fa4_y3 = 0;
|
||||
uint8_t s_rca6_fa4_y4 = 0;
|
||||
uint8_t s_rca6_fa5_a = 0;
|
||||
uint8_t s_rca6_fa5_b = 0;
|
||||
uint8_t s_rca6_fa5_y0 = 0;
|
||||
uint8_t s_rca6_fa5_y1 = 0;
|
||||
uint8_t s_rca6_fa5_s_rca6_fa4_y4 = 0;
|
||||
uint8_t s_rca6_fa5_y2 = 0;
|
||||
uint8_t s_rca6_fa5_y3 = 0;
|
||||
uint8_t s_rca6_fa5_y4 = 0;
|
||||
uint8_t s_rca6_xor_1_a = 0;
|
||||
uint8_t s_rca6_xor_1_b = 0;
|
||||
uint8_t s_rca6_xor_1_y0 = 0;
|
||||
uint8_t s_rca6_xor_2_s_rca6_xor_1_y0 = 0;
|
||||
uint8_t s_rca6_xor_2_s_rca6_fa5_y4 = 0;
|
||||
uint8_t s_rca6_xor_2_y0 = 0;
|
||||
|
||||
s_rca6_ha_a = ((a >> 0) & 0x01);
|
||||
s_rca6_ha_b = ((b >> 0) & 0x01);
|
||||
s_rca6_ha_y0 = s_rca6_ha_a ^ s_rca6_ha_b;
|
||||
s_rca6_ha_y1 = s_rca6_ha_a & s_rca6_ha_b;
|
||||
s_rca6_fa1_a = ((a >> 1) & 0x01);
|
||||
s_rca6_fa1_b = ((b >> 1) & 0x01);
|
||||
s_rca6_fa1_s_rca6_ha_y1 = ((s_rca6_ha_y1 >> 0) & 0x01);
|
||||
s_rca6_fa1_y0 = s_rca6_fa1_a ^ s_rca6_fa1_b;
|
||||
s_rca6_fa1_y1 = s_rca6_fa1_a & s_rca6_fa1_b;
|
||||
s_rca6_fa1_y2 = s_rca6_fa1_y0 ^ s_rca6_fa1_s_rca6_ha_y1;
|
||||
s_rca6_fa1_y3 = s_rca6_fa1_y0 & s_rca6_fa1_s_rca6_ha_y1;
|
||||
s_rca6_fa1_y4 = s_rca6_fa1_y1 | s_rca6_fa1_y3;
|
||||
s_rca6_fa2_a = ((a >> 2) & 0x01);
|
||||
s_rca6_fa2_b = ((b >> 2) & 0x01);
|
||||
s_rca6_fa2_s_rca6_fa1_y4 = ((s_rca6_fa1_y4 >> 0) & 0x01);
|
||||
s_rca6_fa2_y0 = s_rca6_fa2_a ^ s_rca6_fa2_b;
|
||||
s_rca6_fa2_y1 = s_rca6_fa2_a & s_rca6_fa2_b;
|
||||
s_rca6_fa2_y2 = s_rca6_fa2_y0 ^ s_rca6_fa2_s_rca6_fa1_y4;
|
||||
s_rca6_fa2_y3 = s_rca6_fa2_y0 & s_rca6_fa2_s_rca6_fa1_y4;
|
||||
s_rca6_fa2_y4 = s_rca6_fa2_y1 | s_rca6_fa2_y3;
|
||||
s_rca6_fa3_a = ((a >> 3) & 0x01);
|
||||
s_rca6_fa3_b = ((b >> 3) & 0x01);
|
||||
s_rca6_fa3_s_rca6_fa2_y4 = ((s_rca6_fa2_y4 >> 0) & 0x01);
|
||||
s_rca6_fa3_y0 = s_rca6_fa3_a ^ s_rca6_fa3_b;
|
||||
s_rca6_fa3_y1 = s_rca6_fa3_a & s_rca6_fa3_b;
|
||||
s_rca6_fa3_y2 = s_rca6_fa3_y0 ^ s_rca6_fa3_s_rca6_fa2_y4;
|
||||
s_rca6_fa3_y3 = s_rca6_fa3_y0 & s_rca6_fa3_s_rca6_fa2_y4;
|
||||
s_rca6_fa3_y4 = s_rca6_fa3_y1 | s_rca6_fa3_y3;
|
||||
s_rca6_fa4_a = ((a >> 4) & 0x01);
|
||||
s_rca6_fa4_b = ((b >> 4) & 0x01);
|
||||
s_rca6_fa4_s_rca6_fa3_y4 = ((s_rca6_fa3_y4 >> 0) & 0x01);
|
||||
s_rca6_fa4_y0 = s_rca6_fa4_a ^ s_rca6_fa4_b;
|
||||
s_rca6_fa4_y1 = s_rca6_fa4_a & s_rca6_fa4_b;
|
||||
s_rca6_fa4_y2 = s_rca6_fa4_y0 ^ s_rca6_fa4_s_rca6_fa3_y4;
|
||||
s_rca6_fa4_y3 = s_rca6_fa4_y0 & s_rca6_fa4_s_rca6_fa3_y4;
|
||||
s_rca6_fa4_y4 = s_rca6_fa4_y1 | s_rca6_fa4_y3;
|
||||
s_rca6_fa5_a = ((a >> 5) & 0x01);
|
||||
s_rca6_fa5_b = ((b >> 5) & 0x01);
|
||||
s_rca6_fa5_s_rca6_fa4_y4 = ((s_rca6_fa4_y4 >> 0) & 0x01);
|
||||
s_rca6_fa5_y0 = s_rca6_fa5_a ^ s_rca6_fa5_b;
|
||||
s_rca6_fa5_y1 = s_rca6_fa5_a & s_rca6_fa5_b;
|
||||
s_rca6_fa5_y2 = s_rca6_fa5_y0 ^ s_rca6_fa5_s_rca6_fa4_y4;
|
||||
s_rca6_fa5_y3 = s_rca6_fa5_y0 & s_rca6_fa5_s_rca6_fa4_y4;
|
||||
s_rca6_fa5_y4 = s_rca6_fa5_y1 | s_rca6_fa5_y3;
|
||||
s_rca6_xor_1_a = ((a >> 5) & 0x01);
|
||||
s_rca6_xor_1_b = ((b >> 5) & 0x01);
|
||||
s_rca6_xor_1_y0 = s_rca6_xor_1_a ^ s_rca6_xor_1_b;
|
||||
s_rca6_xor_2_s_rca6_xor_1_y0 = ((s_rca6_xor_1_y0 >> 0) & 0x01);
|
||||
s_rca6_xor_2_s_rca6_fa5_y4 = ((s_rca6_fa5_y4 >> 0) & 0x01);
|
||||
s_rca6_xor_2_y0 = s_rca6_xor_2_s_rca6_xor_1_y0 ^ s_rca6_xor_2_s_rca6_fa5_y4;
|
||||
|
||||
out |= (s_rca6_ha_y0 & 0x01) << 0;
|
||||
out |= (s_rca6_fa1_y2 & 0x01) << 1;
|
||||
out |= (s_rca6_fa2_y2 & 0x01) << 2;
|
||||
out |= (s_rca6_fa3_y2 & 0x01) << 3;
|
||||
out |= (s_rca6_fa4_y2 & 0x01) << 4;
|
||||
out |= (s_rca6_fa5_y2 & 0x01) << 5;
|
||||
out |= (s_rca6_xor_2_y0 & 0x01) << 6;
|
||||
return out;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
int result = 0;
|
||||
for (int i = -32; i < 32; i++){
|
||||
for (int j = -32; j < 32; j++){
|
||||
result = i + j;
|
||||
|
||||
// Calculating 2's complement in case of negative sum
|
||||
if (result < 0) {
|
||||
result = 128 + result;
|
||||
}
|
||||
|
||||
assert(result == (int)s_rca6(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
168
Tests/Flat_c_circuits/Adders/s_rca8.c
Normal file
168
Tests/Flat_c_circuits/Adders/s_rca8.c
Normal file
@ -0,0 +1,168 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint64_t s_rca8(int64_t a, int64_t b){
|
||||
uint64_t out = 0;
|
||||
uint8_t s_rca8_ha_a = 0;
|
||||
uint8_t s_rca8_ha_b = 0;
|
||||
uint8_t s_rca8_ha_y0 = 0;
|
||||
uint8_t s_rca8_ha_y1 = 0;
|
||||
uint8_t s_rca8_fa1_a = 0;
|
||||
uint8_t s_rca8_fa1_b = 0;
|
||||
uint8_t s_rca8_fa1_y0 = 0;
|
||||
uint8_t s_rca8_fa1_y1 = 0;
|
||||
uint8_t s_rca8_fa1_s_rca8_ha_y1 = 0;
|
||||
uint8_t s_rca8_fa1_y2 = 0;
|
||||
uint8_t s_rca8_fa1_y3 = 0;
|
||||
uint8_t s_rca8_fa1_y4 = 0;
|
||||
uint8_t s_rca8_fa2_a = 0;
|
||||
uint8_t s_rca8_fa2_b = 0;
|
||||
uint8_t s_rca8_fa2_y0 = 0;
|
||||
uint8_t s_rca8_fa2_y1 = 0;
|
||||
uint8_t s_rca8_fa2_s_rca8_fa1_y4 = 0;
|
||||
uint8_t s_rca8_fa2_y2 = 0;
|
||||
uint8_t s_rca8_fa2_y3 = 0;
|
||||
uint8_t s_rca8_fa2_y4 = 0;
|
||||
uint8_t s_rca8_fa3_a = 0;
|
||||
uint8_t s_rca8_fa3_b = 0;
|
||||
uint8_t s_rca8_fa3_y0 = 0;
|
||||
uint8_t s_rca8_fa3_y1 = 0;
|
||||
uint8_t s_rca8_fa3_s_rca8_fa2_y4 = 0;
|
||||
uint8_t s_rca8_fa3_y2 = 0;
|
||||
uint8_t s_rca8_fa3_y3 = 0;
|
||||
uint8_t s_rca8_fa3_y4 = 0;
|
||||
uint8_t s_rca8_fa4_a = 0;
|
||||
uint8_t s_rca8_fa4_b = 0;
|
||||
uint8_t s_rca8_fa4_y0 = 0;
|
||||
uint8_t s_rca8_fa4_y1 = 0;
|
||||
uint8_t s_rca8_fa4_s_rca8_fa3_y4 = 0;
|
||||
uint8_t s_rca8_fa4_y2 = 0;
|
||||
uint8_t s_rca8_fa4_y3 = 0;
|
||||
uint8_t s_rca8_fa4_y4 = 0;
|
||||
uint8_t s_rca8_fa5_a = 0;
|
||||
uint8_t s_rca8_fa5_b = 0;
|
||||
uint8_t s_rca8_fa5_y0 = 0;
|
||||
uint8_t s_rca8_fa5_y1 = 0;
|
||||
uint8_t s_rca8_fa5_s_rca8_fa4_y4 = 0;
|
||||
uint8_t s_rca8_fa5_y2 = 0;
|
||||
uint8_t s_rca8_fa5_y3 = 0;
|
||||
uint8_t s_rca8_fa5_y4 = 0;
|
||||
uint8_t s_rca8_fa6_a = 0;
|
||||
uint8_t s_rca8_fa6_b = 0;
|
||||
uint8_t s_rca8_fa6_y0 = 0;
|
||||
uint8_t s_rca8_fa6_y1 = 0;
|
||||
uint8_t s_rca8_fa6_s_rca8_fa5_y4 = 0;
|
||||
uint8_t s_rca8_fa6_y2 = 0;
|
||||
uint8_t s_rca8_fa6_y3 = 0;
|
||||
uint8_t s_rca8_fa6_y4 = 0;
|
||||
uint8_t s_rca8_fa7_a = 0;
|
||||
uint8_t s_rca8_fa7_b = 0;
|
||||
uint8_t s_rca8_fa7_y0 = 0;
|
||||
uint8_t s_rca8_fa7_y1 = 0;
|
||||
uint8_t s_rca8_fa7_s_rca8_fa6_y4 = 0;
|
||||
uint8_t s_rca8_fa7_y2 = 0;
|
||||
uint8_t s_rca8_fa7_y3 = 0;
|
||||
uint8_t s_rca8_fa7_y4 = 0;
|
||||
uint8_t s_rca8_xor_1_a = 0;
|
||||
uint8_t s_rca8_xor_1_b = 0;
|
||||
uint8_t s_rca8_xor_1_y0 = 0;
|
||||
uint8_t s_rca8_xor_2_s_rca8_xor_1_y0 = 0;
|
||||
uint8_t s_rca8_xor_2_s_rca8_fa7_y4 = 0;
|
||||
uint8_t s_rca8_xor_2_y0 = 0;
|
||||
|
||||
s_rca8_ha_a = ((a >> 0) & 0x01);
|
||||
s_rca8_ha_b = ((b >> 0) & 0x01);
|
||||
s_rca8_ha_y0 = s_rca8_ha_a ^ s_rca8_ha_b;
|
||||
s_rca8_ha_y1 = s_rca8_ha_a & s_rca8_ha_b;
|
||||
s_rca8_fa1_a = ((a >> 1) & 0x01);
|
||||
s_rca8_fa1_b = ((b >> 1) & 0x01);
|
||||
s_rca8_fa1_s_rca8_ha_y1 = ((s_rca8_ha_y1 >> 0) & 0x01);
|
||||
s_rca8_fa1_y0 = s_rca8_fa1_a ^ s_rca8_fa1_b;
|
||||
s_rca8_fa1_y1 = s_rca8_fa1_a & s_rca8_fa1_b;
|
||||
s_rca8_fa1_y2 = s_rca8_fa1_y0 ^ s_rca8_fa1_s_rca8_ha_y1;
|
||||
s_rca8_fa1_y3 = s_rca8_fa1_y0 & s_rca8_fa1_s_rca8_ha_y1;
|
||||
s_rca8_fa1_y4 = s_rca8_fa1_y1 | s_rca8_fa1_y3;
|
||||
s_rca8_fa2_a = ((a >> 2) & 0x01);
|
||||
s_rca8_fa2_b = ((b >> 2) & 0x01);
|
||||
s_rca8_fa2_s_rca8_fa1_y4 = ((s_rca8_fa1_y4 >> 0) & 0x01);
|
||||
s_rca8_fa2_y0 = s_rca8_fa2_a ^ s_rca8_fa2_b;
|
||||
s_rca8_fa2_y1 = s_rca8_fa2_a & s_rca8_fa2_b;
|
||||
s_rca8_fa2_y2 = s_rca8_fa2_y0 ^ s_rca8_fa2_s_rca8_fa1_y4;
|
||||
s_rca8_fa2_y3 = s_rca8_fa2_y0 & s_rca8_fa2_s_rca8_fa1_y4;
|
||||
s_rca8_fa2_y4 = s_rca8_fa2_y1 | s_rca8_fa2_y3;
|
||||
s_rca8_fa3_a = ((a >> 3) & 0x01);
|
||||
s_rca8_fa3_b = ((b >> 3) & 0x01);
|
||||
s_rca8_fa3_s_rca8_fa2_y4 = ((s_rca8_fa2_y4 >> 0) & 0x01);
|
||||
s_rca8_fa3_y0 = s_rca8_fa3_a ^ s_rca8_fa3_b;
|
||||
s_rca8_fa3_y1 = s_rca8_fa3_a & s_rca8_fa3_b;
|
||||
s_rca8_fa3_y2 = s_rca8_fa3_y0 ^ s_rca8_fa3_s_rca8_fa2_y4;
|
||||
s_rca8_fa3_y3 = s_rca8_fa3_y0 & s_rca8_fa3_s_rca8_fa2_y4;
|
||||
s_rca8_fa3_y4 = s_rca8_fa3_y1 | s_rca8_fa3_y3;
|
||||
s_rca8_fa4_a = ((a >> 4) & 0x01);
|
||||
s_rca8_fa4_b = ((b >> 4) & 0x01);
|
||||
s_rca8_fa4_s_rca8_fa3_y4 = ((s_rca8_fa3_y4 >> 0) & 0x01);
|
||||
s_rca8_fa4_y0 = s_rca8_fa4_a ^ s_rca8_fa4_b;
|
||||
s_rca8_fa4_y1 = s_rca8_fa4_a & s_rca8_fa4_b;
|
||||
s_rca8_fa4_y2 = s_rca8_fa4_y0 ^ s_rca8_fa4_s_rca8_fa3_y4;
|
||||
s_rca8_fa4_y3 = s_rca8_fa4_y0 & s_rca8_fa4_s_rca8_fa3_y4;
|
||||
s_rca8_fa4_y4 = s_rca8_fa4_y1 | s_rca8_fa4_y3;
|
||||
s_rca8_fa5_a = ((a >> 5) & 0x01);
|
||||
s_rca8_fa5_b = ((b >> 5) & 0x01);
|
||||
s_rca8_fa5_s_rca8_fa4_y4 = ((s_rca8_fa4_y4 >> 0) & 0x01);
|
||||
s_rca8_fa5_y0 = s_rca8_fa5_a ^ s_rca8_fa5_b;
|
||||
s_rca8_fa5_y1 = s_rca8_fa5_a & s_rca8_fa5_b;
|
||||
s_rca8_fa5_y2 = s_rca8_fa5_y0 ^ s_rca8_fa5_s_rca8_fa4_y4;
|
||||
s_rca8_fa5_y3 = s_rca8_fa5_y0 & s_rca8_fa5_s_rca8_fa4_y4;
|
||||
s_rca8_fa5_y4 = s_rca8_fa5_y1 | s_rca8_fa5_y3;
|
||||
s_rca8_fa6_a = ((a >> 6) & 0x01);
|
||||
s_rca8_fa6_b = ((b >> 6) & 0x01);
|
||||
s_rca8_fa6_s_rca8_fa5_y4 = ((s_rca8_fa5_y4 >> 0) & 0x01);
|
||||
s_rca8_fa6_y0 = s_rca8_fa6_a ^ s_rca8_fa6_b;
|
||||
s_rca8_fa6_y1 = s_rca8_fa6_a & s_rca8_fa6_b;
|
||||
s_rca8_fa6_y2 = s_rca8_fa6_y0 ^ s_rca8_fa6_s_rca8_fa5_y4;
|
||||
s_rca8_fa6_y3 = s_rca8_fa6_y0 & s_rca8_fa6_s_rca8_fa5_y4;
|
||||
s_rca8_fa6_y4 = s_rca8_fa6_y1 | s_rca8_fa6_y3;
|
||||
s_rca8_fa7_a = ((a >> 7) & 0x01);
|
||||
s_rca8_fa7_b = ((b >> 7) & 0x01);
|
||||
s_rca8_fa7_s_rca8_fa6_y4 = ((s_rca8_fa6_y4 >> 0) & 0x01);
|
||||
s_rca8_fa7_y0 = s_rca8_fa7_a ^ s_rca8_fa7_b;
|
||||
s_rca8_fa7_y1 = s_rca8_fa7_a & s_rca8_fa7_b;
|
||||
s_rca8_fa7_y2 = s_rca8_fa7_y0 ^ s_rca8_fa7_s_rca8_fa6_y4;
|
||||
s_rca8_fa7_y3 = s_rca8_fa7_y0 & s_rca8_fa7_s_rca8_fa6_y4;
|
||||
s_rca8_fa7_y4 = s_rca8_fa7_y1 | s_rca8_fa7_y3;
|
||||
s_rca8_xor_1_a = ((a >> 7) & 0x01);
|
||||
s_rca8_xor_1_b = ((b >> 7) & 0x01);
|
||||
s_rca8_xor_1_y0 = s_rca8_xor_1_a ^ s_rca8_xor_1_b;
|
||||
s_rca8_xor_2_s_rca8_xor_1_y0 = ((s_rca8_xor_1_y0 >> 0) & 0x01);
|
||||
s_rca8_xor_2_s_rca8_fa7_y4 = ((s_rca8_fa7_y4 >> 0) & 0x01);
|
||||
s_rca8_xor_2_y0 = s_rca8_xor_2_s_rca8_xor_1_y0 ^ s_rca8_xor_2_s_rca8_fa7_y4;
|
||||
|
||||
out |= (s_rca8_ha_y0 & 0x01) << 0;
|
||||
out |= (s_rca8_fa1_y2 & 0x01) << 1;
|
||||
out |= (s_rca8_fa2_y2 & 0x01) << 2;
|
||||
out |= (s_rca8_fa3_y2 & 0x01) << 3;
|
||||
out |= (s_rca8_fa4_y2 & 0x01) << 4;
|
||||
out |= (s_rca8_fa5_y2 & 0x01) << 5;
|
||||
out |= (s_rca8_fa6_y2 & 0x01) << 6;
|
||||
out |= (s_rca8_fa7_y2 & 0x01) << 7;
|
||||
out |= (s_rca8_xor_2_y0 & 0x01) << 8;
|
||||
return out;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
int result = 0;
|
||||
for (int i = -128; i < 128; i++){
|
||||
for (int j = -128; j < 128; j++){
|
||||
result = i + j;
|
||||
|
||||
// Calculating 2's complement in case of negative sum
|
||||
if (result < 0) {
|
||||
result = 512 + result;
|
||||
}
|
||||
|
||||
assert(result == (int)s_rca8(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
63
Tests/Flat_c_circuits/Adders/u_rca3.c
Normal file
63
Tests/Flat_c_circuits/Adders/u_rca3.c
Normal file
@ -0,0 +1,63 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint64_t u_rca3(uint64_t a, uint64_t b){
|
||||
uint8_t out = 0;
|
||||
uint8_t u_rca3_ha_a = 0;
|
||||
uint8_t u_rca3_ha_b = 0;
|
||||
uint8_t u_rca3_ha_y0 = 0;
|
||||
uint8_t u_rca3_ha_y1 = 0;
|
||||
uint8_t u_rca3_fa1_a = 0;
|
||||
uint8_t u_rca3_fa1_b = 0;
|
||||
uint8_t u_rca3_fa1_y0 = 0;
|
||||
uint8_t u_rca3_fa1_y1 = 0;
|
||||
uint8_t u_rca3_fa1_u_rca3_ha_y1 = 0;
|
||||
uint8_t u_rca3_fa1_y2 = 0;
|
||||
uint8_t u_rca3_fa1_y3 = 0;
|
||||
uint8_t u_rca3_fa1_y4 = 0;
|
||||
uint8_t u_rca3_fa2_a = 0;
|
||||
uint8_t u_rca3_fa2_b = 0;
|
||||
uint8_t u_rca3_fa2_y0 = 0;
|
||||
uint8_t u_rca3_fa2_y1 = 0;
|
||||
uint8_t u_rca3_fa2_u_rca3_fa1_y4 = 0;
|
||||
uint8_t u_rca3_fa2_y2 = 0;
|
||||
uint8_t u_rca3_fa2_y3 = 0;
|
||||
uint8_t u_rca3_fa2_y4 = 0;
|
||||
|
||||
u_rca3_ha_a = ((a >> 0) & 0x01);
|
||||
u_rca3_ha_b = ((b >> 0) & 0x01);
|
||||
u_rca3_ha_y0 = u_rca3_ha_a ^ u_rca3_ha_b;
|
||||
u_rca3_ha_y1 = u_rca3_ha_a & u_rca3_ha_b;
|
||||
u_rca3_fa1_a = ((a >> 1) & 0x01);
|
||||
u_rca3_fa1_b = ((b >> 1) & 0x01);
|
||||
u_rca3_fa1_u_rca3_ha_y1 = ((u_rca3_ha_y1 >> 0) & 0x01);
|
||||
u_rca3_fa1_y0 = u_rca3_fa1_a ^ u_rca3_fa1_b;
|
||||
u_rca3_fa1_y1 = u_rca3_fa1_a & u_rca3_fa1_b;
|
||||
u_rca3_fa1_y2 = u_rca3_fa1_y0 ^ u_rca3_fa1_u_rca3_ha_y1;
|
||||
u_rca3_fa1_y3 = u_rca3_fa1_y0 & u_rca3_fa1_u_rca3_ha_y1;
|
||||
u_rca3_fa1_y4 = u_rca3_fa1_y1 | u_rca3_fa1_y3;
|
||||
u_rca3_fa2_a = ((a >> 2) & 0x01);
|
||||
u_rca3_fa2_b = ((b >> 2) & 0x01);
|
||||
u_rca3_fa2_u_rca3_fa1_y4 = ((u_rca3_fa1_y4 >> 0) & 0x01);
|
||||
u_rca3_fa2_y0 = u_rca3_fa2_a ^ u_rca3_fa2_b;
|
||||
u_rca3_fa2_y1 = u_rca3_fa2_a & u_rca3_fa2_b;
|
||||
u_rca3_fa2_y2 = u_rca3_fa2_y0 ^ u_rca3_fa2_u_rca3_fa1_y4;
|
||||
u_rca3_fa2_y3 = u_rca3_fa2_y0 & u_rca3_fa2_u_rca3_fa1_y4;
|
||||
u_rca3_fa2_y4 = u_rca3_fa2_y1 | u_rca3_fa2_y3;
|
||||
|
||||
out |= (u_rca3_ha_y0 & 0x01) << 0;
|
||||
out |= (u_rca3_fa1_y2 & 0x01) << 1;
|
||||
out |= (u_rca3_fa2_y2 & 0x01) << 2;
|
||||
out |= (u_rca3_fa2_y4 & 0x01) << 3;
|
||||
return out;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 8; i++){
|
||||
for (int j = 0; j < 8; j++){
|
||||
assert((i + j) == u_rca3(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
97
Tests/Flat_c_circuits/Adders/u_rca5.c
Normal file
97
Tests/Flat_c_circuits/Adders/u_rca5.c
Normal file
@ -0,0 +1,97 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint64_t u_rca5(uint64_t a, uint64_t b){
|
||||
uint8_t out = 0;
|
||||
uint8_t u_rca5_ha_a = 0;
|
||||
uint8_t u_rca5_ha_b = 0;
|
||||
uint8_t u_rca5_ha_y0 = 0;
|
||||
uint8_t u_rca5_ha_y1 = 0;
|
||||
uint8_t u_rca5_fa1_a = 0;
|
||||
uint8_t u_rca5_fa1_b = 0;
|
||||
uint8_t u_rca5_fa1_y0 = 0;
|
||||
uint8_t u_rca5_fa1_y1 = 0;
|
||||
uint8_t u_rca5_fa1_u_rca5_ha_y1 = 0;
|
||||
uint8_t u_rca5_fa1_y2 = 0;
|
||||
uint8_t u_rca5_fa1_y3 = 0;
|
||||
uint8_t u_rca5_fa1_y4 = 0;
|
||||
uint8_t u_rca5_fa2_a = 0;
|
||||
uint8_t u_rca5_fa2_b = 0;
|
||||
uint8_t u_rca5_fa2_y0 = 0;
|
||||
uint8_t u_rca5_fa2_y1 = 0;
|
||||
uint8_t u_rca5_fa2_u_rca5_fa1_y4 = 0;
|
||||
uint8_t u_rca5_fa2_y2 = 0;
|
||||
uint8_t u_rca5_fa2_y3 = 0;
|
||||
uint8_t u_rca5_fa2_y4 = 0;
|
||||
uint8_t u_rca5_fa3_a = 0;
|
||||
uint8_t u_rca5_fa3_b = 0;
|
||||
uint8_t u_rca5_fa3_y0 = 0;
|
||||
uint8_t u_rca5_fa3_y1 = 0;
|
||||
uint8_t u_rca5_fa3_u_rca5_fa2_y4 = 0;
|
||||
uint8_t u_rca5_fa3_y2 = 0;
|
||||
uint8_t u_rca5_fa3_y3 = 0;
|
||||
uint8_t u_rca5_fa3_y4 = 0;
|
||||
uint8_t u_rca5_fa4_a = 0;
|
||||
uint8_t u_rca5_fa4_b = 0;
|
||||
uint8_t u_rca5_fa4_y0 = 0;
|
||||
uint8_t u_rca5_fa4_y1 = 0;
|
||||
uint8_t u_rca5_fa4_u_rca5_fa3_y4 = 0;
|
||||
uint8_t u_rca5_fa4_y2 = 0;
|
||||
uint8_t u_rca5_fa4_y3 = 0;
|
||||
uint8_t u_rca5_fa4_y4 = 0;
|
||||
|
||||
u_rca5_ha_a = ((a >> 0) & 0x01);
|
||||
u_rca5_ha_b = ((b >> 0) & 0x01);
|
||||
u_rca5_ha_y0 = u_rca5_ha_a ^ u_rca5_ha_b;
|
||||
u_rca5_ha_y1 = u_rca5_ha_a & u_rca5_ha_b;
|
||||
u_rca5_fa1_a = ((a >> 1) & 0x01);
|
||||
u_rca5_fa1_b = ((b >> 1) & 0x01);
|
||||
u_rca5_fa1_u_rca5_ha_y1 = ((u_rca5_ha_y1 >> 0) & 0x01);
|
||||
u_rca5_fa1_y0 = u_rca5_fa1_a ^ u_rca5_fa1_b;
|
||||
u_rca5_fa1_y1 = u_rca5_fa1_a & u_rca5_fa1_b;
|
||||
u_rca5_fa1_y2 = u_rca5_fa1_y0 ^ u_rca5_fa1_u_rca5_ha_y1;
|
||||
u_rca5_fa1_y3 = u_rca5_fa1_y0 & u_rca5_fa1_u_rca5_ha_y1;
|
||||
u_rca5_fa1_y4 = u_rca5_fa1_y1 | u_rca5_fa1_y3;
|
||||
u_rca5_fa2_a = ((a >> 2) & 0x01);
|
||||
u_rca5_fa2_b = ((b >> 2) & 0x01);
|
||||
u_rca5_fa2_u_rca5_fa1_y4 = ((u_rca5_fa1_y4 >> 0) & 0x01);
|
||||
u_rca5_fa2_y0 = u_rca5_fa2_a ^ u_rca5_fa2_b;
|
||||
u_rca5_fa2_y1 = u_rca5_fa2_a & u_rca5_fa2_b;
|
||||
u_rca5_fa2_y2 = u_rca5_fa2_y0 ^ u_rca5_fa2_u_rca5_fa1_y4;
|
||||
u_rca5_fa2_y3 = u_rca5_fa2_y0 & u_rca5_fa2_u_rca5_fa1_y4;
|
||||
u_rca5_fa2_y4 = u_rca5_fa2_y1 | u_rca5_fa2_y3;
|
||||
u_rca5_fa3_a = ((a >> 3) & 0x01);
|
||||
u_rca5_fa3_b = ((b >> 3) & 0x01);
|
||||
u_rca5_fa3_u_rca5_fa2_y4 = ((u_rca5_fa2_y4 >> 0) & 0x01);
|
||||
u_rca5_fa3_y0 = u_rca5_fa3_a ^ u_rca5_fa3_b;
|
||||
u_rca5_fa3_y1 = u_rca5_fa3_a & u_rca5_fa3_b;
|
||||
u_rca5_fa3_y2 = u_rca5_fa3_y0 ^ u_rca5_fa3_u_rca5_fa2_y4;
|
||||
u_rca5_fa3_y3 = u_rca5_fa3_y0 & u_rca5_fa3_u_rca5_fa2_y4;
|
||||
u_rca5_fa3_y4 = u_rca5_fa3_y1 | u_rca5_fa3_y3;
|
||||
u_rca5_fa4_a = ((a >> 4) & 0x01);
|
||||
u_rca5_fa4_b = ((b >> 4) & 0x01);
|
||||
u_rca5_fa4_u_rca5_fa3_y4 = ((u_rca5_fa3_y4 >> 0) & 0x01);
|
||||
u_rca5_fa4_y0 = u_rca5_fa4_a ^ u_rca5_fa4_b;
|
||||
u_rca5_fa4_y1 = u_rca5_fa4_a & u_rca5_fa4_b;
|
||||
u_rca5_fa4_y2 = u_rca5_fa4_y0 ^ u_rca5_fa4_u_rca5_fa3_y4;
|
||||
u_rca5_fa4_y3 = u_rca5_fa4_y0 & u_rca5_fa4_u_rca5_fa3_y4;
|
||||
u_rca5_fa4_y4 = u_rca5_fa4_y1 | u_rca5_fa4_y3;
|
||||
|
||||
out |= (u_rca5_ha_y0 & 0x01) << 0;
|
||||
out |= (u_rca5_fa1_y2 & 0x01) << 1;
|
||||
out |= (u_rca5_fa2_y2 & 0x01) << 2;
|
||||
out |= (u_rca5_fa3_y2 & 0x01) << 3;
|
||||
out |= (u_rca5_fa4_y2 & 0x01) << 4;
|
||||
out |= (u_rca5_fa4_y4 & 0x01) << 5;
|
||||
return out;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 32; i++){
|
||||
for (int j = 0; j < 32; j++){
|
||||
assert((i + j) == u_rca5(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
148
Tests/Flat_c_circuits/Adders/u_rca8.c
Normal file
148
Tests/Flat_c_circuits/Adders/u_rca8.c
Normal file
@ -0,0 +1,148 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint64_t u_rca8(uint64_t a, uint64_t b){
|
||||
uint64_t out = 0;
|
||||
uint8_t u_rca8_ha_a = 0;
|
||||
uint8_t u_rca8_ha_b = 0;
|
||||
uint8_t u_rca8_ha_y0 = 0;
|
||||
uint8_t u_rca8_ha_y1 = 0;
|
||||
uint8_t u_rca8_fa1_a = 0;
|
||||
uint8_t u_rca8_fa1_b = 0;
|
||||
uint8_t u_rca8_fa1_y0 = 0;
|
||||
uint8_t u_rca8_fa1_y1 = 0;
|
||||
uint8_t u_rca8_fa1_u_rca8_ha_y1 = 0;
|
||||
uint8_t u_rca8_fa1_y2 = 0;
|
||||
uint8_t u_rca8_fa1_y3 = 0;
|
||||
uint8_t u_rca8_fa1_y4 = 0;
|
||||
uint8_t u_rca8_fa2_a = 0;
|
||||
uint8_t u_rca8_fa2_b = 0;
|
||||
uint8_t u_rca8_fa2_y0 = 0;
|
||||
uint8_t u_rca8_fa2_y1 = 0;
|
||||
uint8_t u_rca8_fa2_u_rca8_fa1_y4 = 0;
|
||||
uint8_t u_rca8_fa2_y2 = 0;
|
||||
uint8_t u_rca8_fa2_y3 = 0;
|
||||
uint8_t u_rca8_fa2_y4 = 0;
|
||||
uint8_t u_rca8_fa3_a = 0;
|
||||
uint8_t u_rca8_fa3_b = 0;
|
||||
uint8_t u_rca8_fa3_y0 = 0;
|
||||
uint8_t u_rca8_fa3_y1 = 0;
|
||||
uint8_t u_rca8_fa3_u_rca8_fa2_y4 = 0;
|
||||
uint8_t u_rca8_fa3_y2 = 0;
|
||||
uint8_t u_rca8_fa3_y3 = 0;
|
||||
uint8_t u_rca8_fa3_y4 = 0;
|
||||
uint8_t u_rca8_fa4_a = 0;
|
||||
uint8_t u_rca8_fa4_b = 0;
|
||||
uint8_t u_rca8_fa4_y0 = 0;
|
||||
uint8_t u_rca8_fa4_y1 = 0;
|
||||
uint8_t u_rca8_fa4_u_rca8_fa3_y4 = 0;
|
||||
uint8_t u_rca8_fa4_y2 = 0;
|
||||
uint8_t u_rca8_fa4_y3 = 0;
|
||||
uint8_t u_rca8_fa4_y4 = 0;
|
||||
uint8_t u_rca8_fa5_a = 0;
|
||||
uint8_t u_rca8_fa5_b = 0;
|
||||
uint8_t u_rca8_fa5_y0 = 0;
|
||||
uint8_t u_rca8_fa5_y1 = 0;
|
||||
uint8_t u_rca8_fa5_u_rca8_fa4_y4 = 0;
|
||||
uint8_t u_rca8_fa5_y2 = 0;
|
||||
uint8_t u_rca8_fa5_y3 = 0;
|
||||
uint8_t u_rca8_fa5_y4 = 0;
|
||||
uint8_t u_rca8_fa6_a = 0;
|
||||
uint8_t u_rca8_fa6_b = 0;
|
||||
uint8_t u_rca8_fa6_y0 = 0;
|
||||
uint8_t u_rca8_fa6_y1 = 0;
|
||||
uint8_t u_rca8_fa6_u_rca8_fa5_y4 = 0;
|
||||
uint8_t u_rca8_fa6_y2 = 0;
|
||||
uint8_t u_rca8_fa6_y3 = 0;
|
||||
uint8_t u_rca8_fa6_y4 = 0;
|
||||
uint8_t u_rca8_fa7_a = 0;
|
||||
uint8_t u_rca8_fa7_b = 0;
|
||||
uint8_t u_rca8_fa7_y0 = 0;
|
||||
uint8_t u_rca8_fa7_y1 = 0;
|
||||
uint8_t u_rca8_fa7_u_rca8_fa6_y4 = 0;
|
||||
uint8_t u_rca8_fa7_y2 = 0;
|
||||
uint8_t u_rca8_fa7_y3 = 0;
|
||||
uint8_t u_rca8_fa7_y4 = 0;
|
||||
|
||||
u_rca8_ha_a = ((a >> 0) & 0x01);
|
||||
u_rca8_ha_b = ((b >> 0) & 0x01);
|
||||
u_rca8_ha_y0 = u_rca8_ha_a ^ u_rca8_ha_b;
|
||||
u_rca8_ha_y1 = u_rca8_ha_a & u_rca8_ha_b;
|
||||
u_rca8_fa1_a = ((a >> 1) & 0x01);
|
||||
u_rca8_fa1_b = ((b >> 1) & 0x01);
|
||||
u_rca8_fa1_u_rca8_ha_y1 = ((u_rca8_ha_y1 >> 0) & 0x01);
|
||||
u_rca8_fa1_y0 = u_rca8_fa1_a ^ u_rca8_fa1_b;
|
||||
u_rca8_fa1_y1 = u_rca8_fa1_a & u_rca8_fa1_b;
|
||||
u_rca8_fa1_y2 = u_rca8_fa1_y0 ^ u_rca8_fa1_u_rca8_ha_y1;
|
||||
u_rca8_fa1_y3 = u_rca8_fa1_y0 & u_rca8_fa1_u_rca8_ha_y1;
|
||||
u_rca8_fa1_y4 = u_rca8_fa1_y1 | u_rca8_fa1_y3;
|
||||
u_rca8_fa2_a = ((a >> 2) & 0x01);
|
||||
u_rca8_fa2_b = ((b >> 2) & 0x01);
|
||||
u_rca8_fa2_u_rca8_fa1_y4 = ((u_rca8_fa1_y4 >> 0) & 0x01);
|
||||
u_rca8_fa2_y0 = u_rca8_fa2_a ^ u_rca8_fa2_b;
|
||||
u_rca8_fa2_y1 = u_rca8_fa2_a & u_rca8_fa2_b;
|
||||
u_rca8_fa2_y2 = u_rca8_fa2_y0 ^ u_rca8_fa2_u_rca8_fa1_y4;
|
||||
u_rca8_fa2_y3 = u_rca8_fa2_y0 & u_rca8_fa2_u_rca8_fa1_y4;
|
||||
u_rca8_fa2_y4 = u_rca8_fa2_y1 | u_rca8_fa2_y3;
|
||||
u_rca8_fa3_a = ((a >> 3) & 0x01);
|
||||
u_rca8_fa3_b = ((b >> 3) & 0x01);
|
||||
u_rca8_fa3_u_rca8_fa2_y4 = ((u_rca8_fa2_y4 >> 0) & 0x01);
|
||||
u_rca8_fa3_y0 = u_rca8_fa3_a ^ u_rca8_fa3_b;
|
||||
u_rca8_fa3_y1 = u_rca8_fa3_a & u_rca8_fa3_b;
|
||||
u_rca8_fa3_y2 = u_rca8_fa3_y0 ^ u_rca8_fa3_u_rca8_fa2_y4;
|
||||
u_rca8_fa3_y3 = u_rca8_fa3_y0 & u_rca8_fa3_u_rca8_fa2_y4;
|
||||
u_rca8_fa3_y4 = u_rca8_fa3_y1 | u_rca8_fa3_y3;
|
||||
u_rca8_fa4_a = ((a >> 4) & 0x01);
|
||||
u_rca8_fa4_b = ((b >> 4) & 0x01);
|
||||
u_rca8_fa4_u_rca8_fa3_y4 = ((u_rca8_fa3_y4 >> 0) & 0x01);
|
||||
u_rca8_fa4_y0 = u_rca8_fa4_a ^ u_rca8_fa4_b;
|
||||
u_rca8_fa4_y1 = u_rca8_fa4_a & u_rca8_fa4_b;
|
||||
u_rca8_fa4_y2 = u_rca8_fa4_y0 ^ u_rca8_fa4_u_rca8_fa3_y4;
|
||||
u_rca8_fa4_y3 = u_rca8_fa4_y0 & u_rca8_fa4_u_rca8_fa3_y4;
|
||||
u_rca8_fa4_y4 = u_rca8_fa4_y1 | u_rca8_fa4_y3;
|
||||
u_rca8_fa5_a = ((a >> 5) & 0x01);
|
||||
u_rca8_fa5_b = ((b >> 5) & 0x01);
|
||||
u_rca8_fa5_u_rca8_fa4_y4 = ((u_rca8_fa4_y4 >> 0) & 0x01);
|
||||
u_rca8_fa5_y0 = u_rca8_fa5_a ^ u_rca8_fa5_b;
|
||||
u_rca8_fa5_y1 = u_rca8_fa5_a & u_rca8_fa5_b;
|
||||
u_rca8_fa5_y2 = u_rca8_fa5_y0 ^ u_rca8_fa5_u_rca8_fa4_y4;
|
||||
u_rca8_fa5_y3 = u_rca8_fa5_y0 & u_rca8_fa5_u_rca8_fa4_y4;
|
||||
u_rca8_fa5_y4 = u_rca8_fa5_y1 | u_rca8_fa5_y3;
|
||||
u_rca8_fa6_a = ((a >> 6) & 0x01);
|
||||
u_rca8_fa6_b = ((b >> 6) & 0x01);
|
||||
u_rca8_fa6_u_rca8_fa5_y4 = ((u_rca8_fa5_y4 >> 0) & 0x01);
|
||||
u_rca8_fa6_y0 = u_rca8_fa6_a ^ u_rca8_fa6_b;
|
||||
u_rca8_fa6_y1 = u_rca8_fa6_a & u_rca8_fa6_b;
|
||||
u_rca8_fa6_y2 = u_rca8_fa6_y0 ^ u_rca8_fa6_u_rca8_fa5_y4;
|
||||
u_rca8_fa6_y3 = u_rca8_fa6_y0 & u_rca8_fa6_u_rca8_fa5_y4;
|
||||
u_rca8_fa6_y4 = u_rca8_fa6_y1 | u_rca8_fa6_y3;
|
||||
u_rca8_fa7_a = ((a >> 7) & 0x01);
|
||||
u_rca8_fa7_b = ((b >> 7) & 0x01);
|
||||
u_rca8_fa7_u_rca8_fa6_y4 = ((u_rca8_fa6_y4 >> 0) & 0x01);
|
||||
u_rca8_fa7_y0 = u_rca8_fa7_a ^ u_rca8_fa7_b;
|
||||
u_rca8_fa7_y1 = u_rca8_fa7_a & u_rca8_fa7_b;
|
||||
u_rca8_fa7_y2 = u_rca8_fa7_y0 ^ u_rca8_fa7_u_rca8_fa6_y4;
|
||||
u_rca8_fa7_y3 = u_rca8_fa7_y0 & u_rca8_fa7_u_rca8_fa6_y4;
|
||||
u_rca8_fa7_y4 = u_rca8_fa7_y1 | u_rca8_fa7_y3;
|
||||
|
||||
out |= (u_rca8_ha_y0 & 0x01) << 0;
|
||||
out |= (u_rca8_fa1_y2 & 0x01) << 1;
|
||||
out |= (u_rca8_fa2_y2 & 0x01) << 2;
|
||||
out |= (u_rca8_fa3_y2 & 0x01) << 3;
|
||||
out |= (u_rca8_fa4_y2 & 0x01) << 4;
|
||||
out |= (u_rca8_fa5_y2 & 0x01) << 5;
|
||||
out |= (u_rca8_fa6_y2 & 0x01) << 6;
|
||||
out |= (u_rca8_fa7_y2 & 0x01) << 7;
|
||||
out |= (u_rca8_fa7_y4 & 0x01) << 8;
|
||||
return out;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 256; i++){
|
||||
for (int j = 0; j < 256; j++){
|
||||
assert((i + j) == u_rca8(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
16
Tests/Flat_c_circuits/Logic_gates/and_gate.c
Normal file
16
Tests/Flat_c_circuits/Logic_gates/and_gate.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t and_gate(uint8_t a, uint8_t b){
|
||||
return ((a >> 0) & 0x01) & ((b >> 0) & 0x01);
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
for (int j = 0; j < 2; j++){
|
||||
assert((i & j) == and_gate(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
16
Tests/Flat_c_circuits/Logic_gates/nand_gate.c
Normal file
16
Tests/Flat_c_circuits/Logic_gates/nand_gate.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t nand_gate(uint8_t a, uint8_t b){
|
||||
return ~(((a >> 0) & 0x01) & ((b >> 0) & 0x01)) & 0x01 << 0;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
for (int j = 0; j < 2; j++){
|
||||
assert(!(i & j) == nand_gate(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
16
Tests/Flat_c_circuits/Logic_gates/nor_gate.c
Normal file
16
Tests/Flat_c_circuits/Logic_gates/nor_gate.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t nor_gate(uint8_t a, uint8_t b){
|
||||
return ~(((a >> 0) & 0x01) | ((b >> 0) & 0x01)) & 0x01 << 0;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
for (int j = 0; j < 2; j++){
|
||||
assert(!(i | j) == nor_gate(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
14
Tests/Flat_c_circuits/Logic_gates/not_gate.c
Normal file
14
Tests/Flat_c_circuits/Logic_gates/not_gate.c
Normal file
@ -0,0 +1,14 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t not_gate(uint8_t a){
|
||||
return ~((a >> 0) & 0x01) & 0x01 << 0;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
assert(!(i) == not_gate(i));
|
||||
}
|
||||
return 0;
|
||||
}
|
16
Tests/Flat_c_circuits/Logic_gates/or_gate.c
Normal file
16
Tests/Flat_c_circuits/Logic_gates/or_gate.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t or_gate(uint8_t a, uint8_t b){
|
||||
return ((a >> 0) & 0x01) | ((b >> 0) & 0x01);
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
for (int j = 0; j < 2; j++){
|
||||
assert((i | j) == or_gate(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
16
Tests/Flat_c_circuits/Logic_gates/xnor_gate.c
Normal file
16
Tests/Flat_c_circuits/Logic_gates/xnor_gate.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t xnor_gate(uint8_t a, uint8_t b){
|
||||
return ~(((a >> 0) & 0x01) ^ ((b >> 0) & 0x01)) & 0x01 << 0;
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
for (int j = 0; j < 2; j++){
|
||||
assert(!(i ^ j) == xnor_gate(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
16
Tests/Flat_c_circuits/Logic_gates/xor_gate.c
Normal file
16
Tests/Flat_c_circuits/Logic_gates/xor_gate.c
Normal file
@ -0,0 +1,16 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
||||
uint8_t xor_gate(uint8_t a, uint8_t b){
|
||||
return ((a >> 0) & 0x01) ^ ((b >> 0) & 0x01);
|
||||
}
|
||||
|
||||
#include <assert.h>
|
||||
int main(){
|
||||
for (int i = 0; i < 2; i++){
|
||||
for (int j = 0; j < 2; j++){
|
||||
assert((i ^ j) == xor_gate(i,j));
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
225
Tests/flat_c_tests.sh
Normal file
225
Tests/flat_c_tests.sh
Normal file
@ -0,0 +1,225 @@
|
||||
#!/bin/sh
|
||||
POSIXLY_CORRECT=yes
|
||||
|
||||
# Colors
|
||||
# set thanks to: https://linux.101hacks.com/ps1-examples/prompt-color-using-tput/
|
||||
REDCOLOR="$(tput setaf 1)"
|
||||
GREENCOLOR="$(tput setaf 2)"
|
||||
BLUECOLOR="$(tput setaf 4)"
|
||||
NOCOLOR="$(tput sgr0)"
|
||||
|
||||
# Compiler options
|
||||
C=g++
|
||||
CFLAGS=-std=c++11 -Wextra -pedantic -g
|
||||
LG_PATH="Flat_c_circuits/Logic_gates/"
|
||||
ADD_PATH="Flat_c_circuits/Adders/"
|
||||
|
||||
# FLATTENED C CODE CIRCUITS #
|
||||
# Logic gates
|
||||
AND_G="./and_gate 2>/dev/null"
|
||||
NAND_G="./nand_gate 2>/dev/null"
|
||||
OR_G="./or_gate 2>/dev/null"
|
||||
NOR_G="./nor_gate 2>/dev/null"
|
||||
XOR_G="./xor_gate 2>/dev/null"
|
||||
XNOR_G="./xnor_gate 2>/dev/null"
|
||||
NOT_G="./not_gate 2>/dev/null"
|
||||
|
||||
# Adders
|
||||
HA="./ha 2>/dev/null"
|
||||
FA="./fa 2>/dev/null"
|
||||
|
||||
# Unsigned
|
||||
U_RCA3="./u_rca3 2>/dev/null"
|
||||
U_RCA5="./u_rca5 2>/dev/null"
|
||||
U_RCA8="./u_rca8 2>/dev/null"
|
||||
|
||||
# Signed
|
||||
S_RCA2="./s_rca2 2>/dev/null"
|
||||
S_RCA6="./s_rca6 2>/dev/null"
|
||||
S_RCA8="./s_rca8 2>/dev/null"
|
||||
|
||||
# TESTING #
|
||||
echo "${BLUECOLOR}TESTING OF FLATTENED CIRCUITS GENERATED USING arithmetic_circuits_generator.py"
|
||||
echo "––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––"
|
||||
echo ""
|
||||
echo "LOGIC GATES TESTS${NOCOLOR}"
|
||||
|
||||
|
||||
## LOGIC GATES ##
|
||||
#################
|
||||
|
||||
# AND
|
||||
${C} ${CFLAGS} ${LG_PATH}and_gate.c -o and_gate
|
||||
echo "TEST_1: and_gate.c"
|
||||
eval "$AND_G"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm and_gate
|
||||
|
||||
# NAND
|
||||
${C} ${CFLAGS} ${LG_PATH}nand_gate.c -o nand_gate
|
||||
echo "TEST_2: nand_gate.c"
|
||||
eval "$NAND_G"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm nand_gate
|
||||
|
||||
# OR
|
||||
${C} ${CFLAGS} ${LG_PATH}or_gate.c -o or_gate
|
||||
echo "TEST_3: or_gate.c"
|
||||
eval "$OR_G"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm or_gate
|
||||
|
||||
# NOR
|
||||
${C} ${CFLAGS} ${LG_PATH}nor_gate.c -o nor_gate
|
||||
echo "TEST_4: nor_gate.c"
|
||||
eval "$NOR_G"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm nor_gate
|
||||
|
||||
# XOR
|
||||
${C} ${CFLAGS} ${LG_PATH}xor_gate.c -o xor_gate
|
||||
echo "TEST_5: xor_gate.c"
|
||||
eval "$XOR_G"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm xor_gate
|
||||
|
||||
# XNOR
|
||||
${C} ${CFLAGS} ${LG_PATH}xnor_gate.c -o xnor_gate
|
||||
echo "TEST_6: xnor_gate.c"
|
||||
eval "$XNOR_G"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm xnor_gate
|
||||
|
||||
# NOT
|
||||
${C} ${CFLAGS} ${LG_PATH}not_gate.c -o not_gate
|
||||
echo "TEST_7: not_gate.c"
|
||||
eval "$NOT_G"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm not_gate
|
||||
|
||||
echo ""
|
||||
echo "${BLUECOLOR}ADDERS TESTS${NOCOLOR}"
|
||||
|
||||
|
||||
## ADDERS ##
|
||||
############
|
||||
|
||||
# HALF ADDER
|
||||
${C} ${CFLAGS} ${ADD_PATH}ha.c -o ha
|
||||
echo "TEST_8: ha.c"
|
||||
eval "$HA"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm ha
|
||||
|
||||
# FULL ADDER
|
||||
${C} ${CFLAGS} ${ADD_PATH}fa.c -o fa
|
||||
echo "TEST_9: fa.c"
|
||||
eval "$FA"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm fa
|
||||
|
||||
## UNSIGNED ADDERS ##
|
||||
|
||||
# 3-BIT RIPPLE CARRY ADDER
|
||||
${C} ${CFLAGS} ${ADD_PATH}u_rca3.c -o u_rca3
|
||||
echo "TEST_10: u_rca3.c"
|
||||
eval "$U_RCA3"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm u_rca3
|
||||
|
||||
# 5-BIT RIPPLE CARRY ADDER
|
||||
${C} ${CFLAGS} ${ADD_PATH}u_rca5.c -o u_rca5
|
||||
echo "TEST_11: u_rca5.c"
|
||||
eval "$U_RCA5"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm u_rca5
|
||||
|
||||
# 8-BIT RIPPLE CARRY ADDER
|
||||
${C} ${CFLAGS} ${ADD_PATH}u_rca8.c -o u_rca8
|
||||
echo "TEST_12: u_rca8.c"
|
||||
eval "$U_RCA8"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm u_rca8
|
||||
|
||||
## SIGNED ADDERS ##
|
||||
|
||||
# 2-BIT RIPPLE CARRY ADDER
|
||||
${C} ${CFLAGS} ${ADD_PATH}s_rca2.c -o s_rca2
|
||||
echo "TEST_13: s_rca2.c"
|
||||
eval "$S_RCA2"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm s_rca2
|
||||
|
||||
# 2-BIT RIPPLE CARRY ADDER
|
||||
${C} ${CFLAGS} ${ADD_PATH}s_rca6.c -o s_rca6
|
||||
echo "TEST_14: s_rca6.c"
|
||||
eval "$S_RCA6"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm s_rca6
|
||||
|
||||
# 8-BIT RIPPLE CARRY ADDER
|
||||
${C} ${CFLAGS} ${ADD_PATH}s_rca8.c -o s_rca8
|
||||
echo "TEST_15: s_rca8.c"
|
||||
eval "$S_RCA8"
|
||||
if [ "$?" -eq 0 ] ; then
|
||||
echo "${GREENCOLOR}PASSED${NOCOLOR}"
|
||||
else
|
||||
echo "${REDCOLOR}FAILED${NOCOLOR}"
|
||||
fi
|
||||
rm s_rca8
|
Loading…
x
Reference in New Issue
Block a user