如何将处理器设计移植到FPGA


20

我最近进行了一次自学式逻辑设计之旅。该产品的最终产品是功能正常的16位CPU,其工作原理与模拟器中的设计完全相同。现在,我刚刚开始研究通过FPGA将其放入芯片的可能性。我知道我将不得不在输入/输出领域进行很多调整(现实世界与仿真环境有所不同),并且发现我完全在不导出网表或HDL代码的程序中进行了设计所以我真正拥有的只是一个示意图。

但是,假设我以某种方式达到了我的设计网表或HDL代码的水平,那么下一步将其导入芯片的下一步是什么?到目前为止,我的解决方案似乎还不是FPGA的解决方案,但是看一下Xilinx和Altera网站会让我大吃一惊。我在树上叫错了吗?基本上,我正在寻找一个简单的英文说明,该下一步对于具有CPU功能原理图的人要做什么。一旦知道了前进的方向,我便可以破解书本,弄清楚我需要如何到达那里。另外要注意的是,我在Mac OS X上,但是我有一个Window的XP盒,如果绝对需要的话可以插入。


您在哪个程序进行设计?可能有第三方的转换器。
康纳·沃尔夫,

Answers:


17

恭喜您的CPU设计。是的,FPGA绝对是您的下一步。但是您不清楚是什么使您的头旋转。我认为这是提供的大量不同设备。您也不会说您正在使用什么模拟器。
在合成设计时,合成器应为您提供有关所用资源报告,例如门数和RAM。这应该使您知道哪些零件适合您的设计。确保您有足够的净空。选择一个具有一些额外RAM的部件,您需要在RAM上执行程序。

编辑(发表评论)
您需要特定制造商的开发系统。AlteraXilinx是最大的参与者,并且都有自己的信徒。您选择哪一个并不重要,两者都有足够的不同部分来满足您的需求。
如果您选择Xilinx,则可以使用它的ISE WebPACK设计软件,该软件是免费的(下载大小为3.4GB)。与软件的更高级版本相比,这些限制现在不应该困扰您。
接下来,您需要一个开发板。您需要了解选择哪种FPGA。如果您去参加Xilinx,我会选一名Spartan,也许是Spartan-6,Virtex已经太高端了。仍然有很多可供选择的地方,主要是董事会上的其他功能有所不同。您需要一个带有多于几个开关和LED的电路板。我会寻找键盘连接器和显示模块。
Xilinx有许多电路板,对于Xilinx FPGA,还有DigilentAvnetXess等等。

因此,比较许多电路板(我想,价格也会起重要作用),并下载您计划使用的FPGA开发软件。综合您的设计以验证它是否适合所选的FPGA,然后您准备购买围绕该FPGA的电路板。

我忘了谈谈FPGA。FPGA基本上是门之间具有可编程连接的大量门的集合,因此您可以使用它们创建几乎任何逻辑功能/系统。经过几代的发展,FPGA变得更加先进,现在具有优化的模块以创建有效的功能,例如RAM。您的开发软件的合成器会在门之间创建连接图。它不是永久存储在FPGA中,而是必须在上电时从外部配置闪存中加载。那就是您设计的存储位置。像任何其他闪存一样,它可以被擦除和重写很多次。


我使用了Logisim,这对于原理图来说是很棒的选择,但是除了图片(png,jpeg等)之外,它缺少一种输出任何内容的方法。关于FPGA的困惑,部分原因是设备种类繁多,但我也没有找到可以解释基本原理和基础知识的资源。如果我将CPU放在那儿,它如何与外界交互?我需要什么设备?我可以重复对FPGA进行重新编程吗?等等等等等等。实际上完全不熟悉该主题。我想我需要入门指南,但是在任何地方都找不到。
罗里·奥黑尔

2
您的问题依次如下:1)FPGA通过I / O引脚与外界连接。不同之处在于,您可以选择引脚,这与专用芯片不同。2)您可以从入门工具包,开发工具包或类似工具开始。这将具有FPGA,一些用于I / O的连接器和板上电源。大多数还包括程序员。如果没有,别忘了得到一个。3)是的,您可以重新编程FPGA。程序存储在芯片上,实质上是一个巨型移位寄存器。启动时,专用状态机或外部源将其加载到芯片中。
Mike DeSimone

9

我不熟悉Xilinx的工具,但是我熟悉Altera的工具,所以我将告诉您有关它们的信息。赛灵思和其他公司应该没有太大的不同。

Verilog

