我学习了nand2tetris课程(https://www.nand2tetris.org/course),主要目的是学习如何在一个真正的FPGA上构建一个软处理器。
虽然课程很简单,但现在我从FPGA实现开始,我感到有点迷茫。
我买了一个英特尔de10纳米FPGA(http://de10-nano.terasic.com/),我从Uni获得了一些Verilog的知识,我可以下载"Quartus Prime“,用简单的东西如led闪烁等进行引导。
然而,当涉及到实现处理器时,有几件事情我不太清楚:
这些是我目前正在努力解决的主要问题。你能告诉我任何对新手有用的资源吗?
谢谢,
发布于 2021-03-16 09:16:49
对于像nand2tetris中的CPU这样简单的东西,您可以使用块RAMs,DE10Nano上有足够多的块RAMs,可以满足您的所有需求。再加上一些分布式内存。
如果您仍然希望访问DDR,则DE10Nano是一个由处理器子系统管理的硬DDR控制器的SoC。在Avalon总线上与它进行接口非常容易(除非您确实需要最大的性能,否则不要费心使用AXI )。
对于ROM,只需使用LUTs。在Verilog中的一个简单的静态案例将被转换成一个高效的基于LUT的ROM.
为了在DE10Nano上访问HDMI,您可以查看这个示例:https://github.com/combinatorylogic/soc/blob/a1d282d793548030cba940496bed90ff3a29c0ba/backends/c2/hw/de10nano/vga1080p.v (您还可以查看同一个项目中的DDR )。在使用HDMI之前,您需要在ADV7513上设置i2c芯片,请参阅同一个项目下来自Terasic的库的副本。
对于单色800x600视频,您可以使用块RAM。为了获得更高的分辨率,如上面的示例所示,您必须使用DDR。
发布于 2021-03-18 14:19:52
我在一个小型nand2tetris (ice40HX8K)上完成了ice40HX8K硬件的实现,下面是我的建议:
A.内存原始nand2tetris使用两个内存部分:
两者都可以用fpga的BRAM单元来实现.它们有一个很好的特性,BRAM可以在启动时预装数据。这是有用的预加载ROM与您的指令代码。如果你有很多布拉姆,你会没事的。我的板(从Olimex来的ice40HX8K-EVB)只有8Kx16bit的BRAM。所以我做了以下几件事:
你的板上有一个分开的DRAM芯片。您也可以使用DRAM作为内存,但请注意:使用DRAM比使用SRAM要复杂得多。
输入/输出nand2tetris有一个屏幕和一个键盘。
一个容易实现的替代方案可以是:实现一个小的UART,这样您就可以通过终端连接您的PC (例如屏幕/devttyACM0)。现在,您可以在运行时与您的Hack-CPU (在fpga中运行)交谈。我还使用UART在启动时上传Hack-Application。
https://stackoverflow.com/questions/66627417
复制相似问题