繁体   English   中英

在FPGA器件上编程

[英]Programming on an FPGA device

我正在尝试学习一些关于FPGA卡的知识,而我对该主题还很陌生。 我更是一名软件开发人员,并且没有对FPGA器件进行编程的实际经验。

我目前正在使用C语言在Linux OS上构建项目。 我想知道如何在FPGA器件上实现这样的代码。 为此,我有几个问题。

首先,我必须将我的代码转换为VHDL还是可以使用C? 另外,如何在FPGA卡上安装操作系统,并且已经在其中安装了操作系统的设备呢?

对不起,对于新手类型的问题,我们将不胜感激!

FPGA擅长通过并行处理运行简单的固定数据流,而CPU针对复杂和/或动态数据流进行了优化。

C语言并非用于描述高度并行的系统,因为它遵循明显的顺序模式(“将a分配给b ,然后将c分配给d ”); 虽然编译器引入了一些并行化作为优化,但重点是生成行为就像指令已被顺序化的代码。

另一方面,在FPGA中,您希望尽可能地分解序列并创建并行电路和流水线,因此通常以互连模块的形式描述系统,其中每个模块都保持尽可能简单。

例如,在有(a+b)*(c+d) ,基于CPU的设计可能只有一个加法器,先将ab馈入,然后将cd馈入,最后将两个结果都传递给乘数。

在FPGA设计中,这是相当昂贵的,因为您必须创建一个状态机来跟踪我们处于三个计算阶段中的哪一个以及结果将保留在哪里,因此将两个专用加法器硬接线可能更容易ab以及cd ,并将它们的输出连接到乘法器模块。

至此,您基本上已经创建了一个专用的机器,可以计算该单个项,但没有别的什么,但是它的速度受到仅构成逻辑门的晶体管速度的限制,并且与状态机相比,速度得到了提高至少是三分之一(因为我们现在只有一个状态/指令),可能更多,因为我们还可以舍弃存储中间结果的逻辑。

为了决定何时创建状态机/处理器以及何时对计算进行硬编码,编译器将不得不比C / C ++更加了解程序流和时序要求,因此这些语言不是一个好选择。 。

这样的操作系统看起来也大不相同。 没有资源可以动态仲裁,因此省略了这一部分,剩下的只是设备驱动程序。 由于一切都是并行的,它们采用外部模块的形式,这些模块可以简单地链接到您的设计中并直接进行接口。

如果您只是入门,我建议您获得带有几个LED的开发套件 ,并从基本功能入手:

  1. 使LED闪烁
  2. 使用系统库中的PLL模块来导出辅助时钟,并使LED以不同的频率闪烁
  3. 添加简单的总线接口(例如SPI),并与简单的外部设备(例如基于WS2811的LED灯带)进行通信

在基本了解系统的工作原理之后,尝试获得一个有效的仿真环境(相当于Debug构建),并开始包括更复杂的外围设备。

听起来您可以使用针对初学者的教程。 我建议从这里开始,通读数字设计入门 通过阅读这些教程,可以回答一些基本问题。 这将使您将来有更好的地方提出更具体的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM