如何将处理器设计放到 FPGA 上

电器工程 FPGA 中央处理器
2022-01-24 11:56:44

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

但是,假设我以某种方式达到了我确实有我的设计的网表或 HDL 代码的地步,我下一步将它放入硅片中的步骤是什么?到目前为止,从我读到的内容来看,FPGA 似乎是我的解决方案,但查看 Xilinx 和 Altera 网站让我头晕目眩。我在吠叫错误的树吗?基本上,我正在寻找一个简单的英文描述,说明对于一个拥有 CPU 功能示意图的人来说下一步是什么。一旦我知道了该往哪个方向前进,我就可以破解书籍并弄清楚我需要知道的关于如何到达那里的所有信息。另请注意,我在 Mac OS X 上,但我有一个 Window 的 XP 盒子,如果我绝对需要的话,我可以插入它。

4个回答

恭喜您的 CPU 设计。是的,FPGA绝对是您的下一步。但是你不是很清楚是什么让你头晕目眩。我认为这是提供的大量不同设备。你也没有说你正在使用什么模拟器。
当你合成一个设计时,合成器应该给你一个关于所用资源的报告,比如门和 RAM 的数量。这应该让您了解哪些部件适合您的设计。确保您有足够的净空选择一个有一些额外 RAM的部件,您需要在 CPU 上执行程序。

编辑(重新发表您的评论)
您需要特定制造商的开发系统。AlteraXilinx是大玩家,他们都有自己的信徒。您选择哪一个并不重要,两者都有足够的不同部分来满足您的需求。
如果您选择 Xilinx,它有免费的ISE WebPACK 设计软件(3.4GB 大容量下载)。与更高级的软件版本相比,这些限制目前不应该打扰您。
接下来你需要一块开发板。您需要了解需要选择哪种 FPGA。如果您选择 Xilinx,我会选择Spartan,也许是 Spartan-6,Virtex 已经是太高端的 IMO。还有很多可供选择,主要是板上的附加功能不同。您将需要一块带有更多开关和 LED 的电路板。我会寻找一个键盘连接器和一个显示模块。
Xilinx 有许多板卡,对于 Xilinx FPGA,还有DigilentAvnetXess等。

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

我忘了讲一些关于 FPGA 的事情。FPGA 基本上是一大组门,它们之间具有可编程连接,因此您可以使用它们创建几乎任何逻辑功能/系统。几代之后,FPGA 变得更加先进,现在已经优化了块来创建高效的功能,如 RAM。您的开发软件的合成器会创建门之间的连接图。这不会永久存储在 FPGA 中,但必须在上电时从外部配置闪存加载。那是您的设计将被存储的地方。像任何其他闪存一样,它可以被擦除和重写很多次。

我不熟悉 Xilinx 的工具,但我使用的是 Altera 的,所以我会告诉你他们的。Xilinx 和其他公司应该不会有太大的不同。

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有上升沿时才会改变(这是用于高电平有效复位)。如果您忘记了敏感度列表中的某些内容(它应该包含所有右侧变量,没有任何组合逻辑块的or修饰符),编译器将根据需要合成锁存器,而不是调用错误。很疯狂,但事实就是如此,因为 Verilog 最初是一种隐藏(因此不需要)实现细节的模拟语言。VHDL 是相同的,但更冗长。RESETCLKposedgenegedge

最后,几年前发布了一个名为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扩展为多少位的符号;参数化模块更加灵活)。最后,请注意替换(可用于任何事物;组合逻辑、锁存器和触发器)需要将内容合成为触发器。还有一个消除了敏感度列表,因为它只是计算出从输入到块的敏感度。0alwaysalways_ffalways_comb

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

可悲的是,我还没有找到一本关于这个主题的好书。我所学到的知识是通过将多个来源的东西拼凑起来的,例如 Verilog 书籍,它不能很好地告诉你什么是可合成的,什么不是,以及示例代码。Quartus II 有一个“插入模板”命令,可以为几个常见的结构插入模板代码,从 D 触发器到状态机。

演示硬件

在 Verilog 中实现处理器后,您需要构建它。目前,让 Quartus 选择芯片(您必须选择系列;我推荐 Cyclone IV)和引脚。一旦它建立起来,你就会知道你需要多少芯片。它会告诉您使用了多少逻辑元件、触发器、RAM 位等。确保你在其中任何一个上都没有超过 50%;如果是,请查看编译器选择的芯片并手动选择下一个更大的(在逻辑元件中)具有至少相同数量的引脚的芯片,然后重复直到利用率低于 50%。

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

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

一旦你得到了引脚设置,再次构建它,以便它使用你想要的引脚。请记住,系统时钟等某些信号需要专用输入引脚(因此它们直接路由到内部 PLL)。

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

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

这很长,我希望它对一些人有所帮助。很多东西要学;这不像学习一门新的编程语言,更像是学习一种新的编程范式,例如从过程语言转向函数式语言。Verilog 是一种同步语言;大多数代码总是在执行。

祝你好运!

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

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

  1. FPGA 工具供应商并没有真正很好地支持它们
  2. 它是非便携式的

一旦你编写了 HDL,只要你不使用他们的各种“IP 向导”直接从供应商库中插入东西,或者直接从他们的库中粘贴组件,你就会拥有可以公平地移植到其他芯片的代码容易(比移植嵌入式 C IME 更容易)

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

两大 HDL 是 VHDL 和 Verilog。您可能想阅读此答案以了解它们的不同之处...

VHDL 还是 Verilog?

我还要说,如果您已经了解 Python,MyHDL 也值得一看 - 为您提供强大的验证能力,但仍然是“普通”HDL 提供的大部分低级控制。

一旦您选择了一个 HDL,然后在模拟中让它工作(再次,对不起!),您将处于可以通过供应商工具推动它并学习下一大块任务的状态 - 一旦它模拟正确地,合成它总是比你想象的要付出更多的努力 :)

如果您热衷于原理图并且可以获得许可证,LabviewFPGA 可能适合您。

获取 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 上运行它。