Lab2_test_ram.v 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. `timescale 1ns/100fs
  2. module test_ram;
  3. reg [5:0] Addr;
  4. reg [7:0] I;
  5. reg WEB,OEB,CEB,clk;
  6. wire [7:0] O;
  7. integer i,j,outfile,pat_error;
  8. HSs13n_512x8 my_ram(.A(Addr),
  9. .D(I),
  10. .CLK(~clk),
  11. .CEN(CEB),
  12. .WEN(WEB),
  13. .Q(O) );
  14. always #10 clk=~clk; //cycle time is 20ns
  15. initial begin
  16. $fsdbDumpfile("Lab2_ram.fsdb");
  17. $fsdbDumpvars;
  18. outfile=$fopen("ram_out.txt"); //open one file for writing
  19. if(!outfile) begin
  20. $display("Can not write file!");
  21. $finish;
  22. end
  23. pat_error=0;
  24. clk=1'b1;CEB=1'b1;WEB=1'b1;OEB=1'b0;I=0;Addr=0;
  25. #5 // Memory Write
  26. for(i=0;i<64;i=i+1)
  27. begin
  28. CEB=1'b0;WEB=1'b0;OEB=1'b0;Addr=i[5:0];
  29. j=i*i;
  30. I=j[7:0];
  31. #20 ;
  32. end
  33. // Memory Read
  34. for(i=0;i<64;i=i+1)
  35. begin
  36. CEB=1'b0;WEB=1'b1;OEB=1'b0;Addr=i[5:0];
  37. #20 j=i*i;
  38. if(O[7:0] !== j[7:0])
  39. begin
  40. $fdisplay(outfile,"Memory content of Address %b should be %b. But your output is %b.",Addr,j[7:0],O);
  41. pat_error=pat_error+1;
  42. end
  43. end
  44. if(!pat_error)
  45. $display("\nCongratulations!! Your RAM Controller is correct!!\n");
  46. else
  47. $display("\nYour RAM Controller has %d errors. \nPlease read ram_out.txt for details.\n",pat_error);
  48. #10 $finish;
  49. end
  50. endmodule