【问题标题】:Logic synthesis from an arbitary piece of code任意代码段的逻辑综合
【发布时间】:2015-06-03 06:11:10
【问题描述】:

我已经完成了一个制作物理逻辑门的项目,现在正在寻找一种将任意程序转换为一系列逻辑门的方法,以便我可以使用它们。

我需要一个可以将一些任意函数(比如 f= x^2 -1)直接带入一些逻辑门系列的程序。这已经存在了吗?

我找到了Verilog 和其他几个开源选项,但它们似乎不输出电路图。还有 Quartus II 和其他程序可以将VHDL 代码转换为原理图。

我希望能直接将 Python/C++ 编译为逻辑门原理图 - 但实际上任何语言都可以。

谢谢。

编辑:我的意思是物理门 - 它们使用滚珠轴承!

我拥有所有 1 位输入/1 位输出门和所有 2 位输入/1 位输出门。从这些我还可以构建一个 MAJ 门来进行纠错。

【问题讨论】:

  • 所以您只需要一个转换器:Python/C++ -> Verilog/VHDL?你应该看看例如在 Vivado 高级综合工具中。
  • 谢谢 - 理想情况下,我正在寻找 Python/C++ -> Verilog/VHDL -> 逻辑门示意图。

标签: logic vhdl verilog synthesis


【解决方案1】:

用 VHDL 编写您的任意代码,将 VHDL 变成门是综合工具所做的。

并非您编写的所有内容都是可综合的;文件处理不能转换为门,任何通常使用堆的东西(例如 malloc 或 C 中的指针,或 VHDL 中的“新”和访问类型)也不能转换为门。可以合成浮点(使用 VHDL-2008),但它不像signal A : Real; A <= 2.0 * X * X - 1.0; 那样简单,您必须使用可合成浮点库中的类型。因此,可能会与该工具就您可以使用的编程语言子集进行一些协商。


但我在这里感觉到一个稍微不同的问题:我如何将任意代码转换为 MY 逻辑门,实现于(问题中未描述的技术)。这更难回答。

综合工具通常来自供应商,例如 FPGA 供应商,它们将任意代码转换为该供应商的逻辑门,而不是您的

理想的解决方案是创建一个描述您的逻辑技术的库,该库插入到供应商中立的综合工具中,例如 Synopsys 的 Synplicity。然后 Synplicity 可以综合到您的技术而不是 FPGA 供应商的技术。

好的,但是创建该库的任务可能与为自定义 CPU 的指令集编写后端并将该后端集成到 gcc 中大致相当。除了 Synplicity 与 gcc 不同,它不是开源的,因此如果没有大量的财务和技术资源,以及来自主要 EDA 工具公司的帮助和内部文档,这几乎是不可能的。 (在这一点上,我很高兴得到真正做到这一点的人的纠正)

编辑(将近 7 年后!)

from Github 可用的 GHDL(开源 VHDL 模拟器)已经发展了一个综合分支,所以这条路线现在可能更容易(我不会说简单!)或者可能是比专有工具集更好的选择对于下面的路线。它与YOSYS 开源综合套件有关联。警告:我还没有尝试过,但对于这个问题的未来观众来说可能值得一看。

(结束编辑)


所以我们需要一种不同的方法。

回到 FPGA 合成器工具:我将使用 Xilinx XST 作为示例。它将以某种 Xilinx 封闭的内部格式合成到 Xilinx 原语。

不过,还有一个选项标记为“Write post-synthesis netlist”。

使用它,您可以获得一个结构化的 VHDL 文件,该文件表示将您的任意代码转换为 Xilinx 门、触发器和其他元素,这些元素来自 Simprims 库。

