翻译原文来自:https://www.rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide

 

本指南使用的硬件设计是DE0-Nano-SoC(Atlas板)的Golden hardware Reference design (GHRD)工程的微小修改版本(见文末的附件atlas_linux_ghrd.tar.gz)。如果您是Altera SoC新手,那么您可以了解下这个GHRD,GHRD是一个包含构建SoC设计所需的许多基本组件(其中包括已经参数化的硬处理器系统HPS IP)的硬件设计工程。该GHRD通常由开发板制造商提供,任何用户的设计都可以始于GHRD,然后在其基础上进行修改增删,所以对于新手来说GHRD是一个很好的起点。在我们的例子中,Atlas板的制造商Terasic在“System CD”中(具体路径是Demonstrations/SoC_FPGA/DE0_NANO_SOC_GHRD文件夹)有未修改的GHRD工程,该板子对应的System CD可以从友晶的网站下载。

 

在我们的案例中,对GHRD进行的唯一修改是将驱动led的PIO(并行I/O)移除并替换为一个定制组件。这是为了模拟任何用户都会经历的最开始的过程:从GHRD开始,删除不需要的组件,并添加自己的自定义组件。在本指南的其余部分中,我们将学习如何在嵌入式Linux开发过程的每个步骤中集成和使用这个自定义组件。

 

您可以先尝试打开atlas_linux_ghrd的Quartus工程文件 (soc_system.qpf)和Qsys (soc_system.qsys)来看看工程都有些什么。Qsys系统内部的定制LED组件如下图所示:

 

 自定义组件

这个系统中介绍的组件是一个简单的Avalon内存映射从设备,它允许HPS 读写一个8位寄存器。Qsys系统会导出该8位寄存器,以便在顶层文件中连接到它。在顶层文件中,这个导出的“LED”信号连接到Atlas板上的8个LED灯。换句话说,我们已经创建了一个非常简单的仅支持输出的PIO(并行I/O,又名GPIO)模块。稍后,我们将编写Linux软件来write该寄存器从而更改LED灯的状态。

 

 

有关如何构建自定义Qsys组件以及Avalon-MM接口如何工作的更多资源,请查看本页底部的链接。源代码如下所示:

 

 生成配置FPGA所需的原始二进制文件(Raw Binary File

Quartus工程编译后将生成一个. sof文件(SRAM Object文件)。然后可以通过JTAG口对SoC FPGA的FPGA部分进行编程。在boot嵌入式Linux时,一种常见的boot方案是首先 boot HPS(硬处理器系统)然后对FPGA进行编程。在我们的例子中,引导加载程序 (bootloader,将在以后的章节中描述)将在Linux启动之前对FPGA进行编程,这时要用到的配置文件格式是.rbf而不是. sof文件(所以需要将sof转成rbf)。

 

在这个设计中.rbf文件已经为您创建了!接下来您只需做下面的事情。

如果你正在研究自定义设计,并想知道如何生成.rbf文件,请参照以下步骤:

1. 在Quartus中,打开“ Convert Programming Files ”窗口((File→Convert Programming Files)。

2. 在“Programming file type”中选择“Raw Binary File(.rbf)”

3. 在“Mode”中选择“Passive Parallel x16”(这是Linux编程的默认模式)。

4. 为输出文件选择一个名称(我将我的命名为soc_system.rbf)。

5. 点击“Input files to convert”部分中的“SOF Data”,然后点击“Add File…”按钮,浏览到您的.sof文件。

 

6. 您的窗口界面会是这样的:

 

7. 单击“Generate”将生成.rbf文件。

 

资源
Terasic的Atlas-SoC下载页面
如果您想下载Atlas板所有的数据表、用户手册、未修改的GHRD等,那么这里就是您要去的地方。


创建Qsys组件
这是构建自定义Qsys组件的指南。几乎包含了所有你需要知道的关于这个主题的信息。


使用Qsys组件编辑器创建自定义Qsys组件
一个关于创建自定义组件的YouTube短视频。


Avalon接口规范
关于Avalon 接口协议工作原理的资料。