鉴于这个问题,我想知道是否有一个相当标准的过程将软件解决方案转换为硬件实现。请原谅我和我的想象,但是会不会有一个编译器可以采用C程序,并根据晶体管,电阻器等甚至是众所周知的PCB的原理对其进行编译?
我意识到我可能会从错误的角度看待这种情况。根据我的经验,从历史上看,通常您会拥有一些已被实现为软件解决方案的硬件(请考虑硬件仿真)。反向存在这个概念吗?这些较大的公司如何做到这一点,例如软件与硬件IP路由?
鉴于这个问题,我想知道是否有一个相当标准的过程将软件解决方案转换为硬件实现。请原谅我和我的想象,但是会不会有一个编译器可以采用C程序,并根据晶体管,电阻器等甚至是众所周知的PCB的原理对其进行编译?
我意识到我可能会从错误的角度看待这种情况。根据我的经验,从历史上看,通常您会拥有一些已被实现为软件解决方案的硬件(请考虑硬件仿真)。反向存在这个概念吗?这些较大的公司如何做到这一点,例如软件与硬件IP路由?
Answers:
不,没有将软件转换为硬件的标准解决方案。一般来说,考虑到那些未考虑硬件实现编写的软件,就不会轻易将其转换为硬件而不会造成巨大浪费和低效。通常,最好的办法就是制造一个具有CPU和ROM的芯片,然后将软件放入ROM。
多年来,已经有一些编译器采用“ C样”代码并将其编译为硬件,这与将VHDL或Verilog编译为硬件的方式非常相似。但是关键是它是“ C-Like”,而不是C。例如,您仍然无法采用计算PI的C / C ++程序,然后神奇地将其转换为计算PI的硬件。这些C-Line语言大多数已经消失,或者没有大量使用。较流行的版本之一是SystemC,但必须注意它不是C / C ++,对于通用的“让我们编写软件然后将其编译为硬件”没有用。您仍然需要“编写一些硬件,也可以将其编译为软件”。
交换机和路由器通常具有硬件,可以在硬件中完成大多数常用的速度至关重要的路由器功能(在路由表中查找内容,管理队列等),然后使用CPU来完成所有不常见的功能(处理异常,错误,路由表更新等)。在许多方面,这类似于现代CPU的工作方式,其中最常见的操作码是在硬件中完成的,偶尔某些操作码实际上是在软件中实现的(例如,不存在FPU时的浮点指令)。
最接近的是Altera的C到硬件(C2H)编译器。它可以完成您的建议。但是,有一些警告。您不能将任何C代码都变成硬件,也不会。但是特定的功能可以很好地运行,并且您可以看到性能的显着提高。
通常,您将在NI Altera FPGA中实现NIOS II软核处理器。然后,您将像为其他任何处理器一样为它编写一些ANSI C代码。然后说您编写的C函数之一涉及一些繁重的数学运算,这些数学运算会从一些并行执行中提高性能。调用C2H编译器,说“在硬件中实现”,它实际上会将其转换为NIOS II软核处理器的外围设备。
这是在ANSI C中编码Mandelbrot计算然后在硬件中实现的示例:
与在使用编译器优化级别2(-O2)的最快Nios II处理器上运行的相同算法相比,C2H编译器加速的Mandelbrot算法可将速度提高至少60倍。这种速度的提高是由于硬件可以提供并行性和快速迭代速度,而通用处理单元无法做到这一点。
回到您的示例,NIOS II处理器可以运行Linux。而且执行路由任务所需的某些功能可以从硬件加速中受益。它最有可能比纯软件路由器具有更好的性能。但是它永远不会达到专门设计的专用ASIC的性能。
您在标题中提到“ C to Silicon”,并在体内提到板级产品。我只关注存在的等式的一部分->“ C to Silicon”设计流程。C本身并不自然地适合于硬件的描述,因为它缺乏对硬件固有的并行性,防止竞争状况和其他问题的需求的基本支持,并且在表示这些概念方面表现不佳。还是不如Verilog和VHDL那么多。
可综合的C代码(即可以渲染为硬件描述),此处的硬件=数字逻辑,不会赢得软件开发人员判断的任何编码竞赛。
以下是一些为ASIC流程人群提供C->硅工具的著名供应商的列表。
复地合成器
导师弹射器
BlueSpec C
Synopsys Synphony(原Synfora)
Cadence C到硅