尝试在不使 Simprims 库可见的情况下编译它(例如在模拟器中)(例如,将 library Simprims; use Simprims; 语句注释掉,您会得到一些有价值的东西:

编译错误列表

您可能会认为没有那么有价值:除了它实际上是实现您的设计所需的门、触发器和其他元素的列表。

如果您可以找到(或创建)这些和您选择的技术中的元素之间的一一对应关系,那么您可以将此网表映射到您的技术。

如果存在您没有等效项的 Simprims 元素,则需要实现它们 - 例如通过从您拥有的 2 输入 NAND 门的网络创建 3 输入 AND 门。

使用您自己的 (VHDL) 库中的相应元素,而不是 Simprims,理论上,您应该有一个可用的编译设计。

(您需要自己解决布局、布线、时序分析等问题。这并非微不足道,但为了这个问题,我假设您的“制作物理门的项目”已经涵盖了这些......)

【讨论】:

  • 感谢您的好评!这应该可以解决问题。
  • 整洁!那么这种方法与您将要获得的一样接近。请注意,Xilinx 工具针对各种不同的设备,您可能会发现针对更简单的设备可能会减少所需原语的列表(来自 Simprims 库的组件)。或者您可能想尝试 Actel/Microsemi 工具(Libero,它使用 Synplicity)他们的 FPGA(例如 ProAsic 3)具有更简单的内部结构。
  • 你可能不得不降低你的野心:我怀疑 4 位加法将把滚珠轴承技术延伸到足以开始的地步!此外,Xilinx 使用架构技巧来简化算法:除非您有滚珠轴承快速进位链,否则更简单的 FPGA 技术(Microsemi)可能更适合。
【解决方案2】:

首先,逻辑综合是对逻辑电路的基本逻辑优化,或将结构逻辑电路转化为表示逻辑电路的数据结构。有关逻辑综合的资源,请参阅https://stackoverflow.com/a/60535990/1531728

其次,要将计算机程序(例如,Python、C、C++ 或其他语言)转换为逻辑电路,您需要执行高级综合(或行为综合),通过将计算机程序解析为控制和数据流图(CDFG,或一对控制流图和一个数据流图),优化CDFG,随后将该CDFG转换成逻辑电路进行逻辑综合。拥有逻辑电路后,您仍然需要执行物理设计(例如,布局规划、布局和布线),以将该逻辑电路映射到流片布局(基于标准单元的数字集成电路设计)或现场可编程门阵列 (FPGA)。

以下参考文献对我提到的主题进行了文献综述。

@book{Lavagno2016a,
    Address = {Boca Raton, {FL}},
    Author = {Luciano Lavagno and Igor L. Markov and Grant Martin and Louis K. Scheffer},
    Doi = {https://dx.doi.org/10.1201/b19569},
    Edition = {Second},
    Publisher = {{CRC} Press},
    Series = {Electronic Design Automation for Integrated Circuits Handbook},
    Title = {Electronic Design Automation for {IC} System Design, Verification, and Testing},
    Volume = {1},
    Year = {2016}}

@book{Lavagno2016,
    Address = {Boca Raton, {FL}},
    Author = {Luciano Lavagno and Igor L. Markov and Grant Martin and Louis K. Scheffer},
    Doi = {https://dx.doi.org/10.1201/b19714},
    Edition = {Second},
    Publisher = {{CRC} Press},
    Series = {Electronic Design Automation for Integrated Circuits Handbook},
    Title = {Electronic Design Automation for {IC} Implementation, Circuit Design, and Process Technology},
    Volume = {2},
    Year = {2016}}

请参阅https://github.com/lsils/lstools-showcase,了解瑞士洛桑 EPFL(洛桑联邦理工学院)最先进的逻辑综合库。

您可以使用这些工具来执行逻辑综合。它们是程序,商业高级综合软件,将 C 或 C++ 代码转换为 Verilog(或其他一些硬件描述语言,HDL),然后转换为逻辑电路。

您还可以考虑基于 Python 的 HDL(例如 PyMTL、PyRTL 或 MyHDL)、基于 Scala 的 HDL(例如 Chisel HDL)或基于 Haskell 的 HDL(例如 Clash)。这些 HDL 为您将计算机程序转换为逻辑电路的目标提供了一种解决方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多