源文件收敛到 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,95 @@
|
||||
# 乘除法(多周期单元)测试:每个结果都写给 MMIO 的 LED 寄存器,供测试平台比对。
|
||||
# 期望输出顺序见同目录 muldiv_test.expected(共 13 个值)。
|
||||
#
|
||||
# ① mul 7 * 6 = 42 -> 0000002a
|
||||
# ② mul -5 * 4 = -20 -> ffffffec
|
||||
# ③ mulh 0x40000000 * 4 高 32 位 -> 00000001
|
||||
# ④ mulhu 0xffffffff * 2 高 32 位 -> 00000001
|
||||
# ⑤ mulhsu -1 * 0xffffffff 高 32 位 -> ffffffff
|
||||
# ⑥ divu 100 / 7 = 14 -> 0000000e
|
||||
# ⑦ remu 100 % 7 = 2 -> 00000002
|
||||
# ⑧ divu 0xffffffff / 2 = 2147483647 -> 7fffffff
|
||||
# ⑨ divu 12345 / 0 除零约定 -> ffffffff
|
||||
# ⑩ remu 12345 % 0 除零约定 -> 00003039
|
||||
# ⑪ remu 0xffffffff % 16 = 15 -> 0000000f
|
||||
# ⑫ mul 0x12345678 * 16 低 32 位 -> 23456780
|
||||
# ⑬ mulh 0x12345678 * 0x1000 高 32 位 -> 00000123
|
||||
#
|
||||
# 用法:python tools/rv_asm.py testbench/programs/muldiv_test.asm testbench/rom/muldiv_test.hex
|
||||
|
||||
# ① mul:有符号乘法的低 32 位
|
||||
addi t1, zero, 7
|
||||
addi t2, zero, 6
|
||||
mul a0, t1, t2
|
||||
print
|
||||
|
||||
# ② mul:负乘数(低 32 位)
|
||||
addi t1, zero, -5
|
||||
addi t2, zero, 4
|
||||
mul a0, t1, t2
|
||||
print
|
||||
|
||||
# ③ mulh:正数相乘,高 32 位不为 0
|
||||
lui t1, 0x40000
|
||||
addi t2, zero, 4
|
||||
mulh a0, t1, t2
|
||||
print
|
||||
|
||||
# ④ mulhu:无符号高位(0xffffffff * 2 = 0x1_fffffffe)
|
||||
addi t1, zero, -1
|
||||
addi t2, zero, 2
|
||||
mulhu a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑤ mulhsu:有符号 x 无符号(-1 * 4294967295 = 0xffffffff_00000001)
|
||||
addi t1, zero, -1
|
||||
addi t2, zero, -1
|
||||
mulhsu a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑥ divu:普通除法
|
||||
addi t1, zero, 100
|
||||
addi t2, zero, 7
|
||||
divu a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑦ remu:普通取余
|
||||
remu a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑧ divu:无符号大数
|
||||
addi t1, zero, -1
|
||||
addi t2, zero, 2
|
||||
divu a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑨ divu:除零(商为全 1)
|
||||
lui t1, 0x3
|
||||
addi t1, t1, 0x39 # t1 = 12345
|
||||
addi t2, zero, 0
|
||||
divu a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑩ remu:除零(余数为被除数)
|
||||
remu a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑪ remu:0xffffffff % 16
|
||||
addi t1, zero, -1
|
||||
addi t2, zero, 16
|
||||
remu a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑫ mul:0x12345678 * 16 的低 32 位
|
||||
lui t1, 0x12345
|
||||
addi t1, t1, 0x678
|
||||
addi t2, zero, 16
|
||||
mul a0, t1, t2
|
||||
print
|
||||
|
||||
# ⑬ mulh:0x12345678 * 0x1000 的高 32 位
|
||||
lui t2, 0x1
|
||||
mulh a0, t1, t2
|
||||
print
|
||||
|
||||
halt
|
||||
Reference in New Issue
Block a user