从C到Silicon:如何将软件/固件解决方案实现为硬件?


13

鉴于这个问题,我想知道是否有一个相当标准的过程将软件解决方案转换为硬件实现。请原谅我和我的想象,但是会不会有一个编译器可以采用C程序,并根据晶体管,电阻器等甚至是众所周知的PCB的原理对其进行编译?

我意识到我可能会从错误的角度看待这种情况。根据我的经验,从历史上看,通常您会拥有一些已被实现为软件解决方案的硬件(请考虑硬件仿真)。反向存在这个概念吗?这些较大的公司如何做到这一点,例如软件与硬件IP路由?


另请参见“为什么我不能自动使单头C程序成为多线程?”
pjc50

@ pjc50:我在哪里可以看到“为什么我不能自动使单身的C程序成为多线程?” ?
davidcary

我没有具体的例子,但这是我以前见过的人问的一个问题。这还与硬件在本质上是并行的而软件在人们对软件的思考和编写程序的方式上“自然”地顺序相关。
pjc50

Answers:


11

不,没有将软件转换为硬件的标准解决方案。一般来说,考虑到那些未考虑硬件实现编写的软件,就不会轻易将其转换为硬件而不会造成巨大浪费和低效。通常,最好的办法就是制造一个具有CPU和ROM的芯片,然后将软件放入ROM。

多年来,已经有一些编译器采用“ C样”代码并将其编译为硬件,这与将VHDL或Verilog编译为硬件的方式非常相似。但是关键是它是“ C-Like”,而不是C。例如,您仍然无法采用计算PI的C / C ++程序,然后神奇地将其转换为计算PI的硬件。这些C-Line语言大多数已经消失,或者没有大量使用。较流行的版本之一是SystemC,但必须注意它不是C / C ++,对于通用的“让我们编写软件然后将其编译为硬件”没有用。您仍然需要“编写一些硬件,也可以将其编译为软件”。

交换机和路由器通常具有硬件,可以在硬件中完成大多数常用的速度至关重要的路由器功能(在路由表中查找内容,管理队列等),然后使用CPU来完成所有不常见的功能(处理异常,错误,路由表更新等)。在许多方面,这类似于现代CPU的工作方式,其中最常见的操作码是在硬件中完成的,偶尔某些操作码实际上是在软件中实现的(例如,不存在FPU时的浮点指令)。


SystemC不仅是实际的C ++,而且只是一个C ++库。您可以在SystemC中使用任何喜欢的普通C ++代码。也就是说,SystemC与自动生成硬件没有太大关系。它更侧重于模拟系统,帮助做出体系结构决策,并允许软件团队在硬件可用之前开始使用。
Theran

这确实有助于我理解为什么要使用特定的硬件来执行特定的任务。
乍得哈里森

为此目的还设计了许多其他的C到HDL编译器。
安德森·格林

5

最接近的是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的性能。


1
Xilinx有一个类似的工具,称为Vivado HLS(高级综合),以前称为AutoESL。也有类似的注意事项:如果这种类型的代码很容易自动转换为RTL,那么它将代码转换为RTL很好。
Theran

@Theran我没有意识到Xilinx具有竞争产品。我必须检查一下。谢谢!
Embedded.kyle

2

您在标题中提到“ C to Silicon”,并在体内提到板级产品。我只关注存在的等式的一部分->“ C to Silicon”设计流程。C本身并不自然地适合于硬件的描述,因为它缺乏对硬件固有的并行性,防止竞争状况和其他问题的需求的基本支持,并且在表示这些概念方面表现不佳。还是不如Verilog和VHDL那么多。

可综合的C代码(即可以渲染为硬件描述),此处的硬件=数字逻辑,不会赢得软件开发人员判断的任何编码竞赛。

以下是一些为ASIC流程人群提供C->硅工具的著名供应商的列表。

  • 复地合成器

  • 导师弹射器

  • BlueSpec C

  • Synopsys Synphony(原Synfora)

  • Cadence C到硅


1

如果您希望使用合理的硬件,那么将软件转变为硬件并不是一件容易的事。硬件倾向于需要更多的架构来仔细管理与面积/成本有关的资源使用。话虽这么说,但是有许多工具可以采用某种形式的C,可以让您添加特定于硬件的信息(例如,什么是硬件接口?),并生成优化的硬件。与手工编码的RTL相比,熟练的用户可以在更短的时间内轻松获得更好的结果。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.