module tb; logic clk=0, request=0, write_enable=0; logic [31:0] address=0, write_data=0, read_data; logic [2:0] funct3=0; logic fault; string trace_file; load_store_unit dut (.*); always #1 clk=~clk; task automatic store(input logic [31:0] addr, input logic [2:0] size, input logic [31:0] data); @(negedge clk); request=1; write_enable=1; address=addr; funct3=size; write_data=data; @(posedge clk); #1; endtask initial begin if ($value$plusargs("trace=%s", trace_file)) begin $dumpfile(trace_file); $dumpvars(0, tb); end store(0,2,32'h11223344); store(1,0,32'haa); @(negedge clk); write_enable=0; address=0; funct3=2; #1; if(read_data!==32'h1122aa44||fault)$fatal(1,"FAIL word=%h",read_data); address=1; funct3=0; #1; if(read_data!==32'hffffffaa||fault)$fatal(1,"FAIL LB=%h",read_data); funct3=4; #1; if(read_data!==32'haa||fault)$fatal(1,"FAIL LBU=%h",read_data); address=2; funct3=2; #1; if(!fault||read_data!==0)$fatal(1,"FAIL fault=%b data=%h",fault,read_data); $display("PASS task03 word=1122aa44 lb=ffffffaa lbu=000000aa fault=1"); $finish; end endmodule