工程整理:源文件复制进 pipelined-cpu/,提供一键重建脚本 create_project.tcl

- pipelined-cpu/ 变成自包含的工程目录,所有设计文件都在里面,可以整个拷给别人:
  srcs/rtl(12 个处理器 RTL)、srcs/board(板级顶层 + 片内 ROM 初始化,含 __FAST 版)、
  srcs/constrs(引脚约束 + 板级母版)、srcs/tb(三个测试平台)、srcs/rom(ROM 镜像),
  另外附上 tools/(迷你汇编器)与 programs/(测试程序源码与期望值)。
  Vivado 工程里的引用全部改到这些副本上(sources_1 ×15、constrs_1 ×2、sim_1 ×12、sim_2 ×2),
  并用副本重新综合通过。
- 新增 pipelined-cpu/create_project.tcl:手写的一键重建脚本。
  * 用 [info script] 定位自身目录,整个文件夹拷到任意路径都能用;
  * 就地创建工程(源文件留在 srcs/ 下不动),带文件自检与“工程已存在”提示;
  * 配好三个 fileset 的顶层、cpu21_board_rom(.vh) 的 Verilog Header 类型、
    xsim.simulate.runtime=all。
  实测:把工程文件夹拷到别处、从另一个工作目录运行脚本,工程重建成功且
  synth_design Complete!(分享包只有 create_project.tcl + srcs/ + tools/ + programs/ +
  说明文档,约 0.3 MB)。
- testbench 从 sources_1 移到仿真 fileset(sim_1 / sim_2):不再需要
  USED_IN_SYNTHESIS=0 这类设置,也彻底避免“testbench 被当成顶层”的
  [Place 30-494] The design is empty 问题。
- 两个 CPU 测试平台增加 srcs/rom/ 探测路径(含 GUI 仿真目录向上 5 层的相对路径),
  别人拿到工程后不用额外配置就能直接 Run Simulation。
- .gitignore:放行 pipelined-cpu/create_project.tcl(其余工程生成物仍不入库,
  这样重建脚本不会因为工程目录被忽略而丢失)。
- 说明文档新增“工程分享(Tcl 一键重建)”一节:目录结构、脚本用法、分享前应删除的
  生成目录、仓库源码与工程副本的同步命令,以及用 write_project_tcl 自动生成版本时
  需要改的两行(origin_dir / create_project 目标)。
- 验证:muldiv_test 13/13、isa_test 24/24、lui_test 4/4、mmio_test 5/5 以及两个
  流水基线全部通过(与改动前一致)。
This commit is contained in:
2026-09-13 18:59:25 +08:00
parent 4a81685066
commit fed01f5910
5 changed files with 187 additions and 3 deletions
+5
View File
@@ -238,6 +238,11 @@ module tb_no_intr #(
if (!rom_loaded) load_rom_image({"../testbench/rom/", ROM_FILE}, rom_loaded);
if (!rom_loaded) load_rom_image({"../../../testbench/rom/", ROM_FILE}, rom_loaded);
if (!rom_loaded) load_rom_image({"../../../../../testbench/rom/", ROM_FILE}, rom_loaded);
// 分享出去的 Vivado 工程里的镜像目录(工程目录/srcs/rom/),GUI 仿真的工作
// 目录是 <proj>.sim/sim_1/behav/xsim,所以需要向上 5 层。
if (!rom_loaded) load_rom_image({"srcs/rom/", ROM_FILE}, rom_loaded);
if (!rom_loaded) load_rom_image({"../srcs/rom/", ROM_FILE}, rom_loaded);
if (!rom_loaded) load_rom_image({"../../../../../srcs/rom/", ROM_FILE}, rom_loaded);
if (!rom_loaded)
$display(
"WARNING: no ROM image found for \"%0s\" - the ROM stays filled with NOPs (0x00000013).",