Giu*_*ini 1 fpga cpu-architecture intel-fpga nand2tetris
我学习了 nand2tetris 课程 ( https://www.nand2tetris.org/course ),主要目的是学习如何在真正的 FPGA 上构建软处理器。
虽然课程很简单,但现在我开始使用 FPGA 实现,我觉得有点迷茫。
我买了一个 Intel de10 nano FPGA(http://de10-nano.terasic.com/),并且从 Uni 获得了一些 Verilog 知识,我能够下载“Quartus Prime Lite”并使用简单的东西引导,比如 LED 闪烁,等等...
但是,在实现处理器时,有几件事我不清楚:
这些是我目前正在努力解决的主要问题。你能指出我对一个完整的新手有用的任何资源吗?
谢谢,
对于像 nand2tetris 的 CPU 这样简单的东西,您可以使用块 RAM,DE10Nano 上有足够的块 RAM,可能足以满足您的所有需求。再加上一些更多的分布式内存。
如果您仍然想要访问 DDR,DE10Nano 是一款 SoC,具有由处理器子系统管理的硬 DDR 控制器。通过 Avalon 总线与其连接非常容易(除非您确实需要最大可能的性能,否则不要使用 AXI)。
对于 ROM,只需使用 LUT。Verilog 中的简单静态情况将被转换为高效的基于 LUT 的 ROM。
要在DE10Nano上访问HDMI,您可以看一下这个示例: https: //github.com/combinatorylogic/soc/blob/a1d282d793548030cba940496bed90ff3a29c0ba/backends/c2/hw/de10nano/vga1080p.v(您也可以看一下同一项目中的 DDR 访问)。在使用 HDMI 之前,您需要通过 i2c 设置 ADV7513 芯片,请参阅同一项目下 Terasic 的库的副本。
对于单色 800x600 视频,使用块 RAM 就可以了。对于更高分辨率,如上例所示,您必须使用 DDR。
小智 5
我在一个小型 fpga (ice40HX8K) 上完成了 nand2tetris 硬件的实现,这里是我的建议:
A. 内存 原始 nand2tetris 使用两个内存部分:
两者都可以使用 fpga 的 BRAM 单元来实现。它们有一个很好的特性,即 BRAM 可以在启动时预加载数据。这对于使用您的指令代码预加载 ROM 很有用。如果您有足够的 BRAM,那就没问题了。我的主板(来自 Olimex 的 ice40HX8K-EVB)只有 8K x 16 位的 BRAM。所以我做了以下事情:
你的主板有一个单独的 DRAM 芯片。您也可以将其用作内存,但请注意:使用 DRAM 比使用 SRAM 复杂得多。
B. 输入/输出 nand2tetris 有一个屏幕和一个键盘。
一个易于实施的替代方案可能如下: 实施一个小型 UART,以便您可以通过终端(例如 screen /devttyACM0)连接您的 PC。现在您可以在运行时与您的 Hack-CPU(在 fpga 中运行)对话。我还使用 UART 在启动时上传 Hack-Application。
看看我的 repo:https : //gitlab.com/x653/nand2tetris-fpga