一、有初学者问 generate_hps_qsys_header.sh 是哪里来的?
二、遇到报错Module 'hps_0' not found in the SOPC Builder system?
三、附上头文件 hps_0.h 说明
一、有初学者问 generate_hps_qsys_header.sh 是哪里来的?
这个是可以自己编写的一个脚本:
第2行——调用工具sopc-create-header-files
第3行——当前文件夹下的qsys generate 以后生成的.sopcinfo文件,必须是自己工程的名字,比如我的工程名字是Computer_System.sopcinfo, 但是其他资料里面一般会用这个名字soc_system.sopcinfo,请记得改成自己工程里面的名字。
第4行——要生成的文件名字,可以自行修改
第5行——模块名,这个模块名是指在qsys中添加hps模块时的名字,不是指工程中模块的名字
二、遇到报错Module 'hps_0' not found in the SOPC Builder system?
swinfo2header: Module 'hps_0' not found in the SOPC Builder system.
sopc-create-header-files: swinfo2header --swinfo C:intelFPGA18.1embeddedhost_toolscygwin mpsopc-create-header-files.12132.tmp.swinfo --sopc ./Computer_System.sopcinfo --single hps_0.h --module hps_0 failed
前面提到这个模块名是指在qsys中添加hps模块时的名字,不是指工程中模块的名字,所以这里修改成ARM_A9_HPS 就不会有 问题了。
三、附上 hps_0.h 说明
Qsys系统和Linux应用程序之间通过一个名为hps_0.h的文件交互硬件信息,例如总线上添加了哪些外设,每个外设相对于HPS外部总线的偏移地址,每个外设所占的地址空间等,类似于开发NIOS II应用程序时候的system.h文件。
每当Qsys系统中更新了硬件之后,如果需要直接在Linux中编写应用程序以直接操作寄存器的方式来控制这些外设,则需要重新生成一次该文件,然后将该文件添加到软件工程下作为头文件包含。
那么如何得到hps_0.h文件呢?需要借助SoCEDS Command Shell,首先打开SoC EDS Command Shell,然后使用cd命令将路径切换到Quartus 工程所在目录,例如我是用的是友晶科技的DE1-SOC开发板,DE1-SoC_v.5.1.3_HWrevF.revG_SystemCDDemonstrationsSOC_FPGAmy_first_hps-fpgafpga-rtl路径,则切路径的命令为:
cd C:/DE1-SoC_v.5.1.3_HWrevF.revG_SystemCDDemonstrationsSOC_FPGAmy_first_hps-fpgafpga-rtl
然后,输入以下命令就可以得到hps_0.h文件了:
sopc-create-header-files "./soc_system.sopcinfo" --single hps_0.h --module hps_0
注意,soc_system.sopcinfo是Qsys编译得到的一个硬件信息文件,工程名称不一样,该文件的名字也不一样,需要根据自己的工程名称进行修改。
另外,输入ls命令,也可以看到工程目录下存在一个名为generate_hps_qsys_header.sh的文件,这是一个脚本文件,包含了生成hps_0.h文件的具体命令。我们可以到工程目录下打开该文件查看具体内容,实际内容就是我们上面输入的那条命令,因此,如果经常需要生成hps_0.h,可以直接执行该脚本即可。如果工程名不一样,修改为自己的sopcinfo文件名即可。
#!/bin/sh
sopc-create-header-files
"./ soc_system.sopcinfo"
--single hps_0.h
--module hps_0
执行该脚本的命令为:
./ generate_hps_qsys_header.sh