Files
simbench/source/testbench.sv

57 lines
1.3 KiB
Systemverilog
Raw Normal View History

2023-06-11 16:15:40 +03:00
`timescale 1ps/1ps
2023-06-17 10:56:00 +03:00
module testbench #(parameter CPU_COUNT = 1024)
(input clock);
localparam DATA_ADDR = 32'h00010000;
localparam DATA_LEN = 1024;
2023-06-11 16:15:40 +03:00
logic [31:0] data_len;
logic [CPU_COUNT-1:0] done_all;
2023-06-11 16:15:40 +03:00
for (genvar ncpu = 0; ncpu < CPU_COUNT; ncpu = ncpu + 1) begin : cpus
logic done;
logic reset;
logic [127:0] md5;
2023-06-11 16:15:40 +03:00
assign done_all[ncpu] = done;
2023-06-11 16:15:40 +03:00
md5calculator cpu
(.clock, .reset, .done,
.md5_data_addr(DATA_ADDR),
.md5_data_len(data_len),
.md5(md5));
2023-06-11 16:15:40 +03:00
initial
for (int n = 0; n < (2 ** (cpu.rom.ADDR_WIDTH-2)); n += 1)
cpu.rom.ram[n] = ncpu;
2023-06-11 16:15:40 +03:00
initial
if(!$value$plusargs("dlen=%d", data_len))
data_len = DATA_LEN;
initial begin
reset = 1'b1;
repeat($urandom % 5 + 2) @(posedge clock);
reset = 1'b0;
@(posedge clock);
2023-06-11 16:15:40 +03:00
while(!done) @(posedge clock);
2023-07-11 18:41:53 +03:00
$display("MD5(0x%x) = %x", ncpu, md5);
end
2023-06-11 16:57:06 +03:00
end
2023-06-11 16:15:40 +03:00
// Wait for complete
initial begin
$display("--- BENCH BEGIN ---");
2023-06-11 16:15:40 +03:00
repeat(5) @(posedge clock);
while ((&done_all) == 1'b0) @(posedge clock);
2023-06-11 16:15:40 +03:00
@(posedge clock);
$display("--- BENCH DONE ---");
2023-06-11 16:15:40 +03:00
$finish;
end
endmodule // testbench