【声明】纯属原创,未经允许,禁止转载。
3.4 添加已有的GPIO外设2--手动进行外设与Zynq系统的链接
再添加一个AXI GPIO模块,这次无论是与Zynq端的连接还是与片外PAD端的连接,全部手动实现,从而理解上面那一步“Run Connection Automation”中,Vivado软件具体干了些什么事情。
添加一个新的AXI GPIO模块,实例名称命名为gpio_btn,只启用1个通道,为单向输入通道,位宽为8bits,连接ZedBoard板上的5个按键开关。
注意,这里为了更具一般性,将GPIO的Board Interface保持默认的Custom设置。
首先连接与gpio_btn模块的clk和rst信号。
根据gpio_sw模块的链接结果,大胆假设它们这两路信号的连接应该是一致的。
把鼠标移动到模块port处,鼠标将变成笔的形状,此时按下左键将会绘制相应的连线。
一直按着左键移动鼠标到欲与之链接的芯片port附件,软件会检测到与之匹配的port并标注一个绿色的小队号。如下图所示。鼠标移动到这个port上,松开左键完整链接。
与正确的port链接上后,软件会自动优化连接线,比如对clk的链接结果如下所示。
同样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模块,打开配置界面,如下图所示:
可以看到对于该模块,可以配置其两端的主机和从机的数量。
其中,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(需要修改)。
其外,对于本模块的Slave Interface和Master Interface接口还可以配置是否使用FIFO。默认是不配置的,对于高吞吐量的簇发行数据,可以配置FIFO提高性能。
配置完毕后,该模块右侧会多出一个port:M01_AXI,左侧会多出两个Port:M01_ACLK和M01_ARESETN。如下图所示:
大胆猜测,应该将gpio_btn模块的S_AXI与M01_AXI连接,M01_ACLK和M01_ARESETN应该和其上方的M00_ACLK和M00_ARESETN相似,暂时无法确定,先放着。
只连接S_AXI与M01_AXI的结果如下所示:
对比检查,另外创建一个工程,使用软件“Run Connection Automation”自动创建链接,结果如下:
通过对比,可以看出两者实质基本是一样的,但是也发现了不同,就是前文没有连接的M01_ACLK和M01_ARESETN确实与M00_ACLK和M00_ARESETN相似,以后对于更多外设模块操作应该都是类似的。
现在用户自行链接的方案,就差gpio_btn模块的GPIO口还没有着落。
鼠标放到gpio_btn模块的GPIO口上,当光标变成笔的形状后,点击鼠标右键,弹出菜单如下图所示。
选择“Make External”项后,系统将会创建与之相连的片外PAD。如下图所示。
可以在External Interface properties中改变PAD的名称。
修改之后的结果,跟软件自动连线的结果将是一模一样的。
物理连接完毕之后,需要对新加的外设模块设置内存映射,点击Address Editor标签页,显示如下,可以看出新添加的gpio_btn模块还没有分配内存映射。
这个步骤跟VII Pro对应的XPS设置是类似的。不过因为只有AXI一层总线关系,不像PLB->OPB两层总线需要两层映射那么麻烦。通过gpio_sw模块看 出,xinlinx公司一个外设默认还是分配64kB的内存空间,跟VII Pro时代没有变化。
选中gpio_btn模块,右键菜单,显示如下:
其中,Assign Address项能够人工分配内存地址,Auto Assign Address有软件自行分配内存地址。其实,自动分配完也可以手动修改,因此推荐采用自动分配。分配结果如下所示:
根据Xilinx公司的官方实验手册,有如下信息:
自此,对于SoC系统的配置工作基本完毕,与VII Pro时代的XPS相比,少了mhs等配置文件,新版问应该也有配置文件,不过现在还没找到。
完整集成设计之后,需要检查一下,执行Tool菜单下的Validate Design指令,或者直接按F6,进行检查。
经过检查,没有错误,将显示如下信息:
如果有错,将显示错误信息,可以根据错误信息检查设计。
至此,对于SoC的硬件系统设计全部完毕。可以退出Block Design工作界面。
【未完待续】。。。。
文章评论(0条评论)
登录后参与讨论