FPGA编程,从哪里开始


29

我是一名软件开发人员(C,C ++,objective-c,java ...),并且对学习编程FPGA感兴趣。现在,这个问题对您来说似乎很简单,但是由于我现在有些困难,请花点时间帮助我解决这个问题。我的公司要求我熟悉该技术并从事晶格产品的研究。我的问题是从哪里开始?经过研究,我发现我可以在VHDL和Verilog之间进行选择,但我从未使用过它们。有专家可以建议我应该从哪里开始吗?学习语言,了解硬件组件,然后了解产品?还是直接从莱迪思产品开始(正如我读到的,FPGA供应商之间的编程方法有很大不同)?


3
如果您熟悉C / C ++编程,则应该选择Verilog而不是VHDL。Verilog的语法类似于
C。– m.Alin

1
@ m.Alin我才刚刚开始,就发现它看起来像C没关系,因为我发现最困难的部分不是语法,而是概念上的差异。语义甚至没有接近那些C的
埃德加Klerks

我从C / C ++ / Java / etc中发现的最大变化。是您编写的模块(我想相当于翻译单元)完全是事件驱动的。在C语言中,简化为基本原理,编译的程序将执行代码的第1行,然后执行第2行,然后执行3行,然后执行4行,依此类推。Verilog/ VHDL中没有这样的东西,有点像画一幅画:此输入引脚连接到module1_input,每次module1_input变高时,module1_output都会切换状态。而不是if(condition)它的when(condition)。大多数FPGA IDE甚至都具有图形设计输入,就好像您在纸上绘图一样。
CharlieHanson

Answers:


40

数字设计与软件开发没有很多共同之处(也许除了Verilog语法看上去有点像C语言,但看上去只是)。因此,很难充分回答这类问题。但是作为一个从软件开发过渡到硬件设计的人,我会试一试。回顾自己,如果我现在知道自己现在所知道的,这就是我会如何建议自己:

白手起家

忘记有关软件开发的一切。特别是编程语言。这些原则不适用于数字设计。对于设计CPU的人来说,用汇编器甚至C语言对其进行编程可能会很容易,但是汇编程序员将无法设计CPU。

在您的学习道路上,不要倾向于用您现有的软件知识来解决看似容易解决的问题。经典示例之一是“ for循环”。即使您可以编写for循环(例如verilog),它也有不同的用途。它主要用于代码生成。正如软件开发人员所看到的那样,它可能也是一个for循环,但是它除了模拟之外没有其他用途(即,您将无法像这样编程FPGA)。

因此,对于您要处理的每个任务,不要以为您知道该怎么做,而要进行研究-检查书籍,示例,询问更有经验的人等。

学习硬件和HDL语言

最受欢迎的HDL语言是Verilog和VHDL。也有特定于供应商的产品,例如AHDL(Altera HDL)。由于这些语言用于描述硬件组件,因此它们几乎全部都用于以相似的方式表达相同的东西,但是语法不同。

有人建议学习Verilog,因为它看起来像C。是的,它的语法是C和Ada的混合,但软件开发人员很难靠它学习。实际上,我认为它甚至可能使情况变得更糟,因为在Verilog中编写C会有诱惑。这是度过非常糟糕时光的良方。

考虑到这一点,我建议您凝视VHDL。尽管考虑到上述情况,Verilog也可以。

要记住的一件事是,您必须了解用该语言表达的内容。“描述”了哪种硬件及其工作方式。

因此,我建议您给自己买一本关于电子产品的书,以及一本好书-HDL Chip Design(又名蓝皮书)。

获取模拟器

在开始使用硬件进行任何操作并使用特定于供应商的功能等之前,请先准备一个模拟器。我从Verilog开始,然后将Icarus Verilog与GTK Wave一起使用。这些是免费的开源项目。运行您在书中看到的示例,通过设计自己的电路进行练习以对其有所了解。

获取开发板

当您想要前进时,请获取开发板。如果您知道您的雇主希望与莱迪思一起工作,那么请获取莱迪思董事会。

编程方法非常相似,但细节有所不同。例如,不同的工具,不同的选项,不同的界面。通常,如果您有一个供应商的经验,则不难切换。但是您可能想要避免这种额外的学习曲线。

我还要确保该板随附您计划使用或可扩展的组件。例如,如果您要设计路由器之类的网络设备,请确保该板具有以太网PHY,或者可以通过HSMC连接器等对其进行扩展。

电路板通常带有良好的参考,用户指南和设计示例。研究他们。

看书

您将需要阅读书籍。以我为例,我没有认识数字设计的朋友,而且该网站的功能也不是很简单,因为它很简单-我什至不知道该如何表达我的问题。我所能想到的就像“嗯,伙计们,有一个dcfifo的东西,我听到了有关时钟域穿越挑战的一些信息,这是什么,为什么我的设计不起作用?”。

我个人是从这些开始的:

FPGA供应商提供了大量具有最佳实践的食谱。将它们与参考设计一起研究。例如,是Altera的一款。

提出更多具体问题

当您浏览书籍,模拟设计,使开发板上的某些LED闪烁时,您很可能会遇到很多问题。在这里问这些问题之前,请确保在本书的下一页或在线(即在特定于Lattice的论坛中)看不到答案。


非常感谢您提供详细的答案,它确实帮助我了解了如何进行。不幸的是,我没有任何可以帮助我的朋友。但是,您使我摆脱了很多麻烦,再次感谢您!!!!
阿妮拉2012年

5
极好的答案。
阿萨德·易卜拉欣

回到学校后,我们在学习VHDL之前就学习了C ++。在理解它时遇到了很多麻烦,但是单击所有内容的关键是我了解到所有内容都是实时和并行发生的(并行,而不是像nodejs那样异步)。软件开发遵循顺序流程,但在HDL中,所有操作一次(大多数时间)发生。如果您有类似“ x = 1; y = 2; y = x; x = y”的内容,那么在SW中,最后y等于1,在HDL中,您就有竞争条件,因为x和y都会尝试同时互相改变。只要记住这一点,生活对您来说可能会更轻松。
PGT

@PGT如果在单个内核或多个内核上运行的多个进程可以访问“ y”,则您应期望y的值为1以外的值,这可能将其权限强加于较弱的进程。
阿迪亚

1

作为替代,您可以使用一些高级综合技术,例如Xilinx的Vivado HLS和Altera的OpenCL解决方案。考虑到您的软件背景,这可能会减轻您学习硬件描述语言的难度。


-1

首先学习数字设计基础知识。Mealy / Moore机器,组合逻辑,真值表,karnaugh映射等。开始在原理图(7段计数器)中创建一个简单的设计,然后学习HDL。欧洲使用VHDL,美国使用Verilog。最后,定时很重要,要注意信号的延迟取决于组件的瞬时性和温度,每个信号都有另一个延迟。

阅读的书:http : //www.amazon.com/Advanced-FPGA-Design-Architecture-Implementation/dp/0470054379

完善的语言语法知识供以后使用,首先了解数字设计和问题。


欧洲使用VHDL,美国使用Verilog。一点都不对…
马特·杨

的确,我是从英国学习的Verilog。这也是我在uni(也在英国)学习的模块之一中教授的语言。
汤姆·卡彭特
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.