您需要做的第一件事是学习Verilog。这将使您的头部受伤,因为Verilog(和有点类似的VHDL)最初是作为一种仿真语言设计的,并且结构很多(例如#5,这意味着“等待5个时间步长”,一个时间步长通常为纳秒)。因此,要使Verilog代码可合成(即可编译为FPGA的位流),必须牢记许多限制。

但是,最大的震惊是,您在Verilog(和VHDL)中编写的内容是您期望系统执行的行为,并且编译器从您的描述中推断出正确的逻辑。如果您不小心,可能会从中得到很多讨厌的错误。

例如,一个D触发器看起来像:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

这描述了DFF的工作方式,并且编译器必须对其进行分析并找出您想要的DFF。的@(...)被称为灵敏度列表,这是触发码块进行重新评估信号的列表; 因此,在此块中,Q仅当RESET或上有上升沿时才改变CLK(这是高电平有效复位)。如果你忘记了在敏感列表东西(它应该包含所有的右手边变量,而无需任何posedgenegedge改性剂组合逻辑块)根据需要,而不是调用一个错误,编译器会合成锁存器。太疯狂了,但是确实如此,因为Verilog最初是一种隐藏(因此不需要)实现细节的模拟语言。VHDL是相同的,但更为冗长。

最后,几年前发布了称为SystemVerilog的Verilog新版本,这使得编写可合成代码变得非常容易。尽可能地学习该语言,因为Xilinx ISE和Altera Quartus II都支持它。主要问题是完全缺乏良好的参考材料。

DFF的SystemVerilog版本清除了一些小问题:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

请注意,灵敏度列表中的信号用逗号分隔。这是因为无法在那里工作or使人感到困惑and。还要注意更换1'b0(单0带位)'0(一个符号,膨胀到然而,许多0基于它被分配到需要的位; 很多更灵活的参数化模块)。最后,请注意需要将内容合成为触发器的替换always(可用于任何东西;组合逻辑,锁存器和触发器)always_ff。还有一个always_comb消除灵敏度列表的方法,因为它只计算出从输入到模块的灵敏度。

Altera的设计软件称为Quartus II,您将寻找Web Edition。(订购版本相当昂贵,只有最快或最新的FPGA型号才需要。)

可悲的是,我还没有找到关于该主题的好书。通过从多个来源将事物拼凑在一起,我学到了什么,例如Verilog书籍,它们不能很好地告诉您什么是可综合的,什么不是可综合的,以及示例代码。Quartus II具有一个“插入模板”命令,该命令可插入从D触发器到状态机的几种通用结构的模板代码。

演示硬件

在Verilog中实现处理器后,就需要对其进行构建。暂时让Quartus选择芯片(必须选择系列;我建议使用Cyclone IV)和引脚排列。一旦成型,您将知道需要多少芯片。它会告诉您使用了多少逻辑元件,触发器,RAM位等。确保您没有超过50%;如果是这样,请查看编译器选择的芯片,然后手动选择下一个更大的(逻辑元素中)芯片,该芯片至少具有尽可能多的引脚,然后重复执行直到利用率低于50%。

然后去购买演示板,该演示板的芯片至少与最终构建的芯片一样大。检查是否具有所需的外围设备和/或I / O连接器。构建插入扩展连接器以提供任何缺少的硬件的子卡并不少见。

既然您已经选择了硬件,请找出真正的引脚排列,然后使用Pin Planner将正确的信号放置在正确的引脚上。演示板上将有一个用户指南,告诉您哪些引脚连接到演示板上的哪些设备或连接器引脚。

设置完引脚排列后,请再次构建它,以便使用所需的引脚。请记住,某些信号(例如系统时钟)将需要专用的输入引脚(因此它们会直接路由至内部PLL)。

使用程序员将您的设计直接下载到FPGA(我刚才提到的移位寄存器)。现在,您进入了熟悉的编辑-编译-运行调试周期。击败它,直到它起作用。

一旦工作,您可以使用程序员将代码下载到板载配置设备中,以便您的程序在上电时加载并运行。

这是很长的时间,希望对您有所帮助。有很多东西要学。这不像学习一种新的编程语言,就像学习一种新的编程范例,例如从过程语言到功能语言。Verilog是一种同步语言。大多数代码始终在执行。

祝好运!


很好,这很有帮助。虽然只是检查一件事,但我听说过原理图捕获。这是学习verilog的可行替代方法吗?如果需要的话,我会学习的,但是如果不是100%必要的话,我宁愿不要将其添加到我已经需要弄清楚的大量事情中。非常感谢。
罗里·奥黑尔

老实说,不是真的。一个大问题是您受原理图捕获程序的约束:如果使用原理图并生成不正确的Verilog,该怎么办?而编写Verilog将为您提供修复所有错误所需的权限。但是,最大的原因是,原理图捕获无法像Verilog一样出色:参数化模块以及总线拆分和合并是那些让您立即想到的事情。
Mike DeSimone

1
是否有任何工具可以将更多“硬件描述”语言转换为Verilog或VHDL(例如,如果我希望网Z是触发器,其数据输入是A,B和C的组合,则该触发器在输入时会被异步重置) C和D是正确的,能够说类似的东西Z:= A & (B # C); Z.ar = C & D;而不必担心敏感度列表之类的东西将是很好的。
超级猫2012年

Altera Quartus允许您以原理图或AHDL(Altera的VHDL版本)或其任意组合(可能包括其他HDL)的形式输入设计。(是过时的,我主要在CPLD和FPGA项目中使用原理图输入,并带有一点AHDL。)
Peter Bennett 2014年

需要明确的是,AHDL 不是 VHDL的版本。VHDL和Verilog都是推理语言,您的代码描述了所需电路的行为,并且编译器必须从该行为描述中推断实现。这既是模拟语言,又被重新用于综合的事实。AHDL是一种声明性语言,您可以在其中声明基元(例如,触发器,真值表)及其连接方式,因此编译器无需猜测。AHDL的历史可以追溯到80年代,更接近ABEL。
Mike DeSimone 2014年

5

是的,FPGA几乎可以肯定是您的解决方案!

几乎可以肯定,您需要使用一种硬件描述语言,或者将原理图重新输入到其他工具中。我建议反对示意图方法,因为

  1. FPGA工具供应商并没有很好地支持他们
  2. 不可携带

一旦您编写了HDL,只要您不使用他们的各种“ IP向导”直接从供应商库中插入内容,或者不直接粘贴其库中的组件,就可以获得可以公平地移植到其他芯片上的代码。轻松(比例如移植嵌入式C IME更为重要)

此外,您将拥有更好的测试和验证环境,因为您可以编写“了解”功能并可以为您检查结果的测试,而不用盯着波形看一切是否正常。

2大HDL是VHDL和Verilog。您可能想阅读有关它们的区别的答案...

VHDL还是Verilog?

我还要说,如果您已经了解Python,MyHDL也值得一看-它具有强大的验证能力,但仍然具有“普通” HDL所提供的大多数低级控件。

一旦选择了HDL,然后在模拟中正常运行(再次抱歉!),您便可以进入状态,可以通过供应商工具将其推送并学习下一个任务大块-模拟完成后正确地,总会有比您想像的更多的努力:)

如果您不熟悉原理图并可以持有许可证,则LabviewFPGA可能适合您。


3

获得Hamblen等人的“数字系统快速原型制作”副本:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

它主要使用VHDL,我更喜欢Verilog。

它包括一个非常简单的8位CPU uP3,几年前我使用本书的早期版本在我自己的Altera FLEX 10K硬件上实现了它。当我制作好“前面板” PCB时,我会将其移植到这款售价25美元的Cyclone II板上。它还包括一个MIPS和Altera NIOS II处理器。您可以使用免费的Altera Quartus II工具完成本书中的uP3练习,用VHDL重写CPU代码,并使它在Cyclone II板上工作。另外,Quartus II具有原理图输入,您应该能够直接输入原理图,对其进行仿真并在Cyclone II上运行它。


1

如果难度是具有工具技能的陡峭学习曲线,则遵循最简单的方法。Actel(现为Microsemi)拥有Libero,这是FPGA工具包,需要零读取并且易于使用:安装后立即进行。实际上,您可以手动在其中创建原理图,只需单击几下即可将其上载到物理FPGA,执行该操作的屏幕非常容易说明。


0

如果您选择学习HDL,则可能会影响您所在的语言,这是更好的语言。在欧洲,VHDL更受欢迎。在美国,除了国防工业VHDL外,Verilog更为流行。(美国国防部最初创建的是VHDL),这仅意味着您附近的人可能会更好地以一种或另一种语言提供帮助。但是,如果您正在网上寻求帮助,那可能就没有关系了。

其他需要考虑的书籍是 《数字系统快速原型开发:SOPC版》,它涉及Altera DE1和DE2板。已经有许多不同的计算机移植到DE1和DE2,以便为您提供它们如何工作的想法。Minimigtg68(Amiga),FpgaGen(Sega Genesis)等已移植到该板上以查看示例。

如果您去Xilinx,我现在有两本书。 Verilog的FPGA原型示例:Xilinx Spartan-3版本 VHDL的FPGA原型示例:Xilinx Spartan-3版本 尽管我不知道推荐哪种特定的板。我对即将面世的FPGA Arcade板感到兴奋,但我忘记了它将配备Xilinx或其他产品。


0

发现了这种变体,进一步开发了Logisim,现在称为Logisim Evolution。他们实现了从logisim内置的逻辑电路原理图导出到VHDL的功能。

可以在这里找到:https : //github.com/reds-heig/logisim-evolution

知道这个问题很旧,但是它帮助了我很多,并希望它可以帮助其他人。

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.