feat(saolei): 交互玩扫雷每一步自动出 PNG

- play_saolei.tcl: k 每执行一个按键动作就存 shots/NNN_<按键>.png,并覆盖
  shots/latest.png(在 VS Code 里开着 latest.png 即可每步自动刷新);新增 view 命令
- fb2png.py: 新增 --quiet(只写 PNG 不打印,供脚本批量截图)
- tb_saolei*.v: 仅格式调整(case 分支拆行),无语义变化
实测:k cuuuuc -> shots/001_c.png ... 006_c.png,每张 640x480 正常
This commit is contained in:
2026-09-19 20:01:28 +08:00
parent 132c9202f6
commit 713ee99941
4 changed files with 113 additions and 38 deletions
+36 -18
View File
@@ -84,19 +84,29 @@ module tb_saolei_play;
input integer hold_us;
begin
case (which)
1: btnu = 1'b1;
2: btnd = 1'b1;
3: btnl = 1'b1;
4: btnr = 1'b1;
default: go = 1'b1;
1:
btnu = 1'b1;
2:
btnd = 1'b1;
3:
btnl = 1'b1;
4:
btnr = 1'b1;
default:
go = 1'b1;
endcase
#(hold_us * 1000);
case (which)
1: btnu = 1'b0;
2: btnd = 1'b0;
3: btnl = 1'b0;
4: btnr = 1'b0;
default: go = 1'b0;
1:
btnu = 1'b0;
2:
btnd = 1'b0;
3:
btnl = 1'b0;
4:
btnr = 1'b0;
default:
go = 1'b0;
endcase
#(200 * 1000);
end
@@ -109,12 +119,18 @@ module tb_saolei_play;
input [7:0] ch;
begin
case (ch)
8'h75, 8'h77: pulse(1, 20); // u / w 上
8'h64, 8'h73: pulse(2, 20); // d / s 下
8'h6C, 8'h61: pulse(3, 20); // l / a 左
8'h72: pulse(4, 20); // r 右
8'h63: pulse(0, 30); // c 左键点击
8'h67: pulse(0, 30); // g go 键(同一次点击)
8'h75, 8'h77:
pulse(1, 20); // u / w 上
8'h64, 8'h73:
pulse(2, 20); // d / s 下
8'h6C, 8'h61:
pulse(3, 20); // l / a 左
8'h72:
pulse(4, 20); // r 右
8'h63:
pulse(0, 30); // c 左键点击
8'h67:
pulse(0, 30); // g go 键(同一次点击)
8'h66: begin // f 插旗模式点击
sw_flag = 1'b1;
#(30 * 1000);
@@ -133,7 +149,8 @@ module tb_saolei_play;
rst_n = 1'b1;
#(500 * 1000);
end
default: ; // 其它字符忽略
default:
; // 其它字符忽略
endcase
end
endtask
@@ -152,7 +169,8 @@ module tb_saolei_play;
chc = $fgetc(cfp);
$fclose(cfp);
cfp = $fopen("cmd.txt", "w"); // 处理掉就清空,避免重复执行
if (cfp != 0) $fclose(cfp);
if (cfp != 0)
$fclose(cfp);
if ((chc > 0) && (chc != 8'h0A) && (chc != 8'h0D) && (chc != 8'h20))
do_key(chc[7:0]);
end