PartB VLSI Updated
PartB VLSI Updated
`timescale 1ns/1ps
//Defining Module
module counter(clk,rst,m,count);
input clk,rst,m;
begin
if(!rst)
count=0;
if(m)
count=count+1;
else
count=count-1;
end
endmodule
Test-bench code for 4-Bit Up-Down Counter:
initial
begin
end
initial
begin
rst=0;#25;
rst=1;
#500 m=0;
end
initial
endmodule
Source Code - fa.v :-
input A,B,CIN;
output S,COUT;
assign S = A^B^CIN;
endmodule
fa_4bit.v :-
module four_bit_adder(A,B,C0,S,C4);
input [3:0] A;
input [3:0] B;
input C0;
output [3:0] S;
output C4;
wire C1,C2,C3;
endmodule
Test Bench
fa_test.v :-
module test_4_bit;
reg [3:0] A;
reg [3:0] B;
reg C0;
wire [3:0] S;
wire C4;
four_bit_adder dut(A,B,C0,S,C4);
initial
begin
end
initial
#50 $finish;
endmodule
32-Bit ALU
module alu_32bit_case(y,a,b,f);
input [31:0]a;
input [31:0]b;
input [2:0]f;
always@(*)
begin
case(f)
3'b100:y=a+b; //Addition
3'b101:y=a-b; //Subtraction
3'b110:y=a*b; //Multiply
3'b111:y=~a;
default:y=32'bx;
endcase
end
endmodule
Source Code - Using If Statement :
module alu_32bit_if(y,a,b,f);
input [31:0]a;
input [31:0]b;
input [2:0]f;
always@(*)
begin
if(f==3'b000)
else if (f==3'b001)
else if (f==3'b010)
y=a+b; //Addition
else if (f==3'b011)
y=a-b; //Subtraction
else if (f==3'b100)
y=a*b; //Multiply
else
y=32'bx;
end
endmodule
Test Bench :
module alu_32bit_tb_case;
reg [31:0]a;
reg [31:0]b;
reg [2:0]f;
wire [31:0]y;
alu_32bit_case test2(.y(y),.a(a),.b(b),.f(f));
initial
begin
a=32'h00000000;
b=32'hFFFFFFFF;
#10 f=3'b000;
#10 f=3'b001;
#10 f=3'b010;
#10 f=3'b100;
end
initial
#50 $finish;
endmodule