write rtl description and testbench for a 4bit synchronous and loadable binary up counter.
RTL
//synchronus and loadabe up counter
module sync_up_load_counter(clk,load,rst,din,count);
parameter N=4;
input clk,rst,load;
input [N-1:0]din;
output reg [N-1:0]count;
always@(posedge clk)
begin
if(rst)
count<=0;
else if (load)
count<=din;
else
count<=count+1;
end
endmodule
Test bench
////synchronus and loadabe up counter
module sync_up_load_counter_tb();
reg rst,clk,load;
reg [3:0]din;
wire [3:0]count;
sync_up_load_counter SA(clk,load,rst,din,count);
initial
begin
clk=0;
forever #5 clk=~clk;
end
task initiaize();
begin
#5;
rst=0;
clk=0;
load=0;
din=0;
end
endtask
task reset();
begin
@(negedge clk)
rst=1'b1;
@(negedge clk)
rst=1'b0;
end
endtask
task data(input [3:0]a);
begin
@(negedge clk)
load=1;
din=a;
@(negedge clk)
load=0;
end
endtask
initial
begin
initiaize;
reset;
repeat(16)
@(negedge clk)
#5;
data(4'd4);
repeat(16)
@(negedge clk)
#5;
data(4'd17);
end
initial
$monitor("Input rst=%b,clk=%b,din=%b,load=%b Output count=%b",rst,clk,din,load,count);
initial
#500 $finish;
endmodule
Post Your doubt in mail.👇👇👇
E-Mail:-denilvaghasiya17@gmail.com
0 Comments