原创 【博客大赛】Zynq构建SoC系统深度学习笔记-01-利用IP集成器构建嵌入式SoC系统(05)

2016-1-20 21:25 1274 11 11 分类: FPGA/CPLD 文集: Zynq构建SoC系统深度学习笔记

【声明】纯属原创,未经允许,禁止转载。

 

3.4 添加已有的GPIO外设2--手动进行外设与Zynq系统的链接

        再添加一个AXI GPIO模块,这次无论是与Zynq端的连接还是与片外PAD端的连接,全部手动实现,从而理解上面那一步“Run Connection Automation”中,Vivado软件具体干了些什么事情。

       添加一个新的AXI GPIO模块,实例名称命名为gpio_btn,只启用1个通道,为单向输入通道,位宽为8bits,连接ZedBoard板上的5个按键开关。
 

图片1.jpg

       注意,这里为了更具一般性,将GPIO的Board Interface保持默认的Custom设置。

       首先连接与gpio_btn模块的clk和rst信号。

       根据gpio_sw模块的链接结果,大胆假设它们这两路信号的连接应该是一致的。

       把鼠标移动到模块port处,鼠标将变成笔的形状,此时按下左键将会绘制相应的连线。

图片2.jpg

       一直按着左键移动鼠标到欲与之链接的芯片port附件,软件会检测到与之匹配的port并标注一个绿色的小队号。如下图所示。鼠标移动到这个port上,松开左键完整链接。

图片3.jpg

       与正确的port链接上后,软件会自动优化连接线,比如对clk的链接结果如下所示。

图片4.jpg

       同样gpio_btn模块的s_axi_aresetn应该与rst_processing_sustem7_0_100M模块的peripheral_aresetn[0:0]管脚相连。

        另外gpio_btn模块的S_AXI总线需要与processing_system7_0_axi_periph模块相连,但是不能连接到M00_AXI端口上。

        双击processing_system7_0_axi_periph模块,打开配置界面,如下图所示:

图片5.jpg

       可以看到对于该模块,可以配置其两端的主机和从机的数量。

       其中,Number of Slave Interface是指在本模块配置从机接口的数量,对应链接的是主机设备。

       同理,Number of Master Interface是指在本模块配置从机接口的数量,对应链接的是主机设备。

       从上图可以看出,本模块中最多支持创建64个Master Interface,即一个该模块,最多能够挂载64个从机外设。

       同理,通过Number of Slave Interface配置下拉列表,可以看到,本模块最多支持创建64个Slave Interface,也就是说在该模块的另外一边,支持64个主机设备,通常CPU(Zynq子系统)通常都是主设备,但不排除某些特殊的应用,用户可以 自行配制一个AXI主设备,并由其主动访问其余的从设备。

       在本实验中,对于整个系统,只需要1个主设备Zynq子系统,它能够主动访问两个从设备,gpio_sw和gpio_btn。因此,对于 processing_system7_0_axi_periph模块,需要配置Number of Slave Interface=1(默认),以及Number of Master Interface=2(需要修改)。

图片6.jpg

       其外,对于本模块的Slave Interface和Master Interface接口还可以配置是否使用FIFO。默认是不配置的,对于高吞吐量的簇发行数据,可以配置FIFO提高性能。

       配置完毕后,该模块右侧会多出一个port:M01_AXI,左侧会多出两个Port:M01_ACLK和M01_ARESETN。如下图所示:

图片7.jpg

       大胆猜测,应该将gpio_btn模块的S_AXI与M01_AXI连接,M01_ACLK和M01_ARESETN应该和其上方的M00_ACLK和M00_ARESETN相似,暂时无法确定,先放着。

      只连接S_AXI与M01_AXI的结果如下所示:

图片8.jpg

      对比检查,另外创建一个工程,使用软件“Run Connection Automation”自动创建链接,结果如下:

图片9.jpg

      通过对比,可以看出两者实质基本是一样的,但是也发现了不同,就是前文没有连接的M01_ACLK和M01_ARESETN确实与M00_ACLK和M00_ARESETN相似,以后对于更多外设模块操作应该都是类似的。

      现在用户自行链接的方案,就差gpio_btn模块的GPIO口还没有着落。

      鼠标放到gpio_btn模块的GPIO口上,当光标变成笔的形状后,点击鼠标右键,弹出菜单如下图所示。

图片10.jpg

      选择“Make External”项后,系统将会创建与之相连的片外PAD。如下图所示。

图片11.jpg


    可以在External Interface properties中改变PAD的名称。

图片12.jpg

    修改之后的结果,跟软件自动连线的结果将是一模一样的。
    物理连接完毕之后,需要对新加的外设模块设置内存映射,点击Address Editor标签页,显示如下,可以看出新添加的gpio_btn模块还没有分配内存映射。

图片13.jpg

       这个步骤跟VII Pro对应的XPS设置是类似的。不过因为只有AXI一层总线关系,不像PLB->OPB两层总线需要两层映射那么麻烦。通过gpio_sw模块看 出,xinlinx公司一个外设默认还是分配64kB的内存空间,跟VII Pro时代没有变化。

       选中gpio_btn模块,右键菜单,显示如下:

图片14.jpg

       其中,Assign Address项能够人工分配内存地址,Auto Assign Address有软件自行分配内存地址。其实,自动分配完也可以手动修改,因此推荐采用自动分配。分配结果如下所示:

图片15.jpg

      根据Xilinx公司的官方实验手册,有如下信息:

图片16.jpg

       自此,对于SoC系统的配置工作基本完毕,与VII Pro时代的XPS相比,少了mhs等配置文件,新版问应该也有配置文件,不过现在还没找到。
       完整集成设计之后,需要检查一下,执行Tool菜单下的Validate Design指令,或者直接按F6,进行检查。

图片17.jpg


    经过检查,没有错误,将显示如下信息:

图片18.jpg

       如果有错,将显示错误信息,可以根据错误信息检查设计。
       至此,对于SoC的硬件系统设计全部完毕。可以退出Block Design工作界面。


【未完待续】。。。。



 

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条