Lab 4
Lab 4
output dout ;
reg dout;
input din ;
input clk ;
input reset ;
begin
if (reset)
dout <= 1;
else
end
endmodule
//testbench
module dff_test;
reg D, clk,reset;
wire Q, QBAR;
initial begin
clk=0;
end
initial begin
reset=1; D <= 0;
#100; D <= 0;
#100; D <= 1;
end
endmodule
2.Write structural model for T flip flop using D flip flop.
DFF:
output dout ;
reg dout;
input din ;
input clk ;
input reset ;
begin
if (reset)
dout <= 1;
else
end
endmodule
TFF:
output q,qb ;
input t ;
input clk ;
input reset ;
wire ip;
wire op;
assign ip = t ^ op;
.clk(clk),
.reset(reset),
.dout(op));
assign q = op;
assign qb = ~q;
endmodule
//TESTBENCH
module tff_tb;
reg T;
reg Clk;
wire Q;
wire Qbar;
tff DUT (
.ip(T),
.clk(Clk),
.q(Q),
.qb(Qbar)
);
initial begin
Clk=0;
end
initial begin
T <= 0;
#100; T <= 1;
#100; T <= 0;
#100; T <= 1;
end
endmodule
3. Write RTL description for 4 bit loadable up counter and verify using testbench.
input rstn,
if (! rstn)
out <= 0;
else
end
endmodule
//TESTBENCH
module upcounter_tb;
reg clk;
reg rstn;
.rstn (rstn),
.out (out));
initial begin
clk <= 0;
rstn <= 0;
#20 $finish;
end
endmodule
4.Write RTL description for JK flip flop using parameter declaration for the respective scenarios
HOLD, SET, RESET, TOOGLE.
begin
if(rst)
q<= 1'b0;
else
begin
case({j,k})
HOLD: q<= q;
SET: q<=1'b1;
default :q<= 0;
endcase
end
end
assign qb = ~q;
endmodule
//TESTBENCH
module jt_tb;
reg clk,rst,j,k;
wire q,qb;
jk DUT(clk,rst,j,k,q,qb);
initial begin
clk=1'b0;
end
task rest;
begin
@(negedge clk)
rst=1'b1;
@(negedge clk)
rst=1'b0;
end
endtask
begin
@(negedge clk)
j=m;
k=n;
end
endtask
initial begin
rest;
jk_inputs(1'b0,1'b0);
jk_inputs(1'b0,1'b1);
jk_inputs(1'b1,1'b0);
jk_inputs(1'b1,1'b1);
end
endmodule
5.Implement SR latch in gate level modelling and verify using test bench.
output Q;
output Qn;
input G;
input S;
input R;
wire S1;
wire R1;
and(S1, G, S);
and(R1, G, R);
endmodule
//TESTBENCH
module sr_latch_tb;
reg p,q,r;
sr_latch DUT(.S(p),.R(q),.G(r));
initial begin
p = 1;
q = 1;
r = 1;
#100 p = 0;
#100 p = 1;
#100 q = 0;
#100 q = 1;
#100 p = 0;
q = 0;
#100 p = 1;
q = 1;
#100 p = 0;
q = 0;
#100 ;
end
endmodule
6. Write RTL description for 4 bit MOD 12 loadable binary up counter and verify using testbench.
module MOD_12_up(out,rst,clk);
output [3:0]out;
input rst,clk;
reg [3:0]out;
begin
if(rst|out==4'b1011)
out<=4'b0000;
else
out<=out+1;
end
endmodule
//TESTBENCH
module mod_12_up_tb;
reg clk;
reg rst;
.rst (rst),
.out (out));
initial begin
clk <= 0;
rst <= 0;
end
endmodule
7. Write RTL description for 4 bit loadable binary synchronous up/down counter and verify using
testbench.
module up_dwn_cntr(
Clk,
reset,
UpOrDown,
Count
);
input Clk,reset,UpOrDown;
output [3 : 0] Count;
reg [3 : 0] Count = 0;
begin
if(reset == 1)
Count <= 0;
else
if(UpOrDown == 1)
if(Count == 15)
Count <= 0;
else
else
if(Count == 0)
else
end
endmodule
//TESTBENCH
module up_dwn_cntr_tb;
reg Clk;
reg reset;
reg UpOrDown;
up_dwn_cntr DUT (
.Clk(Clk),
.reset(reset),
.UpOrDown(UpOrDown),
.Count(Count)
);
initial Clk = 0;
initial begin
reset = 0;
UpOrDown = 0;
#300;
UpOrDown = 1;
#300;
reset = 1;
UpOrDown = 0;
#100;
reset = 0;
end
endmodule
8. Write RTL description for 4 bit SISO and verify using testbench.
module siso(clk,i,so);
input clk,i;
output so;
begin
temp = temp>>1;
temp[0] =i;
end
assign so = temp[7];
endmodule
//TESTBENCH
module siso_tb;
reg clk,i;
wire s0;
initial
begin
clk = 1'b0;
end
task rst;
begin
i=0;
end
endtask
task inputs(input m);
begin
i=m;
end
endtask
initial
begin
rst;
inputs(1);
#10;
inputs(0);
#10;
inputs(1);
#10;
inputs(1);
#10;
end
endmodule