Anccend
|
fed01f5910
|
工程整理:源文件复制进 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 以及两个
流水基线全部通过(与改动前一致)。
|
2026-09-13 18:59:25 +08:00 |
|
Anccend
|
556fbe9530
|
目录整理:RTL/上板/仿真分开存放,测试 ROM 镜像归入 testbench/rom
- rtl/:12 个可综合的处理器源文件(顶层 cpu21_riscv_redirect_int_bpb.v,其余为各功能单元)。
- board/:板级顶层 cpu21_board_top.v、引脚约束 cpu21_board_top.xdc、片内 ROM 初始化
cpu21_board_rom.vh 与短延时版本 cpu21_board_rom_fast.vh。
- testbench/:保留三个测试平台;ROM 镜像统一放到 testbench/rom/,测试程序源码与期望值
仍在 testbench/programs/(其中的 .hex 是 RARS 原始输出,与 rom/ 里改过显示方式的版本
内容不同,两者都保留)。
- 同步更新:两个测试平台的 ROM 探测路径改为 testbench/rom/(并在头注释里补充说明:
PowerShell 会把 -generic_top/--testplusarg 参数里的 "=" 拆开、Verilog 字符串中的
路径要用正斜杠);tools/hex2vh.py 的用法示例指向 board/cpu21_board_top.v;
说明文档新增“目录结构”一节并同步所有路径引用;.gitignore 补充 .Xil/。
- 清理:删除 *.hex.lst 中间文件与空的 .Xil/ 目录。
- 验证:isa_test 24/24、lui_test 4/4、mmio_test 5/5 三项回归通过;两个基线(5560 / 6003
周期)与整理前一致;板级仿真(默认 ROM 首次写入 LED=0001、快速 ROM 跑马灯循环)正常;
Vivado 工程源文件路径同步到 rtl/ 与 board/ 后综合通过(LUT 5276、23 个引脚,与整理前
完全一致),因此已有 bit 文件仍然有效。
|
2026-09-13 18:06:21 +08:00 |
|
Anccend
|
1ae6fe6ebe
|
上板支持:Nexys4DDR 顶层、片内 ROM/RAM 与 MMIO 跑马灯演示
- 新增 cpu21_board_top.v:上板顶层。处理器顶层暴露了 775 位调试端口,直接作为
实现顶层会因 IO 超限无法布局布线([Place 30-415] IO Placement failed due to
overutilization),本模块只引出板上真正需要的 23 个引脚
(clk100 / rst_n / go / irq_sw[2:0] / led[15:0] / led_we)。
* 100 MHz 经 CLK_DIV=16 分频到 6.25 MHz:ALU 的除法/取余是组合电路,
100 MHz 下 WNS=-84.126 ns(325 级逻辑)无法收敛,分频后 WNS=+6.083 ns。
* 分频时钟由 Vivado 自动插入 BUFG;RTL 中不例化原语,以便跨工具仿真。
* 复位同步器、片内 ROM(1024x32,组合读,`include cpu21_board_rom.vh`)、
片内 RAM(1024x32,字节写使能,只响应地址 <4KB,避免与 MMIO 地址别名)。
- 新增 cpu21_board_top.xdc:Nexys4DDR 引脚约束 + create_generated_clock。
- 新增 tools/hex2vh.py:把 hex 机器码转成 rom[i] = 32'h...; 初始化包含文件。
- 新增 testbench/programs/board_demo.asm 与 testbench/tb_board_top.v:
16 步跑马灯演示程序(通过 MMIO 写 LED)。仿真验证:默认 ROM 下首次写入
LED=0001,快速 ROM 下完整序列 0001..8000 循环。
- 新增 cpu21_board_rom.vh / cpu21_board_rom_fast.vh,由 BOARD_ROM_FAST 宏选择。
- tools/rv_asm.py:读源文件时兼容带 BOM 的 UTF-8。
- 测试资源:补齐 lui_test.expected;修正 mmio_test.expected(print 由
lui+sw 实现,本身就是一次 LED 写,共 5 次)。三个回归全部通过:
isa_test 24/24、lui_test 4/4、mmio_test 5/5。
- .gitignore:忽略 _tmp/、_vivado/、*.vcd、*.pb、*.hex.lst。
- 说明文档:模块划分表补上上板相关模块,新增“上板(Nexys4DDR + Vivado)”
章节(引脚分配、分频原因、ROM/RAM 组织、ROM 生成流程、Vivado 工程设置、
实现结果)。
实现结果:synth_design / route_design / write_bitstream 全部完成,
LUT 5400 (8.52%)、LUTRAM 512、FF 2507、DSP 12、IOB 23 (10.95%),
bit 文件为 pipelined-cpu/pipelined-cpu.runs/impl_1/cpu21_board_top.bit
(Vivado 工程目录被 .gitignore 排除,不入库)。
|
2026-09-13 17:37:44 +08:00 |
|
Anccend
|
03ac91bf65
|
初版,Logisim转换Verilog
|
2026-09-12 13:18:24 +08:00 |
|