Files
LA32R/run.bat
2025-06-18 18:16:54 +08:00

133 lines
5.8 KiB
Batchfile
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
@echo off
:: 设置窗口标题
TITLE LA32R CPU Simulation Automation
:: ============================================================================
:: LA32R 单周期 CPU 自动化仿真脚本 (适配Vivado项目结构)
::
:: 功能:
:: 1. 自动定义项目相关的文件和目录路径。
:: 2. 切换到正确的仿真工作目录 (%PROJECT_ROOT%Hardware\LA32R.sim\sim_1\behav\xsim)。
:: 3. 清理上一次仿真生成的临时文件和目录。
:: 4. 调用Python汇编器 (assembler.py) 将 "program.asm" 编译为 "program.hex" 机器码文件。
:: (通过pushd/popd确保Python脚本在正确的Software目录下执行)
:: 5. 创建Verilog源文件列表 (verilog_files.f)。
:: 6. 调用Vivado的xvlog进行Verilog代码编译。
:: 7. 调用Vivado的xelab进行设计阐述和仿真快照构建。
:: 8. 调用Vivado的xsim运行仿真并执行到脚本结束或指定时间。
::
:: 使用方法:
:: - 将此脚本 (run.bat) 放置在项目的根目录下 (与Hardware和Software文件夹同级)。
:: - 确保系统中已安装Python并且可以从命令行调用。
:: - 确保 Vivado (例如 Vivado 2018.1) 的 `bin` 目录已添加到系统的 PATH 环境变量中,
:: 以便脚本可以找到 `xvlog`, `xelab`, `xsim` 等命令。
:: - 直接双击运行此脚本,或在命令行中导航到项目根目录并执行 `run.bat`。
:: ============================================================================
:: --- 步骤 0: 定义项目路径 ---
:: %~dp0 会自动获取当前脚本所在的目录路径,并将其设置为项目根目录
set "PROJECT_ROOT=%~dp0"
set "SOFTWARE_DIR=%PROJECT_ROOT%Software"
set "DESIGN_SRC_DIR=%PROJECT_ROOT%Hardware\LA32R.srcs\sources_1\new"
set "SIM_SRC_DIR=%PROJECT_ROOT%Hardware\LA32R.srcs\sim_1\new"
:: Vivado仿真运行的典型目录结构
set "SIM_RUN_DIR=%PROJECT_ROOT%Hardware\LA32R.sim\sim_1\behav\xsim"
echo 项目根目录: %PROJECT_ROOT%
echo 仿真运行目录: %SIM_RUN_DIR%
echo.
:: --- 准备工作:切换到仿真运行目录 ---
:: 如果仿真运行目录不存在,则创建它,然后切换到该目录
if not exist "%SIM_RUN_DIR%" ( mkdir "%SIM_RUN_DIR%" )
cd /d "%SIM_RUN_DIR%"
:: --- 步骤 1: 清理旧的仿真文件 ---
echo [步骤 1] 清理旧的仿真文件...
if exist xsim.dir ( rd /s /q xsim.dir )
if exist *.log ( del *.log )
if exist *.jou ( del *.jou )
if exist verilog_files.f ( del verilog_files.f )
if exist webtalk*.xml ( del webtalk*.xml )
if exist webtalk*.tcl ( del webtalk*.tcl )
if exist "%PROJECT_ROOT%"simulation*.log ( del "%PROJECT_ROOT%simulation*.log" )
echo 清理完成。
echo.
:: --- 步骤 2: 运行Python汇编器生成机器码 ---
echo [步骤 2] 汇编测试程序 (assembler.py)...
:: 使用 pushd/popd 命令临时切换到Software目录执行Python脚本,
:: 以确保脚本内部的相对路径 (如 "program.asm") 能正确解析, 然后自动切回当前目录。
pushd "%SOFTWARE_DIR%"
python assembler.py
popd
:: 检查 "program.hex" 是否成功生成在Software目录下
if not exist "%SOFTWARE_DIR%\program.hex" (
echo [错误] 生成 program.hex 文件失败。脚本将中止。
goto end
)
:: Verilog的 instruction_memory 模块配置为从相对路径读取 program.hex,
:: 因此不再需要将 program.hex 复制到仿真运行目录。
echo 汇编完成。Verilog将从其预设的相对路径读取 program.hex。
echo.
:: --- 步骤 3: 创建文件列表并编译Verilog源文件 ---
echo [步骤 3] 创建文件列表 (verilog_files.f) 并编译Verilog源文件...
:: 创建一个名为 "verilog_files.f" 的文件列表,其中包含所有设计源文件和仿真源文件的绝对路径。
:: Vivado的xvlog命令将使用此文件列表进行编译。
(
echo "%DESIGN_SRC_DIR%\data_memory.v"
echo "%DESIGN_SRC_DIR%\instruction_memory.v"
echo "%DESIGN_SRC_DIR%\alu.v"
echo "%DESIGN_SRC_DIR%\pc.v"
echo "%DESIGN_SRC_DIR%\imm_extender.v"
echo "%DESIGN_SRC_DIR%\register_file.v"
echo "%DESIGN_SRC_DIR%\control_unit.v"
echo "%DESIGN_SRC_DIR%\cpu_top.v"
echo "%SIM_SRC_DIR%\cpu_tb.v"
) > verilog_files.f
:: 使用 'call' 命令执行xvlog, 确保xvlog执行完毕后控制权返回到此批处理脚本。
:: -sv 表示支持SystemVerilog特性 (尽管这些文件主要是Verilog)。
:: --work xil_defaultlib 指定工作库。
:: -f verilog_files.f 指定包含文件列表的文件。
call xvlog -sv --work xil_defaultlib -f verilog_files.f
if %errorlevel% neq 0 (
echo [错误] Verilog编译失败。请检查 xvlog.log 文件获取详细错误信息。
goto end
)
echo Verilog编译成功。
echo.
:: --- 步骤 4: 设计阐述和构建仿真快照 ---
echo [步骤 4] 使用 xelab 进行设计阐述和构建仿真快照...
:: 使用 'call' 命令执行xelab。
:: --debug typical 启用典型调试功能。
:: --snapshot cpu_tb_snapshot 指定生成的仿真快照名称。
:: xil_defaultlib.cpu_tb 指定顶层测试平台模块。
:: -log elaborate.log 指定阐述过程的日志文件。
call xelab --debug typical --snapshot cpu_tb_snapshot xil_defaultlib.cpu_tb -log elaborate.log
if %errorlevel% neq 0 (
echo [错误] 设计阐述失败。请检查 elaborate.log 文件获取详细错误信息。
goto end
)
echo 设计阐述成功。
echo.
:: --- 步骤 5: 运行仿真 ---
echo [步骤 5] 使用 xsim 运行仿真...
echo ======================= 仿真输出开始 =======================
:: 使用 'call' 命令执行xsim。
:: cpu_tb_snapshot 是上一步生成的快照名称。
:: --runall 表示运行仿真直到 $finish 被调用或达到仿真时间限制。
:: --log 指定仿真日志文件的输出路径,这里将其保存到项目根目录下的 simulation.log。
call xsim cpu_tb_snapshot --runall --log ..\..\..\..\..\simulation.log
echo ======================== 仿真输出结束 ========================
echo 仿真运行结束。
echo.
:end
echo 脚本执行完毕。按任意键退出。
pause > nul