有没有办法将参数(或命令行参数)传递给 Yosys 脚本?
我在这个问题中看到(我们可以在 Yosys 脚本中有变量吗?)您可以在 TCL 解释器中运行 Yosys 脚本。有什么方法可以传递参数吗?
我这样做的原因是我有一个脚本,并且我希望能够使用 Verilog 文件的参数化路径调用该脚本。当然,这是一种常见的需求,并且必须有一些简单的方法来做到这一点,但我没有看到它。
有没有办法将参数(或命令行参数)传递给 Yosys 脚本?
我在这个问题中看到(我们可以在 Yosys 脚本中有变量吗?)您可以在 TCL 解释器中运行 Yosys 脚本。有什么方法可以传递参数吗?
我这样做的原因是我有一个脚本,并且我希望能够使用 Verilog 文件的参数化路径调用该脚本。当然,这是一种常见的需求,并且必须有一些简单的方法来做到这一点,但我没有看到它。
目前唯一的方法是使用环境变量和 TCL 脚本。例如,您可以编写一个 TCL 脚本test.tcl
:
yosys read_verilog $::env(VLOG_FILE_NAME)
yosys synth -top $::env(TOP_MODULE)
yosys write_verilog output.v
然后在环境中调用 ifVLOG_FILE_NAME
并TOP_MODULE
设置:
VLOG_FILE_NAME=tests/simple/fiedler-cooley.v TOP_MODULE=up3down5 yosys test.tcl
如果你从一个 shell 脚本运行 Yosys,你也可以简单地export VLOG_FILE_NAME=...
在你的脚本顶部运行类似的东西。同样,当您从 Makefile 运行 Yosys 时,您可以使用export
Makefile 语句。
我面临着类似的情况。当我正在研究解决方案时,这个问题出现了。不过,我最终采用了不同的方法:
我正在为我的顶级模块创建一个包装器,用 m4 语言编写。很简单,它覆盖了参数值,然后包含了我的顶层模块定义。
然后在 Makefile 中,我处理 wrapper.m4 文件,以创建生成的 wrapper.v 文件,该文件将输入到 yosys。
我在这里详细介绍了解决方案。