Compare commits

...

6 Commits
axi ... main

1
.gitignore vendored

@ -1,3 +1,4 @@
.vscode/
.metals/
.VSCodeCounter/
.DS_Store

@ -10,7 +10,7 @@
```
# 🚀 [RISCV-LAB](https://code.educoder.net/ppg69fuwb/riscv-lab)
# 🚀 [RISCV-LAB](https://github.com/Ciliphen/riscv-lab)
从零开始的 RV64IMAZicsr_Zifencei 流水线设计实验

@ -23,7 +23,7 @@ test:
clean:
rm -rf obj_dir
rm -rf core/Puacpu.v
rm -rf core/PuaCpu.v
perf: obj_dir/V$(TOP_NAME)
$(call git_commit, "perf test RTL") # DO NOT REMOVE THIS LINE!!!
@ -34,6 +34,17 @@ perf: obj_dir/V$(TOP_NAME)
./obj_dir/V$(TOP_NAME) $$test -rvtest -pc -perf; \
done; \
qbench: obj_dir/V$(TOP_NAME)
@echo "==================================================================="
@echo "=========================quick benchmarks=========================="
@echo "==================================================================="
@count=0; \
for test in $$(find ./test/bin/riscv-test/benchmarks \( -name "*.bin" \) | sort | grep -vE "*dhrystone*|*mt-vvadd*"); do \
count=$$((count + 1)); \
echo "Running bench $$count: $$test"; \
./obj_dir/V$(TOP_NAME) $$test -rvtest -pc -perf; \
done; \
lab1: obj_dir/V$(TOP_NAME)
$(call git_commit, "test lab1") # DO NOT REMOVE THIS LINE!!!
./obj_dir/V$(TOP_NAME) ./test/bin/lab-test/lab1.bin -rvtest -initgprs -trace 10000000 -pc
@ -67,7 +78,7 @@ TRACE_TESTS67 := $(addprefix trace_,$(TEST67))
$(TEST67): obj_dir/V$(TOP_NAME)
$(call git_commit, "test $@") # DO NOT REMOVE THIS LINE!!!
count=0; \
for test in ./test/bin/am-tests/*; do \
for test in $$(ls ./test/bin/am-tests/* | sort); do \
count=$$((count + 1)); \
echo "Running test $$count: $$test"; \
./obj_dir/V$(TOP_NAME) $$test -rvtest -pc; \
@ -81,7 +92,7 @@ $(TRACE_TESTS67): obj_dir/V$(TOP_NAME)
$(call git_commit, "trace $*") # DO NOT REMOVE THIS LINE!!!
rm -rf ./trace.txt
count=0; \
for test in ./test/bin/am-tests/*; do \
for test in $$(ls ./test/bin/am-tests/* | sort); do \
count=$$((count + 1)); \
echo "Running test $$count: $$test"; \
./obj_dir/V$(TOP_NAME) $$test -rvtest -cpu_trace -writeappend; \
@ -103,17 +114,19 @@ trace_lab8: obj_dir/V$(TOP_NAME)
lab9: obj_dir/V$(TOP_NAME)
$(call git_commit, "test lab9") # DO NOT REMOVE THIS LINE!!!
count=0; \
for test in $$(find ./test/bin/riscv-test/ \( -name "*rv64ui-p-*" -o -name "*rv64um-p-*" -o -name "*rv64mi-p-*" \) | grep -vE "*rv64ui-p-fence_i|*rv64mi-p-access"); do \
for test in $$(find ./test/bin/riscv-test/ \( -name "*rv64ui-p-*" -o -name "*rv64um-p-*" -o -name "*rv64mi-p-*" \) | sort | grep -vE "*rv64ui-p-fence_i|*rv64mi-p-access"); do \
count=$$((count + 1)); \
echo "Running test $$count: $$test"; \
./obj_dir/V$(TOP_NAME) $$test -rvtest -pc; \
done; \
echo "Total tests run: $$count";
$(MAKE) qbench
trace_lab9: obj_dir/V$(TOP_NAME)
$(call git_commit, "trace lab9") # DO NOT REMOVE THIS LINE!!!
rm -rf ./trace.txt
count=0; \
for test in $$(find ./test/bin/riscv-test/ \( -name "*rv64ui-p-*" -o -name "*rv64um-p-*" -o -name "*rv64mi-p-*" \) | grep -vE "*rv64ui-p-fence_i|*rv64mi-p-access"); do \
for test in $$(find ./test/bin/riscv-test/ \( -name "*rv64ui-p-*" -o -name "*rv64um-p-*" -o -name "*rv64mi-p-*" \) | sort | grep -vE "*rv64ui-p-fence_i|*rv64mi-p-access"); do \
count=$$((count + 1)); \
echo "Running test $$count: $$test"; \
./obj_dir/V$(TOP_NAME) $$test -rvtest -cpu_trace -writeappend; \

@ -39,15 +39,20 @@ public:
status = 0;
csr_mstatus_def *mstatus = (csr_mstatus_def *)&status;
csr_misa_def *isa = (csr_misa_def *)&misa;
if (only_modeM && run_riscv_test)
if (run_riscv_test)
{
isa->ext = rv_ext('i') | rv_ext('m') | rv_ext('u');
mstatus->mpp = M_MODE;
}
else
{
mstatus->uxl = 2;
isa->ext = rv_ext('i') | rv_ext('m') | rv_ext('u');
if (only_modeM)
{
// 只实现M-Mode的CPU
isa->ext = rv_ext('i') | rv_ext('m');
mstatus->mpp = M_MODE;
}
else
{
// 实现M-Mode和U-Mode的CPU
mstatus->uxl = 2;
isa->ext = rv_ext('i') | rv_ext('m') | rv_ext('u');
}
}
isa->mxl = 2; // rv64
isa->blank = 0;
@ -262,7 +267,7 @@ public:
assert(mstatus->spie != 2);
assert(mstatus->mpie != 2);
// mstatus->spp = nstatus->spp;
mstatus->mpp = (nstatus->mpp == 3 || nstatus->mpp == 0) ? nstatus->mpp : 0;
mstatus->mpp = (nstatus->mpp == 3 || nstatus->mpp == 0) ? nstatus->mpp : mstatus->mpp;
mstatus->mprv = nstatus->mprv;
// mstatus->sum = nstatus->sum; // always true
// mstatus->mxr = nstatus->mxr; // always true

Loading…
Cancel
Save