`timescale 1 ps / 100 fs /* The verilog file containing your register file must * be named "regfile.v". */ `include "regfile.v" module RegFileStimulus(); parameter ClockDelay = 50000; reg [4:0] ReadRegister1, ReadRegister2, WriteRegister; reg [31:0] WriteData; reg RegWrite, clk; wire [31:0] ReadData1, ReadData2; integer i; /* Your register file MUST be named "regfile". * Also you must make sure that the port declarations * match up with the module instance in this stimulus file. */ regfile reg1(ReadData1, ReadData2, WriteData, ReadRegister1, ReadRegister2, WriteRegister, RegWrite, clk); initial clk = 0; always #(ClockDelay/2) clk = ~clk; initial begin $monitor($time, {" ReadData1 = %h, ReadData2 = %h, WriteData = %h,", " WriteReg = %b, Reg1 = %h, Reg2 = %h, RegWrite = %b,", "clk = %b"}, ReadData1, ReadData2, WriteData, WriteRegister, ReadRegister1, ReadRegister2, RegWrite, clk); #(ClockDelay/4); /* Make all changes away from the clock edges */ /* Try to write the value 0xA0 into register 0. * Register 0 should begin and remain at the value of 0. */ RegWrite = 0; ReadRegister1 = 0; ReadRegister2 = 0; WriteRegister = 0; WriteData = 32'hA0; #(ClockDelay); RegWrite = 1; #(ClockDelay); // Write a value into each register. for (i = 1; i < 32; i = i + 1) begin RegWrite = 0; ReadRegister1 = i - 1; ReadRegister2 = i; WriteRegister = i; WriteData = i * 32'h01020408; #(ClockDelay); RegWrite = 1; #(ClockDelay); end // Go back and verify that the registers // retained the data. for (i = 0; i < 32; i = i + 1) begin RegWrite = 0; ReadRegister1 = i - 1; ReadRegister2 = i; WriteRegister = i; WriteData = i * 32'h100+i; #(ClockDelay); #(ClockDelay); end $finish; end endmodule