Files
lab-rv32i-asm-decoder/tests/task02_opcode_decoder_tb.sv
T

23 lines
1.1 KiB
Systemverilog

module tb;
logic [6:0] opcode;
logic alu_imm, alu_reg, load, store, branch, jump, illegal;
integer legal = 0;
string trace_file;
opcode_decoder dut (.*);
task automatic check_opcode(input logic [6:0] value, input logic [5:0] selected);
opcode = value; #1;
if ({jump, branch, store, load, alu_reg, alu_imm} != selected || illegal)
$fatal(1, "FAIL task02 opcode=%h selected=%b illegal=%b", opcode, {jump, branch, store, load, alu_reg, alu_imm}, illegal);
legal += 1;
endtask
initial begin
if ($value$plusargs("trace=%s", trace_file)) begin $dumpfile(trace_file); $dumpvars(0, tb); end
check_opcode(7'h13, 6'b000001); check_opcode(7'h33, 6'b000010); check_opcode(7'h03, 6'b000100);
check_opcode(7'h23, 6'b001000); check_opcode(7'h63, 6'b010000); check_opcode(7'h6f, 6'b100000); check_opcode(7'h67, 6'b100000);
opcode = 7'h7f; #1;
if (!illegal || {jump, branch, store, load, alu_reg, alu_imm} != 0) $fatal(1, "FAIL task02 illegal default");
$display("PASS task02 legal=%0d jump_opcodes=6f,67 illegal_7f=1", legal);
$finish;
end
endmodule