目录
一、减法器
减法器的实现与加法器类似,根据是否考虑借位分为半减器和全减器。
二、减法器实现
2.1 工程代码
设计2个4位数的减法器,包括全减器和半减器,同时分别采用always和assign语句来实现。
module substract( a,b,ci,co,co_half,subs_half,subs );
input [3:0] a,b;
input ci; //借位标志
output reg [3:0] subs;
output reg co; //借位输出
output co_half;
output [3:0] subs_half;
assign {co_half,subs_half}=a-b; //半器
always@(*) //全减器
begin
{co,subs}=a-b-ci;
end
endmodule
对于N位的减法,可以通过定义一个参数N,需要修改位数时,只需修改N的值即可
module substract( a,b,ci,co,co_half,subs_half,subs );
parameter N=6; //数据位宽为N,此处N为6
input [N-1:0] a,b;
input ci; //借位标志
output reg [N-1:0] subs;
output reg co; //借位输出
output co_half;
output [N-1:0] subs_half;
assign {co_half,subs_half}=a-b; //半器
always@(*) //全减器
begin
{co,subs}=a-b-ci;
end
endmodule
2.2 综合结果
对比加法器和半加器综合图,可见二者使用的资源一致,差异点为LUT的INIT值不同。