TB Memory
TB Memory
module tb_memory;
reg clk_i=0 ;
// rd port
reg [$clog2(DEPTH)-1:0] rd_addr=0;
wire[WIDTH-1: 0] rd_data;
localparam T=10;
//clock generator
always #(T/2) clk_i =~clk_i;
integer i=0;
// module INST
memory U_MEM (
.clk_i (clk_i ),
.wr_en (wr_en ),
.wr_addr (wr_addr),
.wr_data (wr_data),
.rd_addr (rd_addr),
.rd_data (rd_data)
);
task wr_tx(
input [WIDTH-1:0] w_addr,
input [WIDTH-1:0] w_data
);
begin
$display ("-------------------- WR TRANSACTION--------------");
$display ("Writing addr=%h with data = %h",w_addr, w_data);
@(negedge clk_i);
wr_en = 1'b1;
wr_data = w_data;
wr_addr = w_addr;
@(negedge clk_i);
wr_en = 1'b0;
end
endtask
task rd_tx(
input [$clog2(DEPTH)-1:0] r_addr,
output [WIDTH-1:0] r_data);
begin
$display ("-------------------- RD TRANSACTION--------------");
//$display ("Reading address = %h", r_addr);
@(negedge clk_i);
rd_addr = r_addr;
@(posedge clk_i); // latched address here and outputs data on next pos edge
@(posedge clk_i);
r_data = rd_data;
$display ("Reading address = %h read data = %h", r_addr,r_data);
end
endtask
integer mem_addr = 0;
initial begin
$dumpfile ("waveform.vcd");
//$monitor ("wr_addr=%h wr_data =%h rd_addr=%h rd_data=
%h",wr_addr,wr_data,rd_addr,rd_data);
$dumpvars (0,tb_memory);
@(posedge clk_i);
rd_tx(mem_addr,tmp_rd_data);
//$display ("Read data =%h",tmp_rd_data);
end
#100;
$finish;
end
endmodule