[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 文件
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