gpt4 book ai didi

c++ - 如何从 LLVM pass 执行 yosys passes?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:15 28 4
gpt4 key购买 nike

我一直在使用两个程序 llvm 的 opt 和 clifford wolf 的 yosys两者都有类似的通行证接口(interface)。(他们使用共享库作为优化 passes )

我想根据我的 llvm opt pass 生成的数据,使用 yosys.h 中的某些数据结构和函数来构 build 计模块(然后用 verilog 写入文件)。

问题:我想在 llvm-opt 的传递中使用来自 yosys.h 的函数和数据。我如何编译(编辑:并在 llvm-opt 或 yosys 或单独的二进制可执行文件上执行)这样的代码?它们可以单独编译并作为单独的 channel 执行。

编译 YOSYS 通行证

gcc `yosys-config --cxxflags --ldlibs --ldflags` --shared yosyspass.cpp -o yosyspass.so

并用

执行

yosys -m yosyspass.so verilogfile.v

编译 LLVM 通过

gcc  `llvm-config --cxxflags --ldlibs` --shared llvmpass.ccp -o llvmpass.so

并用

执行

opt -load ./llvmpass.so -llvmpass Somefile.bc

但是如何构建包含来自 llvm 和 yosys 的两个组件的代码?以及如何执行?

如何在不过多更改 yosys 源代码的情况下实现这一点?所有这些都是为了避免为我的 llvm-opt pass 编写 verilog 生成后端。

我的解决方案之一:

元编程:即生成代码,当作为 yosys pass 编译和运行时会给出结果。(基于 llvm opt 输入的 verilog 设计文件)

也许我在构建共享库时遗漏了一些基本的东西?我对这种事情很陌生。欢迎任何意见。

这个项目(虽然不相关)可能类似于 Rotems C-to-Verilog 和 univ of toronto's legup HLS tool。

最佳答案

正如 Krzysztof Kosiński 指出的那样,直到现在 Yosys 的核心功能还不能作为库使用。然而,这在待办事项列表上已经有很长时间了,我现在有 added this functionality to Yosys git head .

这是一个用法示例:

// example.cc

#include <kernel/yosys.h>

int main()
{
Yosys::log_streams.push_back(&std::cout);
Yosys::log_error_stderr = true;

Yosys::yosys_setup();
Yosys::yosys_banner();

Yosys::run_pass("read_verilog example.v");
Yosys::run_pass("synth -noabc");
Yosys::run_pass("clean -purge");
Yosys::run_pass("write_blif example.blif");

Yosys::yosys_shutdown();
return 0;
}

构建二进制文件:

yosys-config --exec --cxx -o example --cxxflags --ldflags example.cc -lyosys -lstdc++

现在您可以运行./exampleexample.v 转换为example.blif

(由于这是一个全新的功能, future 如何使用 libyosys 构建程序或其他库的细节可能会发生变化。)

编辑:在当前的 git head 中,Makefile 选项 ENABLE_LIBYOSYS 必须设置为 1 才能启用 libyosys.so 的构建。


其他反馈:您可能需要考虑编写一个 Yosys 插件,而不是实现一个使用 LLVM 库加载 .bc 文件的 Yosys 前端。如果您不打算在 LLVM 和 Yosys 之间来回切换,而只想执行一系列 LLVM pass,然后执行一系列 Yosys pass,那么此解决方案可能会在 LLVM 和 Yosys 之间提供更自然且更易于调试的接口(interface)。

关于c++ - 如何从 LLVM pass 执行 yosys passes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31805432/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com