Vlsi Programs (Ag, CNTRS)
Vlsi Programs (Ag, CNTRS)
module allgates(a,b,y);
input a,b;
output [0:6] y;
assign y[0]=~a;
assign y[1]=a&b;
assign y[2]=~(a&b);
assign y[3]=a|b;
assign y[4]=~(a|b);
assign y[5]=a^b;
assign y[6]=~(a^b);
endmodule
Test
module allgates_test;
reg a,b;
wire [0:6] y;
allgates uut(.a(a),.b(b),.y(y));
initial
begin
a=1'b0;b=1'b0;#100;
a=1'b0;b=1'b1;#200;
a=1'b1;b=1'b0;#300;
a=1'b1;b=1'b1;#400;
end
endmodule
Up down counters
module aupdown(rst,clk,en,up_down,q);
input rst,clk,en,up_down;
output [3:0] q;
reg[3:0]q;
begin
if (rst==1)
q<= 4'b0000;
else if (en== 1)
begin
if (up_down==1)
q<=q+1;
else
begin
q<=q-1;
end
end
else
q <= 4'b0000;
end
endmodule
Test bench
module test;
reg rst,clk,en,up_down;
wire [3:0] q;
initial
begin
clk= 1'b0;
end
initial
begin
rst = 1'b1;#300;
rst = 1'b0;
en = 1'b1;
up_down = 1'b1;#3300;
up_down = 1'b0;#6600;
end
endmodule