VL12 4bit超前进位加法器电路

VL12 4bit超前进位加法器电路

预备知识

  1. 行波进位加法器
    在这里插入图片描述
    可以看出,这是个串行结构。
    高位的计算结果需要低级进位,也就是,低位没有计算出进位,高位就无法计算,得等待。
  2. 并行进位加法器

计算逻辑:
在这里插入图片描述
核心思想
把 C1~C4 全部用原始输入(A, B, Cin)直接表示出来,不依赖中间进位!
在这里插入图片描述
得到:
在这里插入图片描述
但是硬件代价增大,需要更多的逻辑门,比如C4的计算电路如下:
在这里插入图片描述
题目要求
在这里插入图片描述

思路一:

`timescale 1ns/1ns

module lca_4(
	input		[3:0]       A_in  ,
	input	    [3:0]		B_in  ,
    input                   C_1   ,
 
 	output	 wire			CO    ,
	output   wire [3:0]	    S
);
    wire [2:0] c;
	assign c0 = A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 ;
	assign c1 = A_in[1]&B_in[1] | A_in[1]^B_in[1] & (A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 );
	assign c2 = A_in[2]&B_in[2] | A_in[2]^B_in[2] & (A_in[1]&B_in[1] | A_in[1]^B_in[1] & (A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 ));
	assign CO = A_in[3]&B_in[3] | A_in[3]^B_in[3] & (A_in[2]&B_in[2] | A_in[2]^B_in[2] & (A_in[1]&B_in[1] | A_in[1]^B_in[1] & (A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 )));
	assign S[0] = A_in[0]^B_in[0]^C_1;
	assign S[1] = A_in[1]^B_in[1]^(A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1);
	assign S[2] = A_in[2]^B_in[2]^ (A_in[1]&B_in[1] | A_in[1]^B_in[1] & (A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 ));
	assign S[3] = A_in[3]^B_in[3]^(A_in[2]&B_in[2] | A_in[2]^B_in[2] & (A_in[1]&B_in[1] | A_in[1]^B_in[1] & (A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 ))) ;

endmodule

思路二:

`timescale 1ns/1ns

module lca_4(
    input  [3:0] A_in,
    input  [3:0] B_in,
    input        C_1,
    output       CO,
    output [3:0] S
);

    wire [3:0] G = A_in & B_in;
    wire [3:0] P = A_in ^ B_in;

    wire c0 = C_1;
    wire c1 = G[0] | (P[0] & c0);
    wire c2 = G[1] | (P[1] & G[0]) | (P[1] & P[0] & c0);
    wire c3 = G[2] | (P[2] & G[1]) | (P[2] & P[1] & G[0]) | (P[2] & P[1] & P[0] & c0);
    wire c4 = G[3] | (P[3] & G[2]) | (P[3] & P[2] & G[1]) | (P[3] & P[2] & P[1] & G[0]) | (P[3] & P[2] & P[1] & P[0] & c0);

    assign S = P ^ {c3, c2, c1, c0};
    assign CO = c4;

endmodule

请思考问题:思路一、思路二哪个是并行计算?
答案:思路二

比较分析:
思路一是按照在这里插入图片描述
展开写的。但是这并不是并行计算,虽然看似像,但不是。
因为
每一步都依赖上一步的输出,高位必须等待低位计算完成。
看代码:

assign c0 = A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 ;
assign c1 = A_in[1]&B_in[1] | A_in[1]^B_in[1] & (A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 );

这种展开的嵌套写法就像g(m(f(x))),
要先计算最内层的f(x)
同样,
计算c1,要先计算括号部分:(A_in[0]&B_in[0] | A_in[0]^B_in[0] & C_1 )
括号部分就是c0。
所以,这不是并行逻辑。
我们说过:
并行的核心:把 C1~C4 全部用原始输入(A, B, Cin)直接表示出来,不依赖中间进位!
思路二是真正的并行计算,只用到P、G、c0

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值