用 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,理论上,您应该有一个可用的编译设计。
(您需要自己解决布局、布线、时序分析等问题。这并非微不足道,但为了这个问题,我假设您的“制作物理门的项目”已经涵盖了这些......)