module myram(data,addr,clk,reset,wr_en,cs);
input clk,reset,wr_en,cs;
input [8:0]addr;
inout [7:0]data;
reg [7:0] temp;
reg [7:0] mymem [511:0];
integer i;
always @(posedge clk or negedge reset)
begin
if(!reset)
begin
for(i=0;i<512;i=i+1)
mymem[i]<=0;
end
elseif((cs==1'b1) &&(wr_en==1'b1))
begin
mymem[addr]<= data;
end
elseif((cs==1'b1) &&(wr_en==1'b0))
begin
temp<=mymem[addr];
end
else
temp<=8'bzz;
end
assign data=wr_en?8'bzz:temp;
endmodule
module myram_test;
reg reset_t,wr_en_t,cs_t,clk_t;
wire [7:0]data_t;
reg [7:0]temp_t;
reg [8:0]addr_t;
integer i;
myram myram(.data(data_t),.addr(addr_t),.clk(clk_t),.reset(reset_t),.wr_en(wr_en_t),.cs(cs_t));
initial
begin
reset_t=1;
wr_en_t=0;
cs_t=0;
clk_t=0;
temp_t=0;
#5
reset_t=0;
#5
reset_t=1;
#5
cs_t=1;
wr_en_t=1;for(i =0; i <256; i = i +1)
begin
@(posedge clk_t)
begin
addr_t = i;
temp_t =i;
end
end
#50
wr_en_t=0;
addr_t=0;for(i =0; i <256; i = i +1)
begin
@(posedge clk_t)
addr_t = i;
end
end
always #5 clk_t=~clk_t;
assign data_t=wr_en_t?8'bzz:temp_t;
endmodule
module myrom(data,addr,clk,reset,wr_en,cs);
input clk,reset,wr_en,cs;
input [8:0]addr;
output [7:0]data;
reg [7:0] data;
reg [7:0] mymem [511:0];
integer i;
always @(posedge clk or negedge reset)
begin
if(!reset)
begin
for(i=0;i<511;i=i+1)
mymem[i]<= i;
end
elseif((cs==1'b1) &&(wr_en==1'b0))
begin
data<=mymem[addr];
end
else
data<=8'bzz;
end
//assign data=temp;
endmodule
module myrom_test;
reg reset_t,wr_en_t,cs_t,clk_t;
wire [7:0]data_t;
reg [8:0]addr_t;
integer i;
myrom myrom(.data(data_t),.addr(addr_t),.clk(clk_t),.reset(reset_t),.wr_en(wr_en_t),.cs(cs_t));
initial
begin
reset_t=1;
wr_en_t=0;
cs_t=0;
clk_t=0;
#5
reset_t=0;
#5
reset_t=1;
cs_t=1;
wr_en_t=0;
addr_t=0;for(i =0; i <256; i = i +1)
begin
@(posedge clk_t)
begin
addr_t = i;
end
end
end
always #5 clk_t=~clk_t;
endmodule