下载安装Logisim设计1bit半加器、全加器,并实现一个4位二进制补码器电路

(一)Logisim的下载与安装

1.安装Java运行环境JDK

先安装JDK软件,默认安装即可

2.下载运行Logisim

安装完JDK软件,下载Logisim运行即可)

(二) Logisim设计实现1bit半加器

1.半加器工作原理

半加器的功能是将两个一位二进制数相加。它有两个输入:1、和(S)与进位(C),两个一位二进制数的和用十进制表示即等于2_C+S。半加器的设计是通过一个异或门来产生S,一个与门来产生C实现的。半加器将两个输入加和,产生进位与和,是半加器的两个输出。半加器的输入变量叫做被加数或被加位,输出变量为和与进位。设计半加器后我们可以通过真值表进行验证,半加器真值表如下:

输入输入输出输出
ABCS
0000
1001
0101
1110

2.用Logisim设计实现半加器

如下图所示,可以通过切换输入值进行验证

(三) Logisim设计实现全加器

1.全加器工作原理

全加器与半加器的不同之处在于它还能接受一个地位进位输入信号Cin,全加器将两个一位二进制数相加,并根据接收到的进位信号,输出和、进位。全加器的三个输入信号为两个加数A、B和低位进位CIn,通常可以通过级联的方式,构成多位(如8位、16位、32位)二进制数加法器的基本部分。全加器输出和半加器类似,包括向高位的进位信号Cout和本位的和信号S,相加结果的总和用十进制表达为:Sum=2×Cout+S。同样设计完全加器后我们也可以通过真值表进行验证,全加器真值表如下:

输入输入输入输出输出
ABCinCoutS
00000
10001
01001
11010
00101
10110
01110
11111

2.用Logisim设计实现全加器

如下图所示,可以通过切换输入值进行验证

(四)用Logisim设计实现一个4位二进制数的补码器电路

1.补码原理

(1)、正数与原码相同

(2)、负数的补码,将其原码除符号外的所有位取反(0变1,1变0,符号位为1不变)后加1.同一个数字在不同的补码表示形式中是不同的。比如:10进制数值-15的二进制原码是10001111,其补码在8位二进制中是11110001,然而在16位二进制补码表示中,不足位数要用符号位补全,也就是1111111111110001.正数和负数的补码运算规则不一样,取决于输入二进制数的最高位(符号位)。

2.输入为负数的补码情况

负数的符号位为1,将后三位数字分别通过一个非门取反,补码器电路如下图所示(1011的补码为1101)

3.4位二进制数的补码情况

补码器电路如下图所示(0111的补码为0111)

在数字电路设计中,全加器是构建更复杂算术运算单元的基础。对于一个16全加器,我们可以通过模块化设计实现功能。首先,了解全加器的工作原理是必要的:它能够将两个一二进制数和一个输入相加,产生一个和输出和一个输出。在Verilog中,我们可以通过定义一个1全加器模块`adder_1bit`,然后将16个这样的模块串联起来,形成一个16全加器模块`adder_16bits`。 参考资源链接:[Verilog实现16全加器模块](https://wenku.youkuaiyun.com/doc/3insb16c8d?spm=1055.2569.3001.10343) 具体步骤如下: 1. 首先定义一个1全加器模块`adder_1bit`,它接受三个输入信号:两个一二进制数`a`和`b`,以及一个输入`ci`。它输出两个信号:和`s`和进输出`co`。 ```verilog module adder_1bit (input a, input b, input ci, output s, output co); assign s = a ^ b ^ ci; // 异或操作得到和 assign co = (a & b) | (b & ci) | (a & ci); // 与和或操作得到进 endmodule ``` 2. 接下来定义16全加器模块`adder_16bits`,它利用16个`adder_1bit`模块实现。在此模块中,我们需要将进信号正确地从低传递到高。 ```verilog module adder_16bits (input [15:0] A, input [15:0] B, input Ctr, output [15:0] S, output Co); wire [14:0] carry; // 中间进信号 // 实例化16个1全加器模块 adder_1bit A1 (.a(A[0]), .b(B[0]), .ci(Ctr), .s(S[0]), .co(carry[0])); generate genvar i; for (i = 1; i < 16; i = i + 1) begin : gen_adders adder_1bit ai ( .a(A[i]), .b(B[i]), .ci(carry[i-1]), .s(S[i]), .co(carry[i]) ); end endgenerate // 最终进输出 assign Co = carry[15]; endmodule ``` 3. 在仿真阶段,你需要编写测试模块来验证`adder_16bits`模块的功能。仿真应该包括对所有可能输入组合的测试,以确保加法正确处理进。 ```verilog module test_adder_16bits; reg [15:0] A, B; reg Ctr; wire [15:0] S; wire Co; // 实例化加法模块 adder_16bits uut ( .A(A), .B(B), .Ctr(Ctr), .S(S), .Co(Co) ); // 仿真过程 initial begin A = 16'b0; B = 16'b0; Ctr = 0; #10; // 测试所有输入组合 // 例如:A = 16'b***; B = 16'b***; Ctr = 1; #10; // ... $finish; end // 可视化输出 initial begin $monitor( 参考资源链接:[Verilog实现16全加器模块](https://wenku.youkuaiyun.com/doc/3insb16c8d?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值