gateware

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit e4ed0a9a6e38b1e79c2f9d7270bd51a8df569783
parent c74f68f48a3f170b187ebc71ee48fdc3175c63c0
Author: Brian Swetland <swetland@frotz.net>
Date:   Sat, 25 Jan 2020 15:31:00 -0800

build,test: unified test logging, error/exit process

- update makefile to include "make test" to build and
  run all simulations
- more testbench.cpp adjustments
- prefix test projects with test-

Diffstat:
MMakefile | 3+++
Mbuild/verilator-sim.mk | 3++-
Mhdl/display/testbench.sv | 4+++-
Mhdl/ethernet/eth_crc32_test.sv | 20+++++++++++++-------
Dhdl/testvga.sv | 43-------------------------------------------
Ahdl/vga/testvga.sv | 45+++++++++++++++++++++++++++++++++++++++++++++
Rproject/display.def -> project/test-display.def | 0
Rproject/eth-crc32-test.def -> project/test-eth-crc32.def | 0
Aproject/test-vga40x30.def | 7+++++++
Dproject/vga40x30.def | 7-------
Msrc/testbench.cpp | 24+++++++++++++++++-------
11 files changed, 90 insertions(+), 66 deletions(-)

diff --git a/Makefile b/Makefile @@ -12,6 +12,8 @@ help: list-all-targets all: build-all-buildable +test: run-all-tests + $(foreach p,$(wildcard project/*.def),$(call project,$p)) clean:: @@ -54,6 +56,7 @@ tools:: out/a16 out/d16 out/icetool out/udebug out/crctool build-all-buildable:: $(ALL_BUILDS) tools +run-all-tests:: $(patsubst %,%-vsim,$(filter test-%,$(ALL_BUILDS))) #### CPU16 TESTS #### diff --git a/build/verilator-sim.mk b/build/verilator-sim.mk @@ -33,8 +33,9 @@ $(PROJECT_BIN): $(PROJECT_SRCS) $(PROJECT_DEF) src/testbench.cpp $(PROJECT_NAME): $(PROJECT_BIN) +$(PROJECT_RUN): _LOGFILE := $(PROJECT_OBJDIR)/simulation.log $(PROJECT_RUN): $(PROJECT_BIN) - @$< + @$< > $(_LOGFILE) ALL_TARGETS += $(PROJECT_NAME) $(PROJECT_RUN) ALL_BUILDS += $(PROJECT_NAME) diff --git a/hdl/display/testbench.sv b/hdl/display/testbench.sv @@ -14,7 +14,9 @@ module testbench( output [3:0]vga_blu, output vga_hsync, output vga_vsync, - output vga_frame + output vga_frame, + output reg error = 0, + output reg done = 0 ); display #( diff --git a/hdl/ethernet/eth_crc32_test.sv b/hdl/ethernet/eth_crc32_test.sv @@ -4,7 +4,9 @@ `default_nettype none module testbench( - input clk + input clk, + output reg error = 0, + output reg done = 0 ); reg [8:0]packet[0:103]; @@ -34,16 +36,18 @@ always_ff @(posedge clk) begin if (~pktdone) { pktdone, pktdata } <= packet[pktcount]; pktcount <= pktcount + 7'd1; - $display("WR=", wr, " DONE=", pktdone, " IDX=", pktcount, " DATA=", pktdata, " CRC=", crc0); + $display("WR=", wr, " DONE=", pktdone, " IDX=", pktcount, " DATA=", pktdata, " CRC=", crc0, " NOT=", ~crc0); if (pktdone) begin if(crc0 == 32'hdebb20e3) begin $display("SUCCESS"); + done <= 1; end else begin $display("FAILURE"); + error <= 1; end - $finish(); + done <= 1; end - if (pktcount == 105) $finish(); + if (pktcount == 105) error <= 1; end `else reg [3:0]tick = 4'b0001; @@ -76,18 +80,20 @@ always_ff @(posedge clk) begin end tick <= { tick[0], tick[3:1] }; end - $display("WR=", wr, " DONE=", pktdone, " IDX=", pktcount, " DATA=", pktdata, " CRCx2=", crc0, " CRCx8=", crc1); + $display("WR=", wr, " DONE=", pktdone, " IDX=", pktcount, " DATA=", pktdata, " CRCx2=", crc0, " CRCx8=", crc1, " NOT=", ~crc1); if (pktdone) begin if (crc0 != 32'hdebb20e3) begin $display("CRC32x2 FAILED"); + error <= 1; end else if (crc1 != 32'hdebb20e3) begin $display("CRC32x8 FAILED"); + error <= 1; end else begin $display("SUCCESS"); + done <= 1; end - $finish(); end - if (pktcount == 105) $finish(); + if (pktcount == 105) error <= 1; end `endif diff --git a/hdl/testvga.sv b/hdl/testvga.sv @@ -1,43 +0,0 @@ -// Copyright 2015, Brian Swetland <swetland@frotz.net> -// Licensed under the Apache License, Version 2.0. - -`default_nettype none - -`timescale 1ns / 1ps - -`define HEX_PATHS - -module testbench( - input clk, - output [3:0]vga_red, - output [3:0]vga_grn, - output [3:0]vga_blu, - output vga_hsync, - output vga_vsync, - output vga_frame - ); - -wire [1:0]red; -wire [1:0]grn; -wire [1:0]blu; - -vga40x30x2 vga( - .clk25m(clk), - .red(red), - .grn(grn), - .blu(blu), - .hs(vga_hsync), - .vs(vga_vsync), - .fr(vga_frame), - .active(), - .vram_waddr(11'b0), - .vram_wdata(16'b0), - .vram_we(1'b0), - .vram_clk(clk) - ); - -assign vga_red = { red, red[0], red[0] }; -assign vga_grn = { grn, grn[0], grn[0] }; -assign vga_blu = { blu, blu[0], blu[0] }; - -endmodule diff --git a/hdl/vga/testvga.sv b/hdl/vga/testvga.sv @@ -0,0 +1,45 @@ +// Copyright 2015, Brian Swetland <swetland@frotz.net> +// Licensed under the Apache License, Version 2.0. + +`default_nettype none + +`timescale 1ns / 1ps + +`define HEX_PATHS + +module testbench( + input clk, + output [3:0]vga_red, + output [3:0]vga_grn, + output [3:0]vga_blu, + output vga_hsync, + output vga_vsync, + output vga_frame, + output reg error = 0, + output reg done = 0 + ); + +wire [1:0]red; +wire [1:0]grn; +wire [1:0]blu; + +vga40x30x2 vga( + .clk25m(clk), + .red(red), + .grn(grn), + .blu(blu), + .hs(vga_hsync), + .vs(vga_vsync), + .fr(vga_frame), + .active(), + .vram_waddr(11'b0), + .vram_wdata(16'b0), + .vram_we(1'b0), + .vram_clk(clk) + ); + +assign vga_red = { red, red[0], red[0] }; +assign vga_grn = { grn, grn[0], grn[0] }; +assign vga_blu = { blu, blu[0], blu[0] }; + +endmodule diff --git a/project/display.def b/project/test-display.def diff --git a/project/eth-crc32-test.def b/project/test-eth-crc32.def diff --git a/project/test-vga40x30.def b/project/test-vga40x30.def @@ -0,0 +1,7 @@ + +PROJECT_TYPE := verilator-sim + +PROJECT_SRCS := hdl/vga/testvga.sv +PROJECT_SRCS += hdl/vga/vga40x30x2.sv hdl/vga/vga.sv hdl/vga/videoram.sv hdl/vga/chardata.sv + +PROJECT_VOPTS := -CFLAGS -DVGA diff --git a/project/vga40x30.def b/project/vga40x30.def @@ -1,7 +0,0 @@ - -PROJECT_TYPE := verilator-sim - -PROJECT_SRCS := hdl/testvga.sv -PROJECT_SRCS += hdl/vga/vga40x30x2.sv hdl/vga/vga.sv hdl/vga/videoram.sv hdl/vga/chardata.sv - -PROJECT_VOPTS := -CFLAGS -DVGA diff --git a/src/testbench.cpp b/src/testbench.cpp @@ -199,7 +199,8 @@ int main(int argc, char **argv) { Verilated::randReset(2); Vtestbench *testbench = new Vtestbench; - testbench->clk = 0; + testbench->clk = 1; + // first tick, line up with gtk's vert lines testbench->eval(); @@ -214,7 +215,16 @@ int main(int argc, char **argv) { #define SAVETRACE() do {} while (0) #endif - while (!Verilated::gotFinish()) { + while (!(testbench->done | testbench->error)) { //Verilated::gotFinish()) { + now += 5; + testbench->clk = 0; + testbench->eval(); + SAVETRACE(); +#if 0 + fprintf(stderr, "SDRAM data=%04x data__out=%04x data__en=%x\n", + testbench->sdram_data, testbench->sdram_data__out, testbench->sdram_data_en); +#endif + now += 5; testbench->clk = 1; testbench->eval(); @@ -226,11 +236,11 @@ int main(int argc, char **argv) { break; } #endif - now += 5; - testbench->clk = 0; - testbench->eval(); - SAVETRACE(); } + + int status = testbench->error ? -1 : 0; + fprintf(stderr, "%s: %s\n", argv[0], testbench->error ? "FAIL" : "PASS"); + #ifdef TRACE tfp->close(); #endif @@ -246,6 +256,6 @@ int main(int argc, char **argv) { write(fd, memory, sizeof(memory)); close(fd); } - return 0; + return status; }