diff --git a/README.md b/README.md index cccac5e..f878df6 100644 --- a/README.md +++ b/README.md @@ -542,6 +542,74 @@ CPU 时钟 6.25 MHz → 50 MHz(快 8 倍),并且乘除法不再位于关 并用 `check_isa.py` 逐条反汇编检查有没有用到未实现的指令。实测 842 条指令全部合法; - **上板切换**:Vivado 里定义宏 `SAOLEI_ROM` 就加载扫雷程序,不定义仍是下面的跑马灯。 +### 扫雷:怎么烧到板上 + +```powershell +# 1) 生成扫雷的 ROM 镜像(改了 saolei/sw/*.c 之后必须重跑这一步) +cd saolei +powershell -ExecutionPolicy Bypass -File tools\build.ps1 ` + -Prefix 'C:\Users\29653\tools\risc-v\xpack-riscv-none-elf-gcc-15.2.0-1\bin\risc-none-elf-' + +# 2) 一键建"扫雷专用"工程(先清掉旧的同名工程再重建;sources_1 和 sim_1 都固定定义 SAOLEI_ROM) +cd ..\pipelined-cpu +& 'C:\Xilinx\Vivado\2020.2\bin\vivado.bat' -mode batch -source create_project_saolei.tcl -log create_saolei.log +# 产出 pipelined-cpu-saolei.xpr(和通用工程 pipelined-cpu 互不影响) +``` + +然后在 Vivado GUI 里依次点:`Run Synthesis` → `Run Implementation` → `Generate Bitstream` +→ `Open Hardware Manager` → `Open Target / Auto Connect` → `Program Device`。 + +板上操作: + +| 板子上 | 作用 | +| ------------------------- | ---------------------------------------------------- | +| BTNU / BTND / BTNL / BTNR | 光标 上 / 下 / 左 / 右 | +| BTNC | 左键:开始界面确认 / 关卡里开格 | +| SW3 拨上 + BTNC | 插旗 / 取消旗 | +| SW0 / SW1 / SW2 | **别动**,它们会 OR 进外部中断线,一拨就可能触发中断 | + +开始界面的光标默认停在 START 按钮上,按 BTNC 进关卡;关卡里把光标移到盘面**左上角那个黄格** +再按 BTNC 就退回开始界面(分出胜负后随便点一下也能退)。 + +### 扫雷:没有 VGA 显示器怎么玩(命令行仿真 + 每步截图) + +显存是内存映射的(`0x2000` 起,40×30 字节,每格 1 字节 = 字形[3:0] + 颜色[6:4]), +所以仿真里可以把整屏 dump 出来,再按 `cpu21_vga.v` 的字库/调色板还原成 PNG —— 等价于给 VGA 截图。 +`tools/play_saolei.tcl` 更进一步:用 `cmd.txt` 往仿真里"喂"按键,每按一步自动存一张 PNG。 + +```powershell +# ① 建仿真快照(只在第一次,或改了 RTL 之后需要重跑) +cd <随便一个空目录,例如 D:\risc-v-cpu\_tmp\saolei_sim> +$p = 'D:\Desktop\risc-v-cpu\pipelined-cpu' +$rtl = (Get-ChildItem "$p\srcs\rtl\*.v").FullName +& 'C:\Xilinx\Vivado\2020.2\bin\xvlog.bat' -d SAOLEI_ROM -i "$p\srcs\board" -i "$p\srcs\rtl" $rtl "$p\srcs\board\cpu21_board_top.v" "$p\srcs\tb\tb_saolei_play.v" +& 'C:\Xilinx\Vivado\2020.2\bin\xelab.bat' -d SAOLEI_ROM -top tb_saolei_play -snapshot saolei_play + +# ② 开始玩(之后是交互式的,命令直接敲在 xsim 提示符下) +& 'C:\Xilinx\Vivado\2020.2\bin\xsim.bat' saolei_play +``` + +到 `xsim%` 提示符后(**`source` 要带 `-encoding utf-8`**,否则 xsim 按 GBK 读脚本会乱码): + +```text +source -encoding utf-8 <仓库路径>/pipelined-cpu/tools/play_saolei.tcl + +k c 左键点击(进关卡用这个) +k u/d/l/r 光标 上/下/左/右(也认 w/s/a/d) +k f 插旗模式点击 k p 只切换插旗开关 +k z 复位 k uucc 连写多个动作(上、上、点、点) +shot 重画 + 存图 view 用看图器打开最新那张图 +help / quit +``` + +- **每按一个动作都会自动存一张 PNG**:`shots/001_c.png`、`shots/002_u.png`… 可以直接贴进报告; + 同时会覆盖 `shots/latest.png` —— 在 VS Code 里打开这一张,每操作一步它自动刷新,等于边玩边看屏幕; +- 仿真速度约 1 ms 仿真时间 = 0.5 s 墙钟,所以每一步等 1~2 秒; +- 只想"看一局"不想手动操作:用 `srcs/tb/tb_saolei.v`(`-top tb_saolei`)会自动打完一整局 + (首击展开 → 全盘扫描 → 216/216 通关),并 dump 出 `fb_00_start.txt` … `fb_13_after_sweep.txt`, + 再用 `py saolei\tools\fb2png.py ` 渲染成 640×480 PNG; +- 光标格在画面里是**黄色 2 像素常亮方框**,VGA 上和截图里都能一眼看到指针在哪。 + ## 回归测试 工程里带了一个 xsim 回归脚本,在 `pipelined-cpu/` 目录下运行: