diff --git a/.gitignore b/.gitignore index d7450221f8590013e86a57bd2ff6a7d6e9b282d1..2d64a9d610abcd5ea1546999ee495703d2ca607a 100644 --- a/.gitignore +++ b/.gitignore @@ -351,3 +351,12 @@ stale_outputs_checked *.snapshot __pycache__ overnight.sh + +# VCS files +simv +simv.daidir +ucli.key +stack.info* +*.vpd +*.bin + diff --git a/Makefile b/Makefile index d563b4a46ecd5c29031f0912da991edf05cf9577..a3e41c35f6c71f63fe542583d3d606fb51ee3874 100644 --- a/Makefile +++ b/Makefile @@ -77,34 +77,10 @@ SIM_CXXFILES = $(shell find $(SIM_CSRC_DIR) -name "*.cpp") DIFFTEST_CSRC_DIR = $(abspath ./src/test/csrc/difftest) DIFFTEST_CXXFILES = $(shell find $(DIFFTEST_CSRC_DIR) -name "*.cpp") -SIM_VSRC = $(shell find ./src/test/vsrc -name "*.v" -or -name "*.sv") +SIM_VSRC = $(shell find ./src/test/vsrc/common -name "*.v" -or -name "*.sv") -include Makefile.emu - -EMU_VCS := simv - -VCS_SRC_FILE = $(TOP_V) \ - $(BUILD_DIR)/plusarg_reader.v \ - $(BUILD_DIR)/SDHelper.v - -VCS_TB_DIR = $(abspath ./src/test/vcs) -VCS_TB_FILE = $(shell find $(VCS_TB_DIR) -name "*.c") \ - $(shell find $(VCS_TB_DIR) -name "*.v") - -VCS_OPTS := -full64 +v2k -timescale=1ns/10ps \ - -LDFLAGS -Wl,--no-as-needed \ - -sverilog \ - +lint=TFIPC-L \ - -debug_all +vcd+vcdpluson \ - +define+RANDOMIZE_GARBAGE_ASSIGN \ - +define+RANDOMIZE_INVALID_ASSIGN \ - +define+RANDOMIZE_REG_INIT \ - +define+RANDOMIZE_MEM_INIT \ - +define+RANDOMIZE_DELAY=1 - -$(EMU_VCS): $(VCS_SRC_FILE) $(VCS_TB_FILE) - rm -rf csrc - vcs $(VCS_OPTS) $(VCS_SRC_FILE) $(VCS_TB_FILE) +include verilator.mk +include vcs.mk ifndef NEMU_HOME $(error NEMU_HOME is not set) @@ -150,7 +126,7 @@ cache: release-lock: ssh -tt $(REMOTE) 'rm -f $(LOCK)' -clean: +clean: vcs-clean rm -rf ./build init: diff --git a/src/test/csrc/vcs/main.cpp b/src/test/csrc/vcs/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1ec16409b12a49aa4704806b44718e0af4a79a0f --- /dev/null +++ b/src/test/csrc/vcs/main.cpp @@ -0,0 +1,27 @@ +#include +#include +#include "difftest.h" +#include "device.h" +#include "goldenmem.h" +#include "ram.h" + +static bool has_reset = false; + +extern "C" void simv_init() { + printf("simv compiled at %s, %s\n", __DATE__, __TIME__); + setlocale(LC_NUMERIC, ""); + + init_goldenmem(); + difftest_init(); + init_device(); + + assert_init(); + init_ram("ram.bin"); + +} + +extern "C" void simv_step() { + if (difftest_step()) { + printf("Difftest error\n"); + } +} diff --git a/src/test/vcs/UARTHelper.v b/src/test/vcs/UARTHelper.v deleted file mode 100644 index c7a7b323ab946f8b760e5aa8f5e5560cb6768de9..0000000000000000000000000000000000000000 --- a/src/test/vcs/UARTHelper.v +++ /dev/null @@ -1,22 +0,0 @@ -import "DPI-C" function void uart_putchar -( - input byte c -); - -module UARTHelper( - input clock, - input reset, - input putchar_valid, - input [7:0] putchar_ch, - input getchar_valid, - output [7:0] getchar_ch -); - -always@(posedge clock) begin - if(putchar_valid) - uart_putchar(putchar_ch); -end - -assign getchar_ch = 'h0; - -endmodule diff --git a/src/test/vcs/common.c b/src/test/vcs/common.c deleted file mode 100644 index a24e651307035dddbbc5970a1bf5293893a3a984..0000000000000000000000000000000000000000 --- a/src/test/vcs/common.c +++ /dev/null @@ -1,8 +0,0 @@ -#include -#include -#include - -void xs_assert(long long line) { - printf("Assertion failed at line %lld.\n", line); -} - diff --git a/src/test/vcs/ram.c b/src/test/vcs/ram.c deleted file mode 100644 index 42cd4726057563011da8e7b001f7e4e35aff1f71..0000000000000000000000000000000000000000 --- a/src/test/vcs/ram.c +++ /dev/null @@ -1,67 +0,0 @@ -#include -#include -#include -#include - -#define EMU_RAM_SIZE (256 * 1024 * 1024UL) - -static uint64_t *ram; -static long img_size = 0; - - -void init_ram() { - const char *img = "./ram.bin"; - //assert(img != NULL); - - printf("The image is %s\n", img); - - // initialize memory using Linux mmap - printf("Using simulated %luMB RAM\n", EMU_RAM_SIZE / (1024 * 1024)); - ram = (uint64_t *)mmap(NULL, EMU_RAM_SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - if (ram == (uint64_t *)MAP_FAILED) { - printf("Cound not mmap 0x%lx bytes\n", EMU_RAM_SIZE); - //assert(0); - } - - FILE *fp = fopen(img, "rb"); - if (fp == NULL) { - printf("Can not open '%s'\n", img); - //assert(0); - } - - fseek(fp, 0, SEEK_END); - img_size = ftell(fp); - if (img_size > EMU_RAM_SIZE) { - img_size = EMU_RAM_SIZE; - } - - fseek(fp, 0, SEEK_SET); - fread(ram, img_size, 1, fp); - - fclose(fp); - -} - -void ram_finish() { - munmap(ram, EMU_RAM_SIZE); -} - - -uint64_t ram_read_helper(uint8_t en, uint64_t rIdx) { - if (en && rIdx >= EMU_RAM_SIZE / sizeof(uint64_t)) { - rIdx %= EMU_RAM_SIZE / sizeof(uint64_t); - } - uint64_t rdata = (en) ? ram[rIdx] : 0; - return rdata; -} - -void ram_write_helper(uint64_t wIdx, uint64_t wdata, uint64_t wmask, uint8_t wen) { - if (wen) { - if (wIdx >= EMU_RAM_SIZE / sizeof(uint64_t)) { - printf("ERROR: ram wIdx = 0x%lx out of bound!\n", wIdx); - return; - //assert(wIdx < EMU_RAM_SIZE / sizeof(uint64_t)); - } - ram[wIdx] = (ram[wIdx] & ~wmask) | (wdata & wmask); - } -} diff --git a/src/test/vcs/ram.v b/src/test/vcs/ram.v deleted file mode 100644 index 21343624e47f57155a446df4f03a9617337385d2..0000000000000000000000000000000000000000 --- a/src/test/vcs/ram.v +++ /dev/null @@ -1,41 +0,0 @@ -import "DPI-C" function void ram_write_helper -( - input longint wIdx, - input longint wdata, - input longint wmask, - input bit wen -); - -import "DPI-C" function longint ram_read_helper -( - input bit en, - input longint rIdx -); - -import "DPI-C" function void init_ram -( -); - -module RAMHelper( - input clk, - input en, - input [63:0] rIdx, - output [63:0] rdata, - input [63:0] wIdx, - input [63:0] wdata, - input [63:0] wmask, - input wen -); - - initial begin - init_ram(); - end - - assign rdata = ram_read_helper(en, rIdx); - - always @(posedge clk) begin - ram_write_helper(wIdx, wdata, wmask, wen && en); - end - -endmodule - diff --git a/src/test/vcs/sdcard.c b/src/test/vcs/sdcard.c deleted file mode 100644 index 441cd27a7a4e7f27c165759cd740583d5eb13be4..0000000000000000000000000000000000000000 --- a/src/test/vcs/sdcard.c +++ /dev/null @@ -1,28 +0,0 @@ -#include -#include -#include - -FILE *fp = NULL; - -void sd_setaddr(uint32_t addr) { - fseek(fp, addr, SEEK_SET); - //printf("set addr to 0x%08x\n", addr); - //assert(0); -} - -uint32_t sd_read(int ren) { - if (ren) { - uint32_t data; - fread(&data, 4, 1, fp); - //printf("read data = 0x%08x\n", *data); - return data; - } - return 0xdeadbeaf; -} - -void init_sd(void) { - fp = fopen("/home/xyn/debian/debian.img", "r"); - if(!fp) { - printf("[warning] sdcard img not found\n"); - } -} diff --git a/src/test/vcs/uart.c b/src/test/vcs/uart.c deleted file mode 100644 index fff9556e378af4af438ec393e0c74d82f4e04008..0000000000000000000000000000000000000000 --- a/src/test/vcs/uart.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#include - -void uart_putchar(char c) -{ - printf("%c", c); - fflush(stdout); -} \ No newline at end of file diff --git a/src/test/vcs/xs_vcs_top.v b/src/test/vcs/xs_vcs_top.v deleted file mode 100644 index bd52b390913c7b37885bf4d99cdcaba9428bf276..0000000000000000000000000000000000000000 --- a/src/test/vcs/xs_vcs_top.v +++ /dev/null @@ -1,450 +0,0 @@ - module xs_system_top(); - -wire clock; -wire reset; -wire [63:0] io_difftest_r_0; -wire [63:0] io_difftest_r_1; -wire [63:0] io_difftest_r_2; -wire [63:0] io_difftest_r_3; -wire [63:0] io_difftest_r_4; -wire [63:0] io_difftest_r_5; -wire [63:0] io_difftest_r_6; -wire [63:0] io_difftest_r_7; -wire [63:0] io_difftest_r_8; -wire [63:0] io_difftest_r_9; -wire [63:0] io_difftest_r_10; -wire [63:0] io_difftest_r_11; -wire [63:0] io_difftest_r_12; -wire [63:0] io_difftest_r_13; -wire [63:0] io_difftest_r_14; -wire [63:0] io_difftest_r_15; -wire [63:0] io_difftest_r_16; -wire [63:0] io_difftest_r_17; -wire [63:0] io_difftest_r_18; -wire [63:0] io_difftest_r_19; -wire [63:0] io_difftest_r_20; -wire [63:0] io_difftest_r_21; -wire [63:0] io_difftest_r_22; -wire [63:0] io_difftest_r_23; -wire [63:0] io_difftest_r_24; -wire [63:0] io_difftest_r_25; -wire [63:0] io_difftest_r_26; -wire [63:0] io_difftest_r_27; -wire [63:0] io_difftest_r_28; -wire [63:0] io_difftest_r_29; -wire [63:0] io_difftest_r_30; -wire [63:0] io_difftest_r_31; -wire [63:0] io_difftest_r_32; -wire [63:0] io_difftest_r_33; -wire [63:0] io_difftest_r_34; -wire [63:0] io_difftest_r_35; -wire [63:0] io_difftest_r_36; -wire [63:0] io_difftest_r_37; -wire [63:0] io_difftest_r_38; -wire [63:0] io_difftest_r_39; -wire [63:0] io_difftest_r_40; -wire [63:0] io_difftest_r_41; -wire [63:0] io_difftest_r_42; -wire [63:0] io_difftest_r_43; -wire [63:0] io_difftest_r_44; -wire [63:0] io_difftest_r_45; -wire [63:0] io_difftest_r_46; -wire [63:0] io_difftest_r_47; -wire [63:0] io_difftest_r_48; -wire [63:0] io_difftest_r_49; -wire [63:0] io_difftest_r_50; -wire [63:0] io_difftest_r_51; -wire [63:0] io_difftest_r_52; -wire [63:0] io_difftest_r_53; -wire [63:0] io_difftest_r_54; -wire [63:0] io_difftest_r_55; -wire [63:0] io_difftest_r_56; -wire [63:0] io_difftest_r_57; -wire [63:0] io_difftest_r_58; -wire [63:0] io_difftest_r_59; -wire [63:0] io_difftest_r_60; -wire [63:0] io_difftest_r_61; -wire [63:0] io_difftest_r_62; -wire [63:0] io_difftest_r_63; -wire [31:0] io_difftest_commit; -wire [63:0] io_difftest_thisPC; -wire [31:0] io_difftest_thisINST; -wire [31:0] io_difftest_skip; -wire [31:0] io_difftest_wen; -wire [63:0] io_difftest_wdata_0; -wire [63:0] io_difftest_wdata_1; -wire [63:0] io_difftest_wdata_2; -wire [63:0] io_difftest_wdata_3; -wire [63:0] io_difftest_wdata_4; -wire [63:0] io_difftest_wdata_5; -wire [31:0] io_difftest_wdst_0; -wire [31:0] io_difftest_wdst_1; -wire [31:0] io_difftest_wdst_2; -wire [31:0] io_difftest_wdst_3; -wire [31:0] io_difftest_wdst_4; -wire [31:0] io_difftest_wdst_5; -wire [63:0] io_difftest_wpc_0; -wire [63:0] io_difftest_wpc_1; -wire [63:0] io_difftest_wpc_2; -wire [63:0] io_difftest_wpc_3; -wire [63:0] io_difftest_wpc_4; -wire [63:0] io_difftest_wpc_5; -wire [31:0] io_difftest_isRVC; -wire [63:0] io_difftest_intrNO; -wire [63:0] io_difftest_cause; -wire [1:0] io_difftest_priviledgeMode; -wire [63:0] io_difftest_mstatus; -wire [63:0] io_difftest_sstatus; -wire [63:0] io_difftest_mepc; -wire [63:0] io_difftest_sepc; -wire [63:0] io_difftest_mtval; -wire [63:0] io_difftest_stval; -wire [63:0] io_difftest_mtvec; -wire [63:0] io_difftest_stvec; -wire [63:0] io_difftest_mcause; -wire [63:0] io_difftest_scause; -wire [63:0] io_difftest_satp; -wire [63:0] io_difftest_mip; -wire [63:0] io_difftest_mie; -wire [63:0] io_difftest_mscratch; -wire [63:0] io_difftest_sscratch; -wire [63:0] io_difftest_mideleg; -wire [63:0] io_difftest_medeleg; -wire io_difftest_scFailed; -wire [1:0] io_difftest_storeCommit; -wire [63:0] io_difftest_storeAddr_0; -wire [63:0] io_difftest_storeAddr_1; -wire [63:0] io_difftest_storeData_0; -wire [63:0] io_difftest_storeData_1; -wire [7:0] io_difftest_storeMask_0; -wire [7:0] io_difftest_storeMask_1; -wire io_difftest_sbufferResp; -wire [63:0] io_difftest_sbufferAddr; -wire [7:0] io_difftest_sbufferData_0; -wire [7:0] io_difftest_sbufferData_1; -wire [7:0] io_difftest_sbufferData_2; -wire [7:0] io_difftest_sbufferData_3; -wire [7:0] io_difftest_sbufferData_4; -wire [7:0] io_difftest_sbufferData_5; -wire [7:0] io_difftest_sbufferData_6; -wire [7:0] io_difftest_sbufferData_7; -wire [7:0] io_difftest_sbufferData_8; -wire [7:0] io_difftest_sbufferData_9; -wire [7:0] io_difftest_sbufferData_10; -wire [7:0] io_difftest_sbufferData_11; -wire [7:0] io_difftest_sbufferData_12; -wire [7:0] io_difftest_sbufferData_13; -wire [7:0] io_difftest_sbufferData_14; -wire [7:0] io_difftest_sbufferData_15; -wire [7:0] io_difftest_sbufferData_16; -wire [7:0] io_difftest_sbufferData_17; -wire [7:0] io_difftest_sbufferData_18; -wire [7:0] io_difftest_sbufferData_19; -wire [7:0] io_difftest_sbufferData_20; -wire [7:0] io_difftest_sbufferData_21; -wire [7:0] io_difftest_sbufferData_22; -wire [7:0] io_difftest_sbufferData_23; -wire [7:0] io_difftest_sbufferData_24; -wire [7:0] io_difftest_sbufferData_25; -wire [7:0] io_difftest_sbufferData_26; -wire [7:0] io_difftest_sbufferData_27; -wire [7:0] io_difftest_sbufferData_28; -wire [7:0] io_difftest_sbufferData_29; -wire [7:0] io_difftest_sbufferData_30; -wire [7:0] io_difftest_sbufferData_31; -wire [7:0] io_difftest_sbufferData_32; -wire [7:0] io_difftest_sbufferData_33; -wire [7:0] io_difftest_sbufferData_34; -wire [7:0] io_difftest_sbufferData_35; -wire [7:0] io_difftest_sbufferData_36; -wire [7:0] io_difftest_sbufferData_37; -wire [7:0] io_difftest_sbufferData_38; -wire [7:0] io_difftest_sbufferData_39; -wire [7:0] io_difftest_sbufferData_40; -wire [7:0] io_difftest_sbufferData_41; -wire [7:0] io_difftest_sbufferData_42; -wire [7:0] io_difftest_sbufferData_43; -wire [7:0] io_difftest_sbufferData_44; -wire [7:0] io_difftest_sbufferData_45; -wire [7:0] io_difftest_sbufferData_46; -wire [7:0] io_difftest_sbufferData_47; -wire [7:0] io_difftest_sbufferData_48; -wire [7:0] io_difftest_sbufferData_49; -wire [7:0] io_difftest_sbufferData_50; -wire [7:0] io_difftest_sbufferData_51; -wire [7:0] io_difftest_sbufferData_52; -wire [7:0] io_difftest_sbufferData_53; -wire [7:0] io_difftest_sbufferData_54; -wire [7:0] io_difftest_sbufferData_55; -wire [7:0] io_difftest_sbufferData_56; -wire [7:0] io_difftest_sbufferData_57; -wire [7:0] io_difftest_sbufferData_58; -wire [7:0] io_difftest_sbufferData_59; -wire [7:0] io_difftest_sbufferData_60; -wire [7:0] io_difftest_sbufferData_61; -wire [7:0] io_difftest_sbufferData_62; -wire [7:0] io_difftest_sbufferData_63; -wire [63:0] io_difftest_sbufferMask; -wire [63:0] io_logCtrl_log_begin; -wire [63:0] io_logCtrl_log_end; -wire [63:0] io_logCtrl_log_level; -wire io_trap_valid; -wire [2:0] io_trap_code; -wire [38:0] io_trap_pc; -wire [63:0] io_trap_cycleCnt; -wire [63:0] io_trap_instrCnt; -wire io_uart_out_valid; -wire [7:0] io_uart_out_ch; -wire io_uart_in_valid; -wire [7:0] io_uart_in_ch; - -assign io_logCtrl_log_begin = 'h0; -assign io_logCtrl_log_end = 'h0; -assign io_logCtrl_log_level = 'h0; - -rcg rcg0 -( - .clock(clock), - .reset(reset) -); - -UARTHelper UARTHelper0 -( - .clock(clock), - .reset(reset), - .putchar_valid(io_uart_out_valid), - .putchar_ch(io_uart_out_ch), - .getchar_valid(io_uart_in_valid), - .getchar_ch(io_uart_in_ch) -); - -XSSimSoC XSSimSoC0 -( - .clock(clock), - .reset(reset), - .io_difftest_r_0(io_difftest_r_0), - .io_difftest_r_1(io_difftest_r_1), - .io_difftest_r_2(io_difftest_r_2), - .io_difftest_r_3(io_difftest_r_3), - .io_difftest_r_4(io_difftest_r_4), - .io_difftest_r_5(io_difftest_r_5), - .io_difftest_r_6(io_difftest_r_6), - .io_difftest_r_7(io_difftest_r_7), - .io_difftest_r_8(io_difftest_r_8), - .io_difftest_r_9(io_difftest_r_9), - .io_difftest_r_10(io_difftest_r_10), - .io_difftest_r_11(io_difftest_r_11), - .io_difftest_r_12(io_difftest_r_12), - .io_difftest_r_13(io_difftest_r_13), - .io_difftest_r_14(io_difftest_r_14), - .io_difftest_r_15(io_difftest_r_15), - .io_difftest_r_16(io_difftest_r_16), - .io_difftest_r_17(io_difftest_r_17), - .io_difftest_r_18(io_difftest_r_18), - .io_difftest_r_19(io_difftest_r_19), - .io_difftest_r_20(io_difftest_r_20), - .io_difftest_r_21(io_difftest_r_21), - .io_difftest_r_22(io_difftest_r_22), - .io_difftest_r_23(io_difftest_r_23), - .io_difftest_r_24(io_difftest_r_24), - .io_difftest_r_25(io_difftest_r_25), - .io_difftest_r_26(io_difftest_r_26), - .io_difftest_r_27(io_difftest_r_27), - .io_difftest_r_28(io_difftest_r_28), - .io_difftest_r_29(io_difftest_r_29), - .io_difftest_r_30(io_difftest_r_30), - .io_difftest_r_31(io_difftest_r_31), - .io_difftest_r_32(io_difftest_r_32), - .io_difftest_r_33(io_difftest_r_33), - .io_difftest_r_34(io_difftest_r_34), - .io_difftest_r_35(io_difftest_r_35), - .io_difftest_r_36(io_difftest_r_36), - .io_difftest_r_37(io_difftest_r_37), - .io_difftest_r_38(io_difftest_r_38), - .io_difftest_r_39(io_difftest_r_39), - .io_difftest_r_40(io_difftest_r_40), - .io_difftest_r_41(io_difftest_r_41), - .io_difftest_r_42(io_difftest_r_42), - .io_difftest_r_43(io_difftest_r_43), - .io_difftest_r_44(io_difftest_r_44), - .io_difftest_r_45(io_difftest_r_45), - .io_difftest_r_46(io_difftest_r_46), - .io_difftest_r_47(io_difftest_r_47), - .io_difftest_r_48(io_difftest_r_48), - .io_difftest_r_49(io_difftest_r_49), - .io_difftest_r_50(io_difftest_r_50), - .io_difftest_r_51(io_difftest_r_51), - .io_difftest_r_52(io_difftest_r_52), - .io_difftest_r_53(io_difftest_r_53), - .io_difftest_r_54(io_difftest_r_54), - .io_difftest_r_55(io_difftest_r_55), - .io_difftest_r_56(io_difftest_r_56), - .io_difftest_r_57(io_difftest_r_57), - .io_difftest_r_58(io_difftest_r_58), - .io_difftest_r_59(io_difftest_r_59), - .io_difftest_r_60(io_difftest_r_60), - .io_difftest_r_61(io_difftest_r_61), - .io_difftest_r_62(io_difftest_r_62), - .io_difftest_r_63(io_difftest_r_63), - .io_difftest_commit(io_difftest_commit), - .io_difftest_thisPC(io_difftest_thisPC), - .io_difftest_thisINST(io_difftest_thisINST), - .io_difftest_skip(io_difftest_skip), - .io_difftest_wen(io_difftest_wen), - .io_difftest_wdata_0(io_difftest_wdata_0), - .io_difftest_wdata_1(io_difftest_wdata_1), - .io_difftest_wdata_2(io_difftest_wdata_2), - .io_difftest_wdata_3(io_difftest_wdata_3), - .io_difftest_wdata_4(io_difftest_wdata_4), - .io_difftest_wdata_5(io_difftest_wdata_5), - .io_difftest_wdst_0(io_difftest_wdst_0), - .io_difftest_wdst_1(io_difftest_wdst_1), - .io_difftest_wdst_2(io_difftest_wdst_2), - .io_difftest_wdst_3(io_difftest_wdst_3), - .io_difftest_wdst_4(io_difftest_wdst_4), - .io_difftest_wdst_5(io_difftest_wdst_5), - .io_difftest_wpc_0(io_difftest_wpc_0), - .io_difftest_wpc_1(io_difftest_wpc_1), - .io_difftest_wpc_2(io_difftest_wpc_2), - .io_difftest_wpc_3(io_difftest_wpc_3), - .io_difftest_wpc_4(io_difftest_wpc_4), - .io_difftest_wpc_5(io_difftest_wpc_5), - .io_difftest_isRVC(io_difftest_isRVC), - .io_difftest_intrNO(io_difftest_intrNO), - .io_difftest_cause(io_difftest_cause), - .io_difftest_priviledgeMode(io_difftest_priviledgeMode), - .io_difftest_mstatus(io_difftest_mstatus), - .io_difftest_sstatus(io_difftest_sstatus), - .io_difftest_mepc(io_difftest_mepc), - .io_difftest_sepc(io_difftest_sepc), - .io_difftest_mtval(io_difftest_mtval), - .io_difftest_stval(io_difftest_stval), - .io_difftest_mtvec(io_difftest_mtvec), - .io_difftest_stvec(io_difftest_stvec), - .io_difftest_mcause(io_difftest_mcause), - .io_difftest_scause(io_difftest_scause), - .io_difftest_satp(io_difftest_satp), - .io_difftest_mip(io_difftest_mip), - .io_difftest_mie(io_difftest_mie), - .io_difftest_mscratch(io_difftest_mscratch), - .io_difftest_sscratch(io_difftest_sscratch), - .io_difftest_mideleg(io_difftest_mideleg), - .io_difftest_medeleg(io_difftest_medeleg), - .io_difftest_scFailed(io_difftest_scFailed), - .io_difftest_storeCommit(io_difftest_storeCommit), - .io_difftest_storeAddr_0(io_difftest_storeAddr_0), - .io_difftest_storeAddr_1(io_difftest_storeAddr_1), - .io_difftest_storeData_0(io_difftest_storeData_0), - .io_difftest_storeData_1(io_difftest_storeData_1), - .io_difftest_storeMask_0(io_difftest_storeMask_0), - .io_difftest_storeMask_1(io_difftest_storeMask_1), - .io_difftest_sbufferResp(io_difftest_sbufferResp), - .io_difftest_sbufferAddr(io_difftest_sbufferAddr), - .io_difftest_sbufferData_0(io_difftest_sbufferData_0), - .io_difftest_sbufferData_1(io_difftest_sbufferData_1), - .io_difftest_sbufferData_2(io_difftest_sbufferData_2), - .io_difftest_sbufferData_3(io_difftest_sbufferData_3), - .io_difftest_sbufferData_4(io_difftest_sbufferData_4), - .io_difftest_sbufferData_5(io_difftest_sbufferData_5), - .io_difftest_sbufferData_6(io_difftest_sbufferData_6), - .io_difftest_sbufferData_7(io_difftest_sbufferData_7), - .io_difftest_sbufferData_8(io_difftest_sbufferData_8), - .io_difftest_sbufferData_9(io_difftest_sbufferData_9), - .io_difftest_sbufferData_10(io_difftest_sbufferData_10), - .io_difftest_sbufferData_11(io_difftest_sbufferData_11), - .io_difftest_sbufferData_12(io_difftest_sbufferData_12), - .io_difftest_sbufferData_13(io_difftest_sbufferData_13), - .io_difftest_sbufferData_14(io_difftest_sbufferData_14), - .io_difftest_sbufferData_15(io_difftest_sbufferData_15), - .io_difftest_sbufferData_16(io_difftest_sbufferData_16), - .io_difftest_sbufferData_17(io_difftest_sbufferData_17), - .io_difftest_sbufferData_18(io_difftest_sbufferData_18), - .io_difftest_sbufferData_19(io_difftest_sbufferData_19), - .io_difftest_sbufferData_20(io_difftest_sbufferData_20), - .io_difftest_sbufferData_21(io_difftest_sbufferData_21), - .io_difftest_sbufferData_22(io_difftest_sbufferData_22), - .io_difftest_sbufferData_23(io_difftest_sbufferData_23), - .io_difftest_sbufferData_24(io_difftest_sbufferData_24), - .io_difftest_sbufferData_25(io_difftest_sbufferData_25), - .io_difftest_sbufferData_26(io_difftest_sbufferData_26), - .io_difftest_sbufferData_27(io_difftest_sbufferData_27), - .io_difftest_sbufferData_28(io_difftest_sbufferData_28), - .io_difftest_sbufferData_29(io_difftest_sbufferData_29), - .io_difftest_sbufferData_30(io_difftest_sbufferData_30), - .io_difftest_sbufferData_31(io_difftest_sbufferData_31), - .io_difftest_sbufferData_32(io_difftest_sbufferData_32), - .io_difftest_sbufferData_33(io_difftest_sbufferData_33), - .io_difftest_sbufferData_34(io_difftest_sbufferData_34), - .io_difftest_sbufferData_35(io_difftest_sbufferData_35), - .io_difftest_sbufferData_36(io_difftest_sbufferData_36), - .io_difftest_sbufferData_37(io_difftest_sbufferData_37), - .io_difftest_sbufferData_38(io_difftest_sbufferData_38), - .io_difftest_sbufferData_39(io_difftest_sbufferData_39), - .io_difftest_sbufferData_40(io_difftest_sbufferData_40), - .io_difftest_sbufferData_41(io_difftest_sbufferData_41), - .io_difftest_sbufferData_42(io_difftest_sbufferData_42), - .io_difftest_sbufferData_43(io_difftest_sbufferData_43), - .io_difftest_sbufferData_44(io_difftest_sbufferData_44), - .io_difftest_sbufferData_45(io_difftest_sbufferData_45), - .io_difftest_sbufferData_46(io_difftest_sbufferData_46), - .io_difftest_sbufferData_47(io_difftest_sbufferData_47), - .io_difftest_sbufferData_48(io_difftest_sbufferData_48), - .io_difftest_sbufferData_49(io_difftest_sbufferData_49), - .io_difftest_sbufferData_50(io_difftest_sbufferData_50), - .io_difftest_sbufferData_51(io_difftest_sbufferData_51), - .io_difftest_sbufferData_52(io_difftest_sbufferData_52), - .io_difftest_sbufferData_53(io_difftest_sbufferData_53), - .io_difftest_sbufferData_54(io_difftest_sbufferData_54), - .io_difftest_sbufferData_55(io_difftest_sbufferData_55), - .io_difftest_sbufferData_56(io_difftest_sbufferData_56), - .io_difftest_sbufferData_57(io_difftest_sbufferData_57), - .io_difftest_sbufferData_58(io_difftest_sbufferData_58), - .io_difftest_sbufferData_59(io_difftest_sbufferData_59), - .io_difftest_sbufferData_60(io_difftest_sbufferData_60), - .io_difftest_sbufferData_61(io_difftest_sbufferData_61), - .io_difftest_sbufferData_62(io_difftest_sbufferData_62), - .io_difftest_sbufferData_63(io_difftest_sbufferData_63), - .io_difftest_sbufferMask(io_difftest_sbufferMask), - .io_logCtrl_log_begin(io_logCtrl_log_begin), - .io_logCtrl_log_end(io_logCtrl_log_end), - .io_logCtrl_log_level(io_logCtrl_log_level), - .io_trap_valid(io_trap_valid), - .io_trap_code(io_trap_code), - .io_trap_pc(io_trap_pc), - .io_trap_cycleCnt(io_trap_cycleCnt), - .io_trap_instrCnt(io_trap_instrCnt), - .io_uart_out_valid(io_uart_out_valid), - .io_uart_out_ch(io_uart_out_ch), - .io_uart_in_valid(io_uart_in_valid), - .io_uart_in_ch(io_uart_in_ch) -); - -endmodule - -module rcg -( - clock, - reset -); - -output clock; -output reset; - -reg clock; -reg reset; - -initial begin - clock <= 0; - reset <= 1; - #500 reset <= 0; -end - -always begin - #1 clock <= ~clock; -end - -initial begin - $vcdpluson; -end - -endmodule diff --git a/src/test/vsrc/assert.v b/src/test/vsrc/assert.v deleted file mode 100644 index 7d4f6f224fd53d3176c4620f165c85761bed577a..0000000000000000000000000000000000000000 --- a/src/test/vsrc/assert.v +++ /dev/null @@ -1,4 +0,0 @@ -import "DPI-C" function void xs_assert -( - input longint line -); diff --git a/src/test/vcs/assert.v b/src/test/vsrc/common/assert.v similarity index 100% rename from src/test/vcs/assert.v rename to src/test/vsrc/common/assert.v diff --git a/src/test/vsrc/difftest.v b/src/test/vsrc/common/difftest.v similarity index 99% rename from src/test/vsrc/difftest.v rename to src/test/vsrc/common/difftest.v index eebd23b37ed24993eddc41056ed6ed6f5b84ec07..8533c0a44a75fd3da86b12fcecacc3a14bf6b9f8 100644 --- a/src/test/vsrc/difftest.v +++ b/src/test/vsrc/common/difftest.v @@ -569,6 +569,6 @@ endmodule input [63:0] ptwData_3 ); `DIFFTEST_MOD_DPIC_CALL_BEGIN_WITH_EN(ptwResp, PtwEvent) ( - coreid, ptwResp, ptwData_0, ptwData_1, ptwData_2, ptwData_3 + coreid, ptwResp, ptwAddr, ptwData_0, ptwData_1, ptwData_2, ptwData_3 ) `DIFFTEST_MOD_DPIC_CALL_END_WITH_EN(PtwEvent) endmodule diff --git a/src/test/vsrc/ram.v b/src/test/vsrc/common/ram.v similarity index 100% rename from src/test/vsrc/ram.v rename to src/test/vsrc/common/ram.v diff --git a/src/test/vsrc/ref.v b/src/test/vsrc/common/ref.v similarity index 100% rename from src/test/vsrc/ref.v rename to src/test/vsrc/common/ref.v diff --git a/src/test/vsrc/vcs/top.v b/src/test/vsrc/vcs/top.v new file mode 100644 index 0000000000000000000000000000000000000000..dda372a61019d7788732626c2e292ee46557fdae --- /dev/null +++ b/src/test/vsrc/vcs/top.v @@ -0,0 +1,72 @@ +import "DPI-C" function void simv_init(); +import "DPI-C" function void simv_step(); + +module tb_top(); + +reg clock; +reg reset; +wire [63:0] io_logCtrl_log_begin; +wire [63:0] io_logCtrl_log_end; +wire [63:0] io_logCtrl_log_level; +wire io_perfInfo_clean; +wire io_perfInfo_dump; +wire io_uart_out_valid; +wire [ 7:0] io_uart_out_ch; +wire io_uart_in_valid; +wire [ 7:0] io_uart_in_ch; + +initial begin + clock = 0; + reset = 1; + #100 reset = 0; + if ($test$plusargs("dump-wave")) begin + $vcdplusfile("simv.vpd"); + $vcdpluson; + end +end +always #1 clock <= ~clock; + +SimTop sim( + .clock(clock), + .reset(reset), + .io_logCtrl_log_begin(io_logCtrl_log_begin), + .io_logCtrl_log_end(io_logCtrl_log_end), + .io_logCtrl_log_level(io_logCtrl_log_level), + .io_perfInfo_clean(io_perfInfo_clean), + .io_perfInfo_dump(io_perfInfo_dump), + .io_uart_out_valid(io_uart_out_valid), + .io_uart_out_ch(io_uart_out_ch), + .io_uart_in_valid(io_uart_in_valid), + .io_uart_in_ch(io_uart_in_ch) +); + +assign io_logCtrl_log_begin = 0; +assign io_logCtrl_log_end = 0; +assign io_logCtrl_log_level = 0; +assign io_perfInfo_clean = 0; +assign io_perfInfo_dump = 0; +assign io_uart_in_ch = 8'hff; + +always @(posedge clock) begin + if (!reset && io_uart_out_valid) begin + $write("%c", io_uart_out_ch); + end +end + +reg has_init; +always @(posedge clock) begin + if (reset) begin + has_init <= 1'b0; + end + else if (!has_init) begin + simv_init(); + has_init <= 1'b1; + end + + if (!reset && has_init) begin + simv_step(); + end +end + +endmodule + diff --git a/vcs.mk b/vcs.mk new file mode 100644 index 0000000000000000000000000000000000000000..54b34655a8e360f4adc09bd4f612f0136cff2fcc --- /dev/null +++ b/vcs.mk @@ -0,0 +1,32 @@ +VCS_TARGET = simv + +VCS_CSRC_DIR = $(abspath ./src/test/csrc/vcs) +VCS_CXXFILES = $(SIM_CXXFILES) $(DIFFTEST_CXXFILES) $(shell find $(VCS_CSRC_DIR) -name "*.cpp") +VCS_CXXFLAGS += -std=c++11 -static -Wall -I$(VCS_CSRC_DIR) -I$(SIM_CSRC_DIR) -I$(DIFFTEST_CSRC_DIR) +VCS_LDFLAGS += -lpthread -lSDL2 -ldl -lz + +VCS_VSRC_DIR = $(abspath ./src/test/vsrc/vcs) +VCS_VFILES = $(SIM_VSRC) $(shell find $(VCS_VSRC_DIR) -name "*.v") + +VCS_SEARCH_DIR = $(abspath ./build) +VCS_BUILD_DIR = $(abspath ./build/simv-compile) + +VCS_FLAGS += -full64 +v2k -timescale=1ns/1ns -sverilog -debug_access+all +lint=TFIPC-L +# randomize all undefined signals (instead of using X) +VCS_FLAGS += +define+RANDOMIZE_GARBAGE_ASSIGN +define+RANDOMIZE_INVALID_ASSIGN +VCS_FLAGS += +define+RANDOMIZE_MEM_INIT +define+RANDOMIZE_DELAY=0 +define+RANDOMIZE_REG_INIT +# SRAM lib defines +VCS_FLAGS += +define+UNIT_DELAY +define+no_warning +# C++ flags +VCS_FLAGS += -CFLAGS "$(VCS_CXXFLAGS)" -LDFLAGS "$(VCS_LDFLAGS)" +# search build for other missing verilog files +VCS_FLAGS += -y $(VCS_SEARCH_DIR) +libext+.v +# build files put into $(VCS_BUILD_DIR) +VCS_FLAGS += -Mdir=$(VCS_BUILD_DIR) + +$(VCS_TARGET): $(SIM_TOP_V) $(VCS_CXXFILES) $(VCS_VFILES) + vcs $(VCS_FLAGS) $(SIM_TOP_V) $(VCS_CXXFILES) $(VCS_VFILES) + +vcs-clean: + rm -rf simv csrc DVEfiles simv.daidir stack.info.* ucli.key $(VCS_BUILD_DIR) + diff --git a/Makefile.emu b/verilator.mk similarity index 100% rename from Makefile.emu rename to verilator.mk