SOPC介绍
SOC FPGA定义
SOC FPGA所用芯片
SOC FPGA用到的软件
SOC FPGA软硬件开发难点
Intel PSG(原ALTER)
下面会用到
Quartus
软件,可参考开发板光盘下的,如下图所示。当然了, SoC EDS
也在这个文档中,这个也是以后要用到的软件,可以一并进行安装!
GHRD(黄金硬件参考设计)
Demos\SOC_FPGA\Quartus\AC501_SoC_GHRD
即为本开发板对应的GHRD工程,如下图所示。<注意>:工程不能在中文路径下!!!
可以点击该工程下对应的AC501_SoC_GHRD.qpf
文件,快速打开工程,如下图所示
在Quartus的左上方有个Project Navigator,双击其中的AC50_SoC_GHRD(v文件),即可打开Verilog代码,如下图所示。
在工程的工具栏右侧倒数第四个即为Platform Designer,单击即可打开,如下图所示
注意,会让选择要打开的文件,这里选择soc_system.qsys
文件,如下图所示
打开完成后界面,如下图所示
在System Contents中可看到SOC FPGA总共有如下外设(IP):【选中某个外设在左侧通过按钮可以调节上下位置】
各个外设显示界面如下图所示(下图将总线进行了折叠,关闭再打开Platform Designer后,折叠即可恢复为原来的样子)
接下来分析,各个IP核如何是与ARM(HPS)连接到一起的。
1、时钟信号
首先来分析时钟信号,筛选信号操作如下,在Platform Designer下的System Contents界面下的筛选按钮,如下图
然后选择Filter中的Clock and Reset Interfaces选项,
选择完毕后关闭Filter,在System Contents界面即可看到各个IP之间的时钟关系,如下图(当然了想把某个IP往上调,也可以按System Contents界面左侧的箭头)
可以看到,clk_0的clk表示主时钟,提供给每个IP核使用,如下图所示(看其中加粗的黑线)
当然了,还有一个时钟桥clock_bridge_0输入的时钟信号(66M),它专门是显示屏读取数据用的,如下图
2、复位信号
再来看复位信号,clk_0的复位信号与所有IP核的复位信号进行了连接,如下图所示
3、Avalon Memory Mapped slave
先在信号筛选器中,将筛选类型选择为All Interfaces,如下图所示
在其中的HPS_0的IP核中,其中的h2f_lw_axi_master(AXI Master),出来的信号连接到了各个IP核Avalon Memory Mapped slave上,如下图所示
那么h2f_lw_axi_master(AXI Master)核Avalon Memory Mapped slave到底是什么意思呢,接下来一一介绍。
首先来看h2f_lw_axi_master(AXI Master),在SOC FPGA中有三个桥,通过这三个桥,通过数据交换,三个桥分别是
注:其中的Master核Salve是站在HPS的角度来说的
H2F_LW_AXI_Master通过虚拟地址映射这个比较简单!
把F2H_AXI_Salve这个桥用起来是SoC FPGA这个架构的优势所在!
如何添加一个IP外设,拿一个timer举例,步骤如下:
①、在IP Catalog中搜索timer,然后双击其中的Interval Timer
②、接着弹出如下配置窗口,这里这是为了举例如何添加,故先不修改配置,直接默认即可,如下图
首先是时钟信号,注意要与F2H_LW_AXI_Master的时钟信号保持一致!如下图
添加时钟的方法,先选中目标时钟,如上图。然后再单击本信号时钟与目标时钟的交汇点,如下图
接着连接复位信号,这里直接连到了clk_0这个IP核的clk_reset,如下图
s1对应的Avalon Memory Mapped slave连接到hps_0的h2f_lw_axi_master即可,如下图
最后一个IRQ信号
在hps_0模块右键点击Edit,在FPGA Interfaces板块下的General先不用管,属于高级选项。
AXI Bridges是设置三个桥的宽度(当没有用到某个桥的时候,可以选择unused关闭【性能、功耗有所优化】)
针对FPGA需要用到SDRAM时配置(FPGA使用HPS部分的SDRAM接口),直接点击+号即可创建
复位,暂时高级用的不用管。
IO口复用,在其中的Peripheral Pins栏
以Ethernet Media Access Controller(太网控制器)为例
但是会发现报错,如下图,可以大概知道是EMAC0其它功能公用管脚,造成冲突了!
往下滑动,可以看到具体的复用。红色部分表示以太网使用的的引脚,蓝色部分为USB使用引脚,紫色部分为GPIO0和GPIO9使用到的引脚,可以发现明显冲突了!
假若我现在硬要使用以太网控制器,如何办呢?选择FPGA,即分配到FPGA部分的管脚上,通过FPGA管脚引出!
可以发现没有错误提示了,点击右下角的Finish,回到Platform Desigener界面,可以看到hps_0下增加了相应的EMAC信号,如下图
接下来双击,将其导出
然后点击菜单栏的Generate->Show Instantiation Template…
以上是千兆以太网分配到FPGA侧进行设计,I2C、UART等也是可以这样设计的!
SoC开发流程
什么时候修改dtb,什么时候修改uboot
编译配置保存内核
切换到root用户:su,然后输入密码
切花到普通用户:su ×××,
生效交叉编译器环境变量路径:source /home/xiaomeige/.profile
设置目标架构:export ARCH=arm
设置具体的编译工具链:export CROSS_COMPILE=arm-linux-gnueabihf-
开始编译内核:make 生成zImage(在内核源码的arch/arm/boot目录)