Implemented basic tests for generated flat C code circuits.

This commit is contained in:
honzastor 2021-02-09 21:02:50 +01:00
parent de127e8c46
commit f1142b51d9
17 changed files with 1080 additions and 0 deletions

1
.gitignore vendored
View File

@ -1,4 +1,5 @@
__pycache__/
.vscode
test.py
Makefile
*.c

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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;
}

View 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
View 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