Update to fix testbench for bls12 coprocessor
This commit is contained in:
parent
1047ca1616
commit
f8d4341a68
Binary file not shown.
|
@ -393,12 +393,12 @@ task get_next_inst();
|
||||||
if(inst_ram_read == 0) begin
|
if(inst_ram_read == 0) begin
|
||||||
inst_ram_sys_if.a <= new_inst_pt_val_l ? new_inst_pt : inst_state == NOOP_WAIT ? inst_ram_sys_if.a : inst_ram_sys_if.a + 1;
|
inst_ram_sys_if.a <= new_inst_pt_val_l ? new_inst_pt : inst_state == NOOP_WAIT ? inst_ram_sys_if.a : inst_ram_sys_if.a + 1;
|
||||||
inst_ram_read[0] <= 1;
|
inst_ram_read[0] <= 1;
|
||||||
|
if (new_inst_pt_val_l) new_inst_pt_val_l <= 0;
|
||||||
end
|
end
|
||||||
if (inst_ram_read[READ_CYCLE]) begin
|
if (inst_ram_read[READ_CYCLE]) begin
|
||||||
inst_state <= curr_inst.code;
|
inst_state <= curr_inst.code;
|
||||||
cnt <= 0;
|
cnt <= 0;
|
||||||
end
|
end
|
||||||
new_inst_pt_val_l <= 0;
|
|
||||||
endtask
|
endtask
|
||||||
|
|
||||||
task task_copy_reg();
|
task task_copy_reg();
|
||||||
|
@ -575,6 +575,7 @@ task task_send_interrupt();
|
||||||
case(cnt) inside
|
case(cnt) inside
|
||||||
// Load the data
|
// Load the data
|
||||||
0: begin
|
0: begin
|
||||||
|
interrupt_in_if.eop <= 0;
|
||||||
data_ram_sys_if.a <= curr_inst.a;
|
data_ram_sys_if.a <= curr_inst.a;
|
||||||
if (interrupt_state != WAIT_FIFO) begin
|
if (interrupt_state != WAIT_FIFO) begin
|
||||||
// Wait here
|
// Wait here
|
||||||
|
@ -601,10 +602,10 @@ task task_send_interrupt();
|
||||||
if (data_ram_read[READ_CYCLE]) begin
|
if (data_ram_read[READ_CYCLE]) begin
|
||||||
pt_size <= pt_size - 1;
|
pt_size <= pt_size - 1;
|
||||||
interrupt_in_if.dat <= curr_data.dat;
|
interrupt_in_if.dat <= curr_data.dat;
|
||||||
if (pt_size == 1) interrupt_in_if.eop <= 1;
|
|
||||||
interrupt_in_if.val <= 1;
|
interrupt_in_if.val <= 1;
|
||||||
data_ram_sys_if.a <= data_ram_sys_if.a + 1;
|
data_ram_sys_if.a <= data_ram_sys_if.a + 1;
|
||||||
if (pt_size == 1) begin
|
if (pt_size == 1) begin
|
||||||
|
interrupt_in_if.eop <= 1;
|
||||||
cnt <= cnt + 1;
|
cnt <= cnt + 1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -133,7 +133,90 @@ begin
|
||||||
end
|
end
|
||||||
endtask;
|
endtask;
|
||||||
|
|
||||||
|
task test_fp2_point_mult();
|
||||||
|
begin
|
||||||
|
integer signed get_len;
|
||||||
|
logic [common_pkg::MAX_SIM_BYTS*8-1:0] get_dat;
|
||||||
|
inst_t inst;
|
||||||
|
logic failed;
|
||||||
|
data_t data;
|
||||||
|
logic [31:0] rdata;
|
||||||
|
fp2_jb_point_t out_p, exp_p;
|
||||||
|
logic [DAT_BITS-1:0] in_k;
|
||||||
|
bls12_381_interrupt_rpl_t interrupt_rpl;
|
||||||
|
|
||||||
|
failed = 0;
|
||||||
|
in_k = 381'h33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333;
|
||||||
|
exp_p = fp2_point_mult(in_k, g2_point);
|
||||||
|
$display("Running test_fp2_point_mult...");
|
||||||
|
|
||||||
|
// See what current instruction pointer is
|
||||||
|
axi_lite_if.peek(.addr(32'h10), .data(rdata));
|
||||||
|
|
||||||
|
data = '{dat:in_k, pt:SCALAR};
|
||||||
|
axi_lite_if.put_data_multiple(.data(data), .addr(DATA_AXIL_START + 64), .len(48)); // Scalar to multiply by goes in data slot 1
|
||||||
|
|
||||||
|
inst = '{code:SEND_INTERRUPT, a:16'd3, b:16'habcd, c:16'd0};
|
||||||
|
axi_lite_if.put_data_multiple(.data(inst), .addr(INST_AXIL_START + (rdata+1)*8), .len(8));
|
||||||
|
|
||||||
|
// Write to current slot to start
|
||||||
|
inst = '{code:FP2_FPOINT_MULT, a:16'd1, b:16'd3, c:16'd0};
|
||||||
|
axi_lite_if.put_data_multiple(.data(inst), .addr(INST_AXIL_START + (rdata)*8), .len(8));
|
||||||
|
|
||||||
|
fork
|
||||||
|
begin
|
||||||
|
out_if.get_stream(get_dat, get_len, 0);
|
||||||
|
interrupt_rpl = get_dat;
|
||||||
|
|
||||||
|
assert(interrupt_rpl.hdr.cmd == BLS12_381_INTERRUPT_RPL) else $fatal(1, "ERROR: Received non-interrupt message");
|
||||||
|
assert(interrupt_rpl.index == 16'habcd) else $fatal(1, "ERROR: Received wrong index value in message");
|
||||||
|
assert(interrupt_rpl.data_type == FP2_JB) else $fatal(1, "ERROR: Received wrong data type value in message");
|
||||||
|
|
||||||
|
get_dat = get_dat >> $bits(bls12_381_interrupt_rpl_t);
|
||||||
|
|
||||||
|
for (int i = 0; i < 6; i++)
|
||||||
|
out_p[i*381 +: 381] = get_dat[i*(48*8) +: 381];
|
||||||
|
|
||||||
|
if (out_p == exp_p) begin
|
||||||
|
$display("INFO: Output point matched expected:");
|
||||||
|
print_fp2_jb_point(out_p);
|
||||||
|
end else begin
|
||||||
|
$display("ERROR: Output point did NOT match expected:");
|
||||||
|
print_fp2_jb_point(out_p);
|
||||||
|
$display("Expected:");
|
||||||
|
print_fp2_jb_point(exp_p);
|
||||||
|
failed = 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
|
begin
|
||||||
|
repeat(100000) @(posedge out_if.i_clk);
|
||||||
|
$fatal("ERROR: Timeout while waiting for result");
|
||||||
|
end
|
||||||
|
join_any
|
||||||
|
disable fork;
|
||||||
|
|
||||||
|
axi_lite_if.peek(.addr(32'h14), .data(rdata));
|
||||||
|
$display("INFO: Last cycle count was %d", rdata);
|
||||||
|
|
||||||
|
// See what current instruction pointer is
|
||||||
|
axi_lite_if.peek(.addr(32'h10), .data(rdata));
|
||||||
|
|
||||||
|
$display("INFO: Current instruction pointer is 0x%x, setting to 0 and writing NULL instruction", rdata);
|
||||||
|
|
||||||
|
inst = '{code:NOOP_WAIT, a:16'd0, b:16'h0, c:16'd0};
|
||||||
|
axi_lite_if.put_data_multiple(.data(inst), .addr(INST_AXIL_START), .len(8));
|
||||||
|
|
||||||
|
axi_lite_if.poke(.addr(32'h10), .data(32'd0));
|
||||||
|
repeat(10) @(posedge clk);
|
||||||
|
axi_lite_if.peek(.addr(32'h10), .data(rdata));
|
||||||
|
assert(rdata == 32'd0) else $fatal(1, "ERROR: could not set instruction pointer");
|
||||||
|
|
||||||
|
if(failed)
|
||||||
|
$fatal(1, "ERROR: test_fp2_point_mult FAILED");
|
||||||
|
else
|
||||||
|
$display("INFO: test_fp2_point_mult PASSED");
|
||||||
|
end
|
||||||
|
endtask;
|
||||||
|
|
||||||
initial begin
|
initial begin
|
||||||
axi_lite_if.reset_source();
|
axi_lite_if.reset_source();
|
||||||
|
@ -145,6 +228,7 @@ initial begin
|
||||||
@(posedge clk);
|
@(posedge clk);
|
||||||
|
|
||||||
test_fp_point_mult();
|
test_fp_point_mult();
|
||||||
|
test_fp2_point_mult();
|
||||||
|
|
||||||
#1us $finish();
|
#1us $finish();
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue