Skip to main content

ALU

ALU :


Program Code :

`timescale 1ns / 1ps
module ALU74X181(M,S,A_L,B_L,CN,CN4,F_L,P_L,G_L,AEQB); input M,CN;
input [3:0]S,A_L,B_L;
output reg [3:0]F_L;
output reg CN4,P_L,G_L,AEQB;
reg [4:0]MS;
reg [3:0]F;
always@*
begin
MS<={M,S};
case(MS)
5'b00000: F_L<=A_L-1'b1;
5'b00001: F_L<=(A_L&B_L)-1'b1;
5'b00010: F_L<=(A_L&(~B_L))-1'b1;
5'b00011: F_L<=-1'b1;
5'b00100: F_L<=A_L+(A_L|(~B_L));
5'b00101: F_L<=(A_L&B_L)+(A_L|(~B_L));
5'b00110: F_L<=A_L-B_L-1'b1;
5'b00111: F_L<=A_L|(~B_L);
5'b01000: F_L<=A_L+(A_L|B_L);
5'b01001: F_L<=A_L+B_L;
5'b01010: F_L<=(A_L&(~B_L))+(A_L|B_L);
5'b01011: F_L<=A_L|B_L;
5'b01100: F_L<=A_L+A_L;
5'b01101: F_L<=(A_L&B_L)+A_L;
5'b01110: F_L<=(A_L&(~B_L))-A_L;
5'b01111: F_L<=A_L;
5'b10000: F_L<=~A_L;
5'b10001: F_L<=~(A_L&B_L);
5'b10010: F_L<=(~A_L)|(~B_L);
5'b10011: F_L<=4'b1111;
5'b10100: F_L<=(~A_L)|(~B_L);
5'b10101: F_L<=~B_L;
5'b10110: F_L<=(~A_L)^(~B_L);
5'b10111: F_L<=(A_L)|(~B_L);
5'b11000: F_L<=(~A_L)& (B_L);
5'b11001: F_L<=(A_L)^(B_L);
5'b11010: F_L<=B_L;
5'b11011: F_L<=(A_L)|(B_L);
5'b11100: F_L<=4'b0000;
5'b11101: F_L<=(A_L)&(~B_L);
5'b11110: F_L<=(A_L)&(B_L);
5'b11111: F_L<=A_L;
default: F_L<=4'bXXXX;
endcase

{CN4,F}<=(A_L+B_L)+CN;
P_L<=A_L^B_L;
G_L<=A_L&B_L;
if(A_L==B_L)
AEQB<=1'b1;
else
AEQB<=1'b0;
end
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...