mirror of
https://gitlab.com/brendanhaines/cpu.git
synced 2024-12-25 10:36:49 -07:00
working assertion lib
This commit is contained in:
parent
ebc3b22ac7
commit
38a91579ec
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
|
@ -4,5 +4,5 @@
|
||||||
],
|
],
|
||||||
"editor.formatOnSave": true,
|
"editor.formatOnSave": true,
|
||||||
"verilog.linting.linter": "iverilog",
|
"verilog.linting.linter": "iverilog",
|
||||||
"verilog.linting.iverilog.arguments": "-g2012 -i -Wall",
|
"verilog.linting.iverilog.arguments": "-g2012 -i -Wall -Y .sv -I lib",
|
||||||
}
|
}
|
|
@ -4,16 +4,27 @@ package bh_assert;
|
||||||
|
|
||||||
int bh_assert_pass_count = 0;
|
int bh_assert_pass_count = 0;
|
||||||
int bh_assert_fail_count = 0;
|
int bh_assert_fail_count = 0;
|
||||||
|
int bh_assert_warn_count = 0;
|
||||||
|
|
||||||
logic bh_info_enable = 0;
|
localparam BH_ASSERT_LOG_LEVEL_FAIL = 0;
|
||||||
|
localparam BH_ASSERT_LOG_LEVEL_ASSERT = 1;
|
||||||
|
localparam BH_ASSERT_LOG_LEVEL_WARN = 2;
|
||||||
|
localparam BH_ASSERT_LOG_LEVEL_INFO = 3;
|
||||||
|
|
||||||
function logic bh_assert_equal(int val, int expected, string description);
|
logic bh_assert_log_level = BH_ASSERT_LOG_LEVEL_WARN; // 0 = errors only, 1 = all assertions, 2 = warnings, 3 = info
|
||||||
|
|
||||||
|
localparam COLOR_RED = "\033[31m";
|
||||||
|
localparam COLOR_YELLOW = "\033[33m";
|
||||||
|
localparam COLOR_GREEN = "\033[32m";
|
||||||
|
localparam COLOR_NORMAL = "\033[0;39m";
|
||||||
|
|
||||||
|
task bh_assert_equal(int val, int expected, string description);
|
||||||
// display results
|
// display results
|
||||||
$timeformat(-9, 2, " ns", 20);
|
$timeformat(-9, 2, " ns", 20);
|
||||||
$display(
|
$display(
|
||||||
"%t: %s: %d %s %d - %s",
|
"%t: %s: %d %s %d - %s",
|
||||||
$time,
|
$time,
|
||||||
val == expected ? "PASS" : "FAIL",
|
val == expected ? {COLOR_GREEN, "PASS", COLOR_NORMAL} : {COLOR_RED, "FAIL", COLOR_NORMAL},
|
||||||
val,
|
val,
|
||||||
val == expected ? "==" : "!=",
|
val == expected ? "==" : "!=",
|
||||||
expected,
|
expected,
|
||||||
|
@ -26,27 +37,33 @@ function logic bh_assert_equal(int val, int expected, string description);
|
||||||
end else begin
|
end else begin
|
||||||
bh_assert_fail_count = bh_assert_fail_count + 1;
|
bh_assert_fail_count = bh_assert_fail_count + 1;
|
||||||
end
|
end
|
||||||
|
endtask
|
||||||
|
|
||||||
return val == expected;
|
task bh_assert_stats;
|
||||||
endfunction
|
|
||||||
|
|
||||||
function void bh_assert_stats();
|
|
||||||
$timeformat(-9, 2, " ns", 20);
|
$timeformat(-9, 2, " ns", 20);
|
||||||
$display("%t: DONE: ");
|
$display("%t: DONE: %1d pass, %1d fail, %1d warn", $time, bh_assert_pass_count, bh_assert_fail_count, bh_assert_warn_count);
|
||||||
if (bh_assert_pass_count + bh_assert_fail_count == 0) begin
|
if (bh_assert_pass_count + bh_assert_fail_count == 0) begin
|
||||||
$display("ERROR: no assertions found");
|
$display("%sERROR%s: no assertions found", COLOR_YELLOW, COLOR_NORMAL);
|
||||||
// TODO: error in a better way?
|
// TODO: error in a better way?
|
||||||
end else if (bh_assert_fail_count > 0) begin
|
end else if (bh_assert_fail_count > 0) begin
|
||||||
$display("ERROR: some tests failed");
|
$display("%sERROR%s: some tests failed", COLOR_RED, COLOR_NORMAL);
|
||||||
end else begin
|
end else begin
|
||||||
$display("SUCCESS: all tests passed");
|
$display("%sSUCCESS%s: all tests passed", COLOR_GREEN, COLOR_NORMAL);
|
||||||
end
|
end
|
||||||
endfunction
|
endtask
|
||||||
|
|
||||||
function void bh_info(string description);
|
task bh_info(string description);
|
||||||
if (bh_info_enable) begin
|
if (bh_assert_log_level >= BH_ASSERT_LOG_LEVEL_INFO) begin
|
||||||
$display(description);
|
$display("%t: INFO: %s", $time, description);
|
||||||
end
|
end
|
||||||
endfunction
|
endtask
|
||||||
|
|
||||||
|
task bh_warn(string description);
|
||||||
|
if (bh_assert_log_level >= BH_ASSERT_LOG_LEVEL_WARN) begin
|
||||||
|
$display("%t: %sWARN%s: %s", $time, COLOR_YELLOW, COLOR_NORMAL, description);
|
||||||
|
end
|
||||||
|
bh_assert_warn_count = bh_assert_warn_count + 1;
|
||||||
|
endtask
|
||||||
|
|
||||||
|
|
||||||
endpackage
|
endpackage
|
|
@ -6,7 +6,7 @@ LOGS = $(TESTBENCH_V:.sv=.log)
|
||||||
|
|
||||||
# Hardware compilation
|
# Hardware compilation
|
||||||
%.out: %.sv $(SOURCE_V)
|
%.out: %.sv $(SOURCE_V)
|
||||||
iverilog -g2012 -o $@ $^
|
iverilog -g2012 -o $@ $< -y ../ -Y .sv -I ../
|
||||||
|
|
||||||
# Run test
|
# Run test
|
||||||
%.vcd %.log: %.out
|
%.vcd %.log: %.out
|
||||||
|
|
|
@ -1,73 +1,11 @@
|
||||||
|
`include "bh_assert.sv"
|
||||||
`timescale 1ns/1ps
|
`timescale 1ns/1ps
|
||||||
|
|
||||||
// import bh_assert::*;
|
import bh_assert::bh_assert_equal;
|
||||||
|
import bh_assert::bh_assert_stats;
|
||||||
|
|
||||||
module skidbuffer_tb();
|
module skidbuffer_tb();
|
||||||
|
|
||||||
int bh_assert_pass_count = 0;
|
|
||||||
int bh_assert_fail_count = 0;
|
|
||||||
int bh_assert_warn_count = 0;
|
|
||||||
|
|
||||||
localparam BH_ASSERT_LOG_LEVEL_FAIL = 0;
|
|
||||||
localparam BH_ASSERT_LOG_LEVEL_ASSERT = 1;
|
|
||||||
localparam BH_ASSERT_LOG_LEVEL_WARN = 2;
|
|
||||||
localparam BH_ASSERT_LOG_LEVEL_INFO = 3;
|
|
||||||
|
|
||||||
logic bh_assert_log_level = BH_ASSERT_LOG_LEVEL_WARN; // 0 = errors only, 1 = all assertions, 2 = warnings, 3 = info
|
|
||||||
|
|
||||||
localparam COLOR_RED = "\033[31m";
|
|
||||||
localparam COLOR_YELLOW = "\033[33m";
|
|
||||||
localparam COLOR_GREEN = "\033[32m";
|
|
||||||
localparam COLOR_NORMAL = "\033[0;39m";
|
|
||||||
|
|
||||||
task bh_assert_equal(int val, int expected, string description);
|
|
||||||
// display results
|
|
||||||
$timeformat(-9, 2, " ns", 20);
|
|
||||||
$display(
|
|
||||||
"%t: %s: %d %s %d - %s",
|
|
||||||
$time,
|
|
||||||
val == expected ? {COLOR_GREEN, "PASS", COLOR_NORMAL} : {COLOR_RED, "FAIL", COLOR_NORMAL},
|
|
||||||
val,
|
|
||||||
val == expected ? "==" : "!=",
|
|
||||||
expected,
|
|
||||||
description
|
|
||||||
);
|
|
||||||
|
|
||||||
// update statistics
|
|
||||||
if (val == expected) begin
|
|
||||||
bh_assert_pass_count = bh_assert_pass_count + 1;
|
|
||||||
end else begin
|
|
||||||
bh_assert_fail_count = bh_assert_fail_count + 1;
|
|
||||||
end
|
|
||||||
endtask
|
|
||||||
|
|
||||||
task bh_assert_stats;
|
|
||||||
$timeformat(-9, 2, " ns", 20);
|
|
||||||
$display("%t: DONE: %1d pass, %1d fail, %1d warn", $time, bh_assert_pass_count, bh_assert_fail_count, bh_assert_warn_count);
|
|
||||||
if (bh_assert_pass_count + bh_assert_fail_count == 0) begin
|
|
||||||
$display("%sERROR%s: no assertions found", COLOR_YELLOW, COLOR_NORMAL);
|
|
||||||
// TODO: error in a better way?
|
|
||||||
end else if (bh_assert_fail_count > 0) begin
|
|
||||||
$display("%sERROR%s: some tests failed", COLOR_RED, COLOR_NORMAL);
|
|
||||||
end else begin
|
|
||||||
$display("%sSUCCESS%s: all tests passed", COLOR_GREEN, COLOR_NORMAL);
|
|
||||||
end
|
|
||||||
endtask
|
|
||||||
|
|
||||||
task bh_info(string description);
|
|
||||||
if (bh_assert_log_level >= BH_ASSERT_LOG_LEVEL_INFO) begin
|
|
||||||
$display("%t: INFO: %s", $time, description);
|
|
||||||
end
|
|
||||||
endtask
|
|
||||||
|
|
||||||
task bh_warn(string description);
|
|
||||||
if (bh_assert_log_level >= BH_ASSERT_LOG_LEVEL_WARN) begin
|
|
||||||
$display("%t: %sWARN%s: %s", $time, COLOR_YELLOW, COLOR_NORMAL, description);
|
|
||||||
end
|
|
||||||
bh_assert_warn_count = bh_assert_warn_count + 1;
|
|
||||||
endtask
|
|
||||||
|
|
||||||
|
|
||||||
parameter WIDTH = 15;
|
parameter WIDTH = 15;
|
||||||
parameter TEST_LIST_LENGTH = 256;
|
parameter TEST_LIST_LENGTH = 256;
|
||||||
|
|
||||||
|
@ -134,8 +72,6 @@ always @(posedge clk) begin
|
||||||
|
|
||||||
if (reset == 0 && out_valid && out_ready) begin
|
if (reset == 0 && out_valid && out_ready) begin
|
||||||
bh_assert_equal(out, in_list[out_count], $sformatf("Output value [%3d]", out_count));
|
bh_assert_equal(out, in_list[out_count], $sformatf("Output value [%3d]", out_count));
|
||||||
bh_warn("hello warning");
|
|
||||||
bh_info("hello info");
|
|
||||||
out_count <= out_count + 1;
|
out_count <= out_count + 1;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue
Block a user