- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在使用两个程序 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++
现在您可以运行./example
将example.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/
我想通过分解常见参数来使我的 Yosys 脚本更加 DRY,例如在以下示例中: read_liberty -lib /long/path/to/lib/file ... dfflibmap -lib
我的顶级 verilog 模块为 myStorm ice40 板上的四个 LED 声明信号,这些 LED 标记为“LED1-LED4”。 module top ( output [4:1] LED
我想编写自己的 Yosys 合成脚本。什么是一个好的模板开始?手册和网页包含各种示例,但没有“权威”的 hello world 示例。 最佳答案 synth命令为通用综合任务运行推荐的脚本。见 hel
从高级的角度来看,使用 Yosys 定位新设备需要什么?我想以 Xilinx XC9572XL 为目标。我有一个这样的开发板:XC9572XL-CPLD-development-board-v1b .
我正在尝试将 Yosys 形式验证功能与 Verific 解析器一起使用。 与“read_verilog -formal”命令相比,带有 verific 的 yosys 支持哪些功能进行形式验证? 例
有没有办法将参数(或命令行参数)传递给 Yosys 脚本? 我在这个问题 ( Can we have variables in a Yosys script? ) 中看到您可以在 TCL 解释器中运行
我想问一下我是否可以在yosys中验证我的设计。我重新综合了我的网表,使用yosys来获取执行(拓扑顺序)。 现在我想通过向网表插入一些输入并检查输出来检查此设计的验证。 例如,我的模型使用了 s27
我发现使用 iverilog 进行模拟是一种不太合适的方法,我可以模拟不会综合的设计,相反,不仅可以综合而且可以在物理硬件上按预期工作的设计,不会与 iverilog 进行综合用于模拟。 我理想的做法
我正在尝试让 yosys 将我的设计综合为结构 verilog 的工具,该工具不理解语法 {A, B} 来指定值的串联 A 和 B。 例如,当 yosys 生成如下语句时 assign C = {A,
我试图弄清楚如何在iCE40HX-8K分支板上使用Block RAM。我想以512x8的配置访问它,据我从文档中可以得知,IceStorm项目支持该配置,但是我无法使其按预期运行。 如果我理解正确,那
我正在使用Yosys综合我的 Verilog 设计。我想使用 Yosys 命令 fsm_export 导出 Verilog 设计中的 FSM,但它不会生成任何内容。我想知道这个命令应该如何调用。 我调
我目前正在通过使用 Yosys 将代码合成到 iCE40 开发板来学习 Verilog。我一直坚持在 verilog 中使用参数。我有以下代码: module tst; parameter c
良好的设计实践不仅要使用常规的综合前(行为)仿真来验证 Verilog 设计,还要使用综合后仿真。在调试仿真和硬件之间的不匹配时,这实际上是强制性的。如何使用适用于 iCE40 FPGA 的开源 Ic
这可能更像是 iCEstick 的问题而不是 yosys 的问题,但在这里问是因为我使用的是 Icestorm 工具链。 我想指定我的设计的启动行为,互联网上的各个地方似乎都同意与通常命名的 rst
当我使用 Yosys 和 arachne-pnr 合成一个空电路时,我得到了一些不规则的位: .io_tile 6 17 IoCtrl IE_1 .io_tile 6 0 IoCtrl REN_0 I
我正在使用 Yosys综合我的 RTL 设计,其中包括几个文字常量,例如绑定(bind)输出端口,如下代码所示: module my_module ( input a, input b
我当前的 iCE40 FPGA 项目包括一个连接到 4Kx8 RAM 的 8 位(软 IP)微处理器,该 RAM 由 8 个 2Kx2 block RAM 组成。能够将新程序(对于 8 位微 Cont
我试图最初从 C/C++ 语言描述的函数生成门级 Verilog。我的 C 函数是一个简单的与门: _Bool and2gate(_Bool a, _Bool b) { return a &&
我一直在使用两个程序 llvm 的 opt 和 clifford wolf 的 yosys两者都有类似的通行证接口(interface)。(他们使用共享库作为优化 passes ) 我想根据我的 ll
使用 iCE40 FOSS IceStorm FPGA 流程:如何使用 yosys/iceStorm 为 3 态 I/O 引脚(如双向数据总线引脚)编写 Verilog? 最佳答案 目前只有有限的支持
我是一名优秀的程序员,十分优秀!