首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从LLVM传递执行yosys传递?

如何从LLVM传递执行yosys传递?
EN

Stack Overflow用户
提问于 2015-08-04 09:23:47
回答 1查看 516关注 0票数 2

我一直在使用两个程序llvm的opt和clifford的https://github.com/cliffordwolf/yosys都有类似的passes接口(它们使用共享库作为优化通行证)。

我想使用yosys.h中的某些数据结构和函数来构建一个设计模块(然后用verilog编写到文件),该模块基于我的llvm生成的数据。

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

编译YOSYS

代码语言:javascript
复制
gcc `yosys-config --cxxflags --ldlibs --ldflags` --shared yosyspass.cpp -o yosyspass.so

然后用

-m yosyspass.so verilogfile.v

编译LLVM通行证

代码语言:javascript
复制
gcc  `llvm-config --cxxflags --ldlibs` --shared llvmpass.ccp -o llvmpass.so

然后用

选择-load ./llvmpass.so -llvmpass Somefile.bc

但是如何从llvm,yosys构建同时包含两个组件的代码呢?以及如何执行?

我怎样才能做到这一点,而不改变你的源代码太多?所有这些都是为了避免为我的llvm传球编写verilog一代后端。

我的解决方案之一是:

元编程(Metaprogramming):即生成编译后作为yosys传递运行的代码。(基于llvm输入的verilog设计文件)

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

这个项目(虽然不相关)可能类似于和univ of多伦多的legup工具。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-04 11:36:44

正如Krzysztof Kosiński所指出的,到目前为止,Yosy的核心功能还不能作为库使用。然而,这已经列在待办事项清单上很长时间了,我现在有了将此功能添加到Yosys git头中

下面是一个用法示例:

代码语言:javascript
复制
// 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;
}

构建二进制:

代码语言:javascript
复制
yosys-config --exec --cxx -o example --cxxflags --ldflags example.cc -lyosys -lstdc++

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

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

编辑:在当前的git中,必须将Makefile选项ENABLE_LIBYOSYS设置为1,以支持构建libyosys.so。

附加反馈:您可能需要考虑编写一个Yosys插件,它实现了一个使用LLVM库加载.bc文件的Yosys前端。如果您不打算在LLVM和Yosys之间来回切换,而只希望执行LLVM传递序列和Yosys传递序列,那么这个解决方案可能会提供一个更自然和更容易调试LLVM和Yosys之间的接口。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31805432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档