Skip to main content

Subtractors

Half Subtractor and Full Subtractor : 




(a) Dataflow modelling

`timescale 1ns / 1ps
module half_subtractor_dataflow(a,b,d,bo);
input a,b;
output d,bo;
assign d=a^(~b);
assign bo=(a&(~b));
endmodule

(b) Behavioral Modeling

`timescale 1ns / 1ps
module half_subtractor_behav(a,b,d,bo);
input a,b;
output reg d,bo;

reg [1:0]d1;
reg [1:0]s1;
always@*
begin
d1[0]<=b;
d1[1]<=a;
case(d1)
2'b00: s1<=2'b00;
2'b01: s1<=2'b11;
2'b10: s1<=2'b10;
2'b11: s1<=2'b00;
default: s1<=2'b00;
endcase
d<=s1[1];
bo<=s1[0];
end
endmodule

(c) Structural Modeling

`timescale 1ns / 1ps
module half_subtractor_struct(a,b,d,bo);
input a,b;
output d,bo;
xor21 u1(a,b,d);
not1 u2(b,b1);
and21 u3(a,b1,bo);
endmodule
module not1(a,y);
input a;
output y;
assign y=~a;
endmodule
module and21(a,b,y);
input a,b;
output y;
assign y=a&b;
endmodule
module xor21(a,b,y);
input a,b;
output y;
assign y=a^b;
endmodule

(ii) Full Subtractor (Structural Modeling)

`timescale 1ns / 1ps
module full_subtractor_struct(a,b,bin,d,bo);
input a,b,bin;
output d,bo;
wire c1,c2,c3;
half_subtractor_behav u1(a,b,c1,c2);
half_subtractor_behav u2(c1,bin,d,c3);
or21 u3(c2,c3,bo);

endmodule
module or21(a,b,y);
input a,b;
output y;
assign y=a|b;
endmodule


Comments

Popular posts from this blog

Full Adder Using Multiplexer

Full Adder can be implemented by using mux .... These are the possible ways to do that !

Multiplexer and Demultiplexer

Multiplexer :  74 151  `timescale 1ns / 1ps module mux_74x151(EN_L, S, D, Y); input EN_L; input [2:0]S; input [7:0]D; output reg Y; reg y1; always@* begin case(S) 3'b000: y1<=D[0]; 3'b001: y1<=D[1]; 3'b010: y1<=D[2]; 3'b011: y1<=D[3]; 3'b100: y1<=D[4]; 3'b101: y1<=D[5]; 3'b110: y1<=D[6]; 3'b111: y1<=D[7]; default: y1<=1'b0; endcase if(EN_L==1'b0) Y<=y1; else Y<=1'b0; end endmodule Demultiplexer : 74 155 `timescale 1ns / 1ps module demux_74x155(ea,eab,ebb1,ebb2,A,outa,outb); input ea,eab,ebb1,ebb2; input [1:0]A; output reg [3:0]outa,outb; reg [3:0] y1; always@* begin case(A) 2'b00: y1<=4'b0111; 2'b01: y1<=4'b1011; 2'b10: y1<=4'b1101; 2'b11: y1<=4'b1110; default: y1<=4'b1111; endcase if(ea==1'b1 & eab==1'b0) outa <=y1; else outa <=4'b1111; if(ebb1==1'b0 & ebb2==1'b0) outb <=y1; else out...