文章目录
10.1 加法器
10.1.1 1位半加器
半加器电路是指对两个输入数据位A,B相加,输出结果位F和进位C0,没有进位输入。
S=A*~B + ~AB=A^B
C0=AB
10.1.2 1位全加器
即:全加器和Sum=Xi*~Ci + Yi*~Ci + Ci-1*~Ci + XiYiCi-1
全加器进位Ci =三者两两相与之和,XiYi+XiCi-1+Yi*Ci-1
10.1.3 4位全加器
在进行加法运算时,首先准备好的是1号全加器的3个input。而2、3、4号全加器的Cin分别来自前一个全加器的Cout。只有等到1号全加器运算完毕,2、3、4号全加器才能依次进行进位运算,最终得到结果。 这样进位输出,像波浪一样,依次从低位到高位传递, 最终产生结果的加法器,也因此得名为行波进位加法器(Ripple-Carry Adder,RCA)
高位的运算必须等待低位的运算完成, 这样造成了整个加法器的延迟时间很长。
超前进位加法器
最终我们需要得到的是C4,经过换算,
C4=G3+P3·G2+P3·P2·G1+P3·P2·P1·G0+P3·P2·P1·P0·C0
所有的进位输出都是3个门延时得出,
而这些参数,全部已知,并不需要前一个全加器运算输出,由此得到了提前计算进位输出的方法, 用这样的方法实现了加法器就被称为超前进位加法器(Carry-Lookahead Adder,CLA)。
p142 10.1 加法器
/******************************p142 10.1 加法器********************************/
module 16adder(A,B,C,sum);
input [15:0] A,B;
input C;
output [15:0] sum;
assign {C,sum}=A+B;
endmodule
10.2 乘法器
X=Xn-1Xn-2…X1X0
Y=Yn-1Yn-2…Y1Y0
XY的乘积有2n位,YiX称为部分积Pi,YiXi用一个与门可以实现,记做Pi,j=YjXi。
乘法单元:MU,由一个与门和一个1位全加器组成,全加器延时为3个门延时,再加上与门的一个门延时,故每个MU延时为4个门延时。
10.2.1 逐位进位并行乘法器
第一行的每个MU用一个与门就可实现
每一行最右边的MU用一个与门和一个半加器(进位为0)就可实现
最长延时路径:1与门+8MU=33门延时
10.2.2 进位节省乘法器
这里不明白为什么要5个门延时???不是3个吗???
https://zhuanlan.zhihu.com/p/92596935
这篇帖子是乘法器集大成,可以多看看。
10.3 比较器
10.4 多路器
10.5 总线操作
p148 10.6 三态数据总线开关逻辑
/******************************p148 10.6 三态数据总线开关逻辑********************************/
module 3Bus(DataBus,link_bus,write);
input link_bus,write;
inout [11:0] DataBus; //12位的数据总线双向端口
reg [11:0] outsigs; //模块内的12位数据寄存器
reg [13:0] insigs; //乘3后的14位数据寄存器
assign DataBus = (link_bus)?outsigs:12'hzzz; //当link_bus位高,将outsigs送入数据总线DataBus
always@(posedge write) begin
insigs <= DataBus*3; //当写信号到来,将DataBus作为输入,送入乘法器,继而送入insigs
end
endmodule
10.6 流水线
略