源文件收敛到 pipelined-cpu/ 一份:删除根目录 rtl/board/testbench/tools,补充回归脚本
- 现在只有一份源文件,就在 pipelined-cpu/ 下:
srcs/rtl(13 个处理器 RTL)、srcs/board、srcs/constrs、srcs/tb、srcs/rom、
tools/(rv_asm.py、hex2vh.py、run_regress.ps1)、programs/(汇编源码与期望值)。
仓库根目录的 rtl/、board/、testbench/、tools/ 已删除(删除前逐个文件比对过 MD5,
与工程目录里的副本完全一致),说明文档仍放在最外层
cpu21_riscv_redirect_int_bpb说明.md。
- .gitignore 改为:忽略 pipelined-cpu/ 下的工程生成物(*.xpr、*.runs、*.sim、*.cache…),
只跟踪 srcs/、tools/、programs/、create_project.tcl;_tmp/、_vivado/ 等本地临时目录
继续忽略。
- 新增 tools/run_regress.ps1:一键回归脚本。编译 srcs/rtl/ → 跑 muldiv/isa/lui/mmio
四个指令测试并与 programs/*.expected 逐值比对 → 跑两个流水基线 → 跑板级顶层
(-d BOARD_ROM_FAST)检查跑马灯,最后汇总 PASS/FAIL 并返回失败数作为退出码。
编译与仿真的中间文件写在 %TEMP%\cpu21_regress,不污染工程目录。实测全部通过。
- 新增 programs/board_demo_fast.asm:快速版演示程序(延时初值 64,约 2.6 µs/步),
对应 srcs/board/cpu21_board_rom_fast.vh;仿真时用 -d BOARD_ROM_FAST 才会选到它。
- 两个测试平台增加 srcs/rom 探测路径,工程目录内直接 Run Simulation 即可加载镜像。
- 文档:目录结构一节按新布局重写;新增“回归测试”一节(脚本用法 + 期望基线数字);
上板章节的生成/仿真命令改为相对工程目录(python tools/rv_asm.py programs/…、
xvlog -d BOARD_ROM_FAST srcs/rtl/*.v …);tools 里的用法示例同步更新;
“工程分享”一节去掉已不存在的副本同步说明。
- 清理:删除本地 _tmp/(约 57 MB)、_vivado/、.Xil/ 临时目录。
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
# 指令扩展验证程序:每条被测指令的结果都通过 MMIO 写 LED 输出,最后用 halt 停机。
|
||||
# 期望输出顺序见每行注释(共 24 次输出),同时保存在同目录 isa_test.expected(每行一项 LED 值)。
|
||||
#
|
||||
# 用法(在仓库根目录执行):
|
||||
# python tools/rv_asm.py testbench/programs/isa_test.asm <仿真工作目录>/risc-v-benchmark_ccab.hex
|
||||
# 再用 testbench/tb_no_intr.v 仿真;hex 命名为 risc-v-benchmark_ccab.hex 时会被测试
|
||||
# 平台优先从仿真工作目录载入(参见 tb_no_intr.v 的 ROM 探测顺序)。
|
||||
# print / halt 是 tools/rv_asm.py 提供的双字伪指令(print 会占用 t6):
|
||||
# print = lui t6,0x1000>>12 + sw a0,0(t6)(写 MMIO 的 LED 寄存器);
|
||||
# halt = addi a7,zero,10 + ecall(ecall 停机)。
|
||||
|
||||
# ---- sltiu:立即数符号扩展后做无符号比较 ----
|
||||
addi t0, zero, 1
|
||||
addi t1, zero, -1 # t1 = 0xffffffff
|
||||
sltiu a0, t0, -1 # 1 <u 0xffffffff -> 00000001
|
||||
print
|
||||
sltiu a0, t1, 1 # 0xffffffff <u 1 -> 00000000
|
||||
print
|
||||
|
||||
# ---- xor / sll / srl / sra(原有指令回归)----
|
||||
addi t0, zero, 0xff
|
||||
addi t1, zero, -1
|
||||
xor a0, t0, t1 # 0xff ^ 0xffffffff -> ffffff00
|
||||
print
|
||||
|
||||
addi t0, zero, 1
|
||||
addi t1, zero, 31
|
||||
sll a0, t0, t1 # 1 << 31 -> 80000000
|
||||
print
|
||||
|
||||
addi t0, zero, -1
|
||||
addi t1, zero, 28
|
||||
srl a0, t0, t1 # 逻辑右移 -> 0000000f
|
||||
print
|
||||
sra a0, t0, t1 # 算术右移 -> ffffffff
|
||||
print
|
||||
|
||||
# ---- mul:无符号乘积低 32 位 ----
|
||||
addi t0, zero, 1234
|
||||
addi t1, zero, 567
|
||||
mul a0, t0, t1 # 1234*567 = 0x000aad1e
|
||||
print
|
||||
|
||||
# ---- mulh / mulhu / mulhsu:64 位乘积的高 32 位 ----
|
||||
addi t0, zero, -1 # 有符号 -1 / 无符号 0xffffffff
|
||||
addi t1, zero, -1
|
||||
mulh a0, t0, t1 # (-1)*(-1)=1 -> 00000000
|
||||
print
|
||||
mulhu a0, t0, t1 # 0xffffffff^2 -> fffffffe
|
||||
print
|
||||
addi t0, zero, -1
|
||||
addi t1, zero, 2
|
||||
mulhsu a0, t0, t1 # (-1)*2=-2 -> ffffffff
|
||||
print
|
||||
|
||||
# ---- bltu:0 <u 0xffffffff 成立(按有符号比较则不成立)----
|
||||
addi t0, zero, -1
|
||||
bltu zero, t0, bltu_ok
|
||||
addi a0, zero, 0x101 # 不应执行
|
||||
print
|
||||
bltu_ok:
|
||||
addi a0, zero, 0x601 # 00000601
|
||||
print
|
||||
|
||||
# ---- bge:有符号 >= ,(-1) >= 0 不成立,应走 fall-through ----
|
||||
addi t0, zero, -1
|
||||
bge t0, zero, bge_bad
|
||||
addi a0, zero, 0x602 # 00000602
|
||||
print
|
||||
jal zero, bge_done
|
||||
bge_bad:
|
||||
addi a0, zero, 0x102 # 不应执行
|
||||
print
|
||||
bge_done:
|
||||
|
||||
# ---- bgeu:无符号 >= ,0xffffffff >=u 0 成立 ----
|
||||
addi t0, zero, -1
|
||||
bgeu t0, zero, bgeu_ok
|
||||
addi a0, zero, 0x103 # 不应执行
|
||||
print
|
||||
bgeu_ok:
|
||||
addi a0, zero, 0x603 # 00000603
|
||||
print
|
||||
|
||||
# ---- bge 循环:从 -3 递增到 0(共 4 次输出)----
|
||||
addi s1, zero, -3
|
||||
bge_loop:
|
||||
add a0, zero, s1
|
||||
print # fffffffd / fffffffe / ffffffff / 00000000
|
||||
addi s1, s1, 1
|
||||
bge zero, s1, bge_loop
|
||||
|
||||
# ---- bgeu 循环:3 -> 1(共 3 次输出)----
|
||||
addi t0, zero, 3
|
||||
bgeu_loop:
|
||||
add a0, zero, t0
|
||||
print # 00000003 / 00000002 / 00000001
|
||||
addi t0, t0, -1
|
||||
addi t2, zero, 1
|
||||
bgeu t0, t2, bgeu_loop
|
||||
|
||||
# ---- bltu 循环:4 -> 1(共 4 次输出)----
|
||||
addi s1, zero, 4
|
||||
bltu_loop:
|
||||
add a0, zero, s1
|
||||
print # 00000004 / 00000003 / 00000002 / 00000001
|
||||
addi s1, s1, -1
|
||||
bltu zero, s1, bltu_loop
|
||||
|
||||
halt
|
||||
Reference in New Issue
Block a user