25 lines
1.2 KiB
Systemverilog
25 lines
1.2 KiB
Systemverilog
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
|