来自任意一段代码

时间:2015-06-03 06:11:11

标签: logic vhdl verilog synthesis

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

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

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

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

感谢。

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

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

2 个答案:

答案 0 :(得分:1)

用VHDL编写任意代码,将VHDL转换为门是综合工具的功能。

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

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

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

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

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

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

返回FPGA合成工具:我将以Xilinx XST为例。它将合成Xilinx原语,采用一些Xilinx封闭的内部格式。

然而,还有一个标记为“写后综合网表”的选项。

使用它,您可以获得一个结构VHDL文件,表示您的任意代码转换为Xilinx门,触发器和其他元素,这些元素是从Simprims库中提取的。

尝试编译(例如在模拟器中)而不使Simprims库可见(例如,library Simprims; use Simprims;语句被注释掉,您将获得有价值的东西:

编译错误列表

没有那么有价值,你可能会想:除了它实际上是一个门,触发器和实现你的设计所需的其他元素的列表。

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

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

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

(你可以自己处理布局,路由,时序分析等问题。这不是一件容易的事,但为了这个问题,我假设你的“项目制作物理门”已经覆盖了......)

答案 1 :(得分:0)

首先,逻辑综合是逻辑电路的基本逻辑优化,或者是将结构逻辑电路转换成表示逻辑电路的数据结构。有关逻辑综合的资源,请参见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为您实现将计算机程序转换为逻辑电路的目标提供了一种解决方法。