DSP

[Digital IC]C语言实现硬件加法器

2019-07-13 16:26发布

// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include "pch.h" #include #include typedef unsigned char uchar; typedef struct { unsigned char sum; unsigned char carry; }ADD_Result; uchar AND(uchar a, uchar b); //2-1 与门 uchar OR(uchar a, uchar b); //2-1 或门 uchar NOT(uchar a); //1-1 非门 uchar XOR(uchar a, uchar b); //2-1 异或门 ADD_Result* ADD_Cell_1(uchar a, uchar b, uchar c); ADD_Result* ADD_Cell_8(uchar a, uchar b, uchar c); int main() { uchar a, b, c; ADD_Result* add_1_bit; ADD_Result* add_8_bit; //测试单个加法器 for (a = 0; a <= 1; a++) { for (b = 0; b <= 1; b++) { for (c = 0; c <= 1; c++) { add_1_bit = ADD_Cell_1(a, b, c); printf("%d,%d,%d:s:%d c:%d ", a, b, c, add_1_bit->sum, add_1_bit->carry); free(add_1_bit); } } } printf(" "); //测试8位加法器 //测试单个加法器 for (a = 55; a <= 80; a++) { for (b = 160; b <= 190; b++) { add_8_bit = ADD_Cell_8(a, b, 0); printf("%d,%d,%d:s:%d c:%d ", a, b, 0, add_8_bit->sum, add_8_bit->carry); free(add_8_bit); } } } ADD_Result* ADD_Cell_8(uchar a, uchar b, uchar c) { int bit_location;//0 最低位 ADD_Result* result = (ADD_Result*)malloc(sizeof(ADD_Result)); result->sum = 0; result->carry = 0; uchar c_bit = c & 0x1; for (bit_location = 0; bit_location < 8; bit_location++) { uchar a_bit = (a >> bit_location) & 0x1; uchar b_bit = (b >> bit_location) & 0x1; //计算一位加法 ADD_Result* result_1_bit; result_1_bit = ADD_Cell_1(a_bit, b_bit, c_bit); //累加到8位加法中 result->sum |= result_1_bit->sum << bit_location; c_bit = result_1_bit->carry; //释放一位加法结果 free(result_1_bit); } result->carry = c_bit; return result; } //一位加法器 ADD_Result* ADD_Cell_1(uchar a, uchar b, uchar c) { ADD_Result* result = (ADD_Result*)malloc(sizeof(ADD_Result)); //输出 result->sum = XOR(XOR(a,b),c); result->carry = OR(AND(b,c),AND(a,XOR(b,c))); return result; } //与门 uchar AND(uchar a, uchar b) { a = a & 0x1; b = b & 0x1; return (a & b); } //或门 uchar OR(uchar a, uchar b) { a = a & 0x1; b = b & 0x1; return (a | b); } //非门 uchar NOT(uchar a) { a = ~a & 0x1; return a; } //异或门 uchar XOR(uchar a, uchar b) { a = a & 0x1; b = b & 0x1; uchar c = OR(AND(NOT(a),b),AND(NOT(b),a)); return c; } // 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单 // 调试程序: F5 或调试 >“开始调试”菜单 // 入门提示: // 1. 使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4. 使用错误列表窗口查看错误 // 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目 // 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件