riscv regression with coremark test passing
diff --git a/verilog/dv/model/mt48lc8m8a2.v b/verilog/dv/model/mt48lc8m8a2.v
index 0906d4d..cf309f1 100755
--- a/verilog/dv/model/mt48lc8m8a2.v
+++ b/verilog/dv/model/mt48lc8m8a2.v
@@ -114,6 +114,8 @@
// Internal system clock
reg CkeZ, Sys_clk;
+ event error_detected;
+
// Commands Decode
wire Active_enable = ~Cs_n & ~Ras_n & Cas_n & We_n;
wire Aref_enable = ~Cs_n & ~Ras_n & ~Cas_n & We_n;
@@ -270,17 +272,17 @@
if (Debug) $display ("at time %t AREF : Auto Refresh", $time);
// Auto Refresh to Auto Refresh
if ($time - RC_chk < tRC) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRC violation during Auto Refresh", $time);
end
// Precharge to Auto Refresh
if ($time - RP_chk0 < tRP || $time - RP_chk1 < tRP || $time - RP_chk2 < tRP || $time - RP_chk3 < tRP) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRP violation during Auto Refresh", $time);
end
// Precharge to Refresh
if (Pc_b0 == 1'b0 || Pc_b1 == 1'b0 || Pc_b2 == 1'b0 || Pc_b3 == 1'b0) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: All banks must be Precharge before Auto Refresh", $time);
end
// Record Current tRC time
@@ -331,19 +333,19 @@
end
end else begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: all banks must be Precharge before Load Mode Register", $time);
end
// REF to LMR
if ($time - RC_chk < tRC) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRC violation during Load Mode Register", $time);
end
// LMR to LMR
if (MRD_chk < tMRD) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tMRD violation during Load Mode Register", $time);
end
MRD_chk = 0;
@@ -360,7 +362,7 @@
// Precharge to Activate Bank 0
if ($time - RP_chk0 < tRP) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRP violation during Activate bank 0", $time);
end
end else if (Ba == 2'b01 && Pc_b1 == 1'b1) begin
@@ -372,7 +374,7 @@
// Precharge to Activate Bank 1
if ($time - RP_chk1 < tRP) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRP violation during Activate bank 1", $time);
end
end else if (Ba == 2'b10 && Pc_b2 == 1'b1) begin
@@ -384,7 +386,7 @@
// Precharge to Activate Bank 2
if ($time - RP_chk2 < tRP) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRP violation during Activate bank 2", $time);
end
end else if (Ba == 2'b11 && Pc_b3 == 1'b1) begin
@@ -396,42 +398,42 @@
// Precharge to Activate Bank 3
if ($time - RP_chk3 < tRP) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRP violation during Activate bank 3", $time);
end
end else if (Ba == 2'b00 && Pc_b0 == 1'b0) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: Bank 0 is not Precharged.", $time);
end else if (Ba == 2'b01 && Pc_b1 == 1'b0) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: Bank 1 is not Precharged.", $time);
end else if (Ba == 2'b10 && Pc_b2 == 1'b0) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: Bank 2 is not Precharged.", $time);
end else if (Ba == 2'b11 && Pc_b3 == 1'b0) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: Bank 3 is not Precharged.", $time);
end
// Active Bank A to Active Bank B
if ((Previous_bank != Ba) && ($time - RRD_chk < tRRD)) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRRD violation during Activate bank = %d", $time, Ba);
end
// Load Mode Register to Active
if (MRD_chk < tMRD ) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tMRD violation during Activate bank = %d", $time, Ba);
end
// Auto Refresh to Activate
if ($time - RC_chk < tRC) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRC violation during Activate bank = %d", $time, Ba);
end
// Record variables for checking violation
@@ -453,14 +455,22 @@
if (($time - RAS_chk0 < tRAS) || ($time - RAS_chk1 < tRAS) ||
($time - RAS_chk2 < tRAS) || ($time - RAS_chk3 < tRAS)) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRAS violation during Precharge all bank", $time);
+ if($time - RAS_chk0 < tRAS)
+ $display("ERROR: RAS_CHK0 Rxp: %t Exd: %t",$time - RAS_chk0,tRAS);
+ if($time - RAS_chk1 < tRAS)
+ $display("ERROR: RAS_CHK1 Rxp: %t Exd: %t",$time - RAS_chk1,tRAS);
+ if($time - RAS_chk2 < tRAS)
+ $display("ERROR: RAS_CHK2 Rxp: %t Exd: %t",$time - RAS_chk2,tRAS);
+ if($time - RAS_chk3 < tRAS)
+ $display("ERROR: RAS_CHK3 Rxp: %t Exd: %t",$time - RAS_chk3,tRAS);
end
// tWR violation check for write
if (($time - WR_chk[0] < tWRp) || ($time - WR_chk[1] < tWRp) ||
($time - WR_chk[2] < tWRp) || ($time - WR_chk[3] < tWRp)) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tWR violation during Precharge all bank", $time);
end
end else if (Addr[10] == 1'b0) begin
@@ -471,7 +481,7 @@
// Activate to Precharge Bank 0
if ($time - RAS_chk0 < tRAS) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRAS violation during Precharge bank 0", $time);
end
end else if (Ba == 2'b01) begin
@@ -481,7 +491,7 @@
// Activate to Precharge Bank 1
if ($time - RAS_chk1 < tRAS) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRAS violation during Precharge bank 1", $time);
end
end else if (Ba == 2'b10) begin
@@ -491,7 +501,7 @@
// Activate to Precharge Bank 2
if ($time - RAS_chk2 < tRAS) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRAS violation during Precharge bank 2", $time);
end
end else if (Ba == 2'b11) begin
@@ -501,14 +511,14 @@
// Activate to Precharge Bank 3
if ($time - RAS_chk3 < tRAS) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tRAS violation during Precharge bank 3", $time);
end
end
// tWR violation check for write
if ($time - WR_chk[Ba] < tWRp) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display ("at time %t ERROR: tWR violation during Precharge bank %d", $time, Ba);
end
end
@@ -549,13 +559,13 @@
if ((Ba == 2'b00 && Pc_b0 == 1'b1) || (Ba == 2'b01 && Pc_b1 == 1'b1) ||
(Ba == 2'b10 && Pc_b2 == 1'b1) || (Ba == 2'b11 && Pc_b3 == 1'b1)) begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display("at time %t ERROR: Cannot Read or Write - Bank %d is not Activated", $time, Ba);
end
// Activate to Read or Write
if ((Ba == 2'b00) && ($time - RCD_chk0 < tRCD))
begin
- //->tb.test_control.error_detected;
+ ->error_detected;
$display("at time %t ERROR: tRCD violation during Read or Write to Bank 0", $time);
end
diff --git a/verilog/dv/riscv_regress/Makefile b/verilog/dv/riscv_regress/Makefile
index 8aac4cc..1958002 100644
--- a/verilog/dv/riscv_regress/Makefile
+++ b/verilog/dv/riscv_regress/Makefile
@@ -15,7 +15,7 @@
override ARCH := IMC
override VECT_IRQ := 1
override IPIC := 1
- override TCM := 1
+ override TCM := 0
override SIM_CFG_DEF := SCR1_CFG_RV32IMC_MAX
else
ifeq ($(CFG), BASE)
@@ -23,7 +23,7 @@
override ARCH := IC
override VECT_IRQ := 1
override IPIC := 1
- override TCM := 1
+ override TCM := 0
override SIM_CFG_DEF := SCR1_CFG_RV32IC_BASE
else
ifeq ($(CFG), MIN)
@@ -31,7 +31,7 @@
override ARCH := EC
override VECT_IRQ := 0
override IPIC := 0
- override TCM := 1
+ override TCM := 0
override SIM_CFG_DEF := SCR1_CFG_RV32EC_MIN
else
# CUSTOM configuration. Parameters can be overwritten
@@ -156,8 +156,8 @@
export CROSS_PREFIX ?= riscv64-unknown-elf-
export RISCV_GCC ?= $(CROSS_PREFIX)gcc
export RISCV_OBJDUMP ?= $(CROSS_PREFIX)objdump -D
-export RISCV_ROM_OBJCOPY ?= $(CROSS_PREFIX)objcopy -j .text.init -j .text -O verilog
-export RISCV_RAM_OBJCOPY ?= $(CROSS_PREFIX)objcopy -R .text.init -R .text -O verilog
+export RISCV_ROM_OBJCOPY ?= $(CROSS_PREFIX)objcopy -j .text.init -j .text -j .rodata -j .rodata.str1.4 -O verilog
+export RISCV_RAM_OBJCOPY ?= $(CROSS_PREFIX)objcopy -R .text.init -R .text -R .rodata -R .rodata.str1.4 -O verilog
export RISCV_READELF ?= $(CROSS_PREFIX)readelf -s
ifneq (,$(findstring e,$(ARCH_lowercase)))
@@ -179,10 +179,10 @@
endif
# Comment this target if you don't want to run the isr_sample
-TARGETS += isr_sample
+#TARGETS += isr_sample
# Comment this target if you don't want to run the coremark
-#TARGETS += coremark
+TARGETS += coremark
# Comment this target if you don't want to run the dhrystone
#TARGETS += dhrystone21
@@ -215,7 +215,8 @@
$(MAKE) -C $(tst_dir)/benchmarks/dhrystone21 EXT_CFLAGS="$(EXT_CFLAGS)" ARCH=$(ARCH)
coremark: | $(bld_dir)
- -$(MAKE) -C $(tst_dir)/benchmarks/coremark EXT_CFLAGS="$(EXT_CFLAGS)" ARCH=$(ARCH)
+ @echo "core marks"
+ $(MAKE) -C $(tst_dir)/benchmarks/coremark EXT_CFLAGS="$(EXT_CFLAGS)" ARCH=$(ARCH)
riscv_isa: | $(bld_dir)
$(MAKE) -C $(tst_dir)/riscv_isa ARCH=$(ARCH)
diff --git a/verilog/dv/riscv_regress/user_risc_regress_tb.v b/verilog/dv/riscv_regress/user_risc_regress_tb.v
index 37d6fb2..57964a4 100644
--- a/verilog/dv/riscv_regress/user_risc_regress_tb.v
+++ b/verilog/dv/riscv_regress/user_risc_regress_tb.v
@@ -177,9 +177,10 @@
`ifdef WFDUMP
initial begin
$dumpfile("simx.vcd");
- $dumpvars(2, user_risc_regress_tb);
- $dumpvars(3, user_risc_regress_tb.u_top.u_sdram_ctrl);
- $dumpvars(4, user_risc_regress_tb.u_top.u_riscv_top);
+ $dumpvars(1, user_risc_regress_tb);
+ $dumpvars(0, user_risc_regress_tb.u_top.u_sdram_ctrl);
+ $dumpvars(0, user_risc_regress_tb.u_sdram8);
+ //$dumpvars(1, user_risc_regress_tb.u_top.u_riscv_top);
end
`endif
@@ -234,7 +235,7 @@
repeat (2) @(posedge clock);
#1;
//------------ SDRAM Config - 1
- wb_user_core_write('h3000_0010,'h2F17_2246);
+ wb_user_core_write('h3000_0010,'h2F17_2266);
repeat (2) @(posedge clock);
#1;
@@ -293,7 +294,7 @@
);
-logic [15:0] riscv_dmem_req_cnt; // cnt dmem req
+logic [31:0] riscv_dmem_req_cnt; // cnt dmem req
initial
begin
riscv_dmem_req_cnt = 0;
@@ -302,6 +303,8 @@
always @(posedge u_top.wbd_riscv_dmem_stb_i)
begin
riscv_dmem_req_cnt = riscv_dmem_req_cnt+1;
+ if((riscv_dmem_req_cnt %200) == 0)
+ $display("STATUS: Total Dmem Req Cnt: %d ",riscv_dmem_req_cnt);
end
diff --git a/verilog/rtl/digital_core/src/glbl_cfg.sv b/verilog/rtl/digital_core/src/glbl_cfg.sv
index bf69fd0..c852e19 100644
--- a/verilog/rtl/digital_core/src/glbl_cfg.sv
+++ b/verilog/rtl/digital_core/src/glbl_cfg.sv
@@ -446,7 +446,7 @@
//-----------------------------------------------------------------------
// reg-4
// recommended Default value:
-// 1'b1,3'h3,2'h3,4'h1,4'h7',4'h2,4'h2,4'h4,2'b01,2'b10 = 32'h2F17_2246
+// 1'b1,3'h3,2'h3,4'h1,4'h7',4'h2,4'h2,4'h6,2'b01,2'b10 = 32'h2F17_2266
//-----------------------------------------------------------------
assign cfg_sdr_width = reg_4[1:0] ; // 2'b10 // 2'b00 - 32 Bit SDR, 2'b01 - 16 Bit SDR, 2'b1x - 8 Bit
assign cfg_colbits = reg_4[3:2] ; // 2'b00 8 Bit column address, 2'b01 - 9 Bit column address,
diff --git a/verilog/rtl/syntacore/scr1/sim/tests/benchmarks/coremark/Makefile b/verilog/rtl/syntacore/scr1/sim/tests/benchmarks/coremark/Makefile
index 90ba866..3903cd9 100644
--- a/verilog/rtl/syntacore/scr1/sim/tests/benchmarks/coremark/Makefile
+++ b/verilog/rtl/syntacore/scr1/sim/tests/benchmarks/coremark/Makefile
@@ -1,5 +1,5 @@
src_dir := $(dir $(lastword $(MAKEFILE_LIST)))
-depend_dir := $(src_dir)/../../../dependencies/coremark
+depend_dir := $(src_dir)/../../../../dependencies/coremark
ifeq ("$(ITERATIONS)","")
ITERATIONS=1
@@ -15,10 +15,12 @@
include $(inc_dir)/common.mk
+
default: log_requested_tgt $(bld_dir)/coremark.elf $(bld_dir)/coremark.hex $(bld_dir)/coremark.dump
log_requested_tgt:
echo coremark.hex>> $(bld_dir)/test_info
+ echo $(inc_dir)/common.mk
clean:
$(RM) $(c_objs) $(asm_objs) $(bld_dir)/coremark.hex $(bld_dir)/coremark.dump
diff --git a/verilog/rtl/syntacore/scr1/sim/tests/common/common.mk b/verilog/rtl/syntacore/scr1/sim/tests/common/common.mk
index 8a1d054..2d35442 100644
--- a/verilog/rtl/syntacore/scr1/sim/tests/common/common.mk
+++ b/verilog/rtl/syntacore/scr1/sim/tests/common/common.mk
@@ -58,6 +58,9 @@
$(bld_dir)/%.hex: $(bld_dir)/%.elf
$(RISCV_ROM_OBJCOPY) $^ $@
$(RISCV_RAM_OBJCOPY) $^ $@.ram
+ #assign 0x2000_0xxx to 0x0000_0xxx to map to sdram
+ sed -i 's/@20000/@00000/g' $@.ram
+
$(bld_dir)/%.dump: $(bld_dir)/%.elf
$(RISCV_OBJDUMP) $^ > $@
diff --git a/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld b/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
index d907410..cb87b13 100644
--- a/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
+++ b/verilog/rtl/syntacore/scr1/sim/tests/common/link_tcm.ld
@@ -27,8 +27,7 @@
MEMORY {
ROM (rxx) : ORIGIN = 0x0, LENGTH = 64K
- RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 64K
- TCM (rwx) : ORIGIN = 0x20010000, LENGTH = 64K
+ RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 128K
}
STACK_SIZE = 1024;
@@ -60,7 +59,7 @@
*(sc_test_section)
. = ALIGN(CL_SIZE);
PROVIDE(__TEXT_END__ = .);
- } >TCM AT>RAM
+ } >ROM
.rodata ALIGN(CL_SIZE) : {
__global_pointer$ = . + 0x800;
@@ -68,7 +67,7 @@
. = ALIGN(CL_SIZE);
LONG(0x13);
. = ALIGN(CL_SIZE);
- } >TCM AT>RAM
+ } >ROM
/* data segment */
@@ -76,14 +75,14 @@
PROVIDE(__DATA_START__ = .);
*(.data .data.*)
. = ALIGN(CL_SIZE);
- } >TCM AT>RAM
+ }>RAM
.sdata ALIGN(CL_SIZE) : {
*(.sdata .sdata.* .gnu.linkonce.s.*)
. = ALIGN(CL_SIZE);
PROVIDE(__DATA_END__ = .);
- } >TCM AT>RAM
+ } >RAM
/* thread-local data segment */
.tdata ALIGN(CL_SIZE) : {
@@ -92,14 +91,14 @@
*(.tdata .tdata.*)
PROVIDE(_tdata_end = .);
. = ALIGN(CL_SIZE);
- } >TCM AT>RAM
+ } >RAM
.tbss ALIGN(CL_SIZE) : {
PROVIDE(_tbss_begin = .);
*(.tbss .tbss.*)
. = ALIGN(CL_SIZE);
PROVIDE(_tbss_end = .);
- } >TCM AT>RAM
+ } >RAM
/* bss segment */
.sbss ALIGN(CL_SIZE) : {
@@ -107,25 +106,25 @@
*(.sbss .sbss.* .gnu.linkonce.sb.*)
*(.scommon)
. = ALIGN(CL_SIZE);
- } >TCM AT>RAM
+ } >RAM
.bss ALIGN(CL_SIZE) : {
*(.dynbss) *(.bss .bss.* .gnu.linkonce.b.*) *(COMMON)
. = ALIGN(CL_SIZE);
PROVIDE(__BSS_END__ = .);
- } >TCM AT>RAM
+ } >RAM
_end = .;
PROVIDE(__end = .);
/* End of uninitalized data segement */
- .stack ORIGIN(TCM) + LENGTH(TCM) - STACK_SIZE : {
+ .stack ORIGIN(RAM) + LENGTH(RAM) - STACK_SIZE : {
PROVIDE(__STACK_START__ = .);
. += STACK_SIZE;
PROVIDE(__C_STACK_TOP__ = .);
PROVIDE(__STACK_END__ = .);
- } >TCM
+ } >RAM
/DISCARD/ : {
*(.eh_frame .eh_frame.*)