【声明】纯属原创,未经允许,禁止转载。
【接前文】
前文研究了如何配置Zynq子系统。
最后在Zynq子系统中激活了一个UART1硬核,通常该外设的管脚是绑定在MIO上的,在Zynq的封装图中通过FIXED_IO总线表示。但是上一节硬是将UART1的外设管脚绑定再Zynq的EMIO管脚上。最后显示的Zynq子系统的封装如下图所示:
可以看到出现了一个新的UART_1的接口,点击+号,可以显示该接口有两条总线UART1_TX和UART1_RX。重新执行“Run Block Automation”后,没有发生变化,即软件没有自动为UART_1建立片外PAD链接。再次查看“Run Block Automation”的说明,发现软件能够自动连接的只有MIO(FIXED_IO),触发和DDR接口,这些应该都与开发板的选型相关。
对于其他软件不支持的自动连接的功能管脚,可能需要跟后面用户自定义模块的外设管脚配置相同,有待后面进行验证。
软件支持的自动连接的FIXED_IO,包括如下如所示的管脚,包括54个MIO,PS_CLK ( 33.3333MHz)等。
这些管脚的绑定,是不是最后应该出现在约束文件中?有待验证。
【说明】为了最初的程序能够正常运行,将Zynq内部功能模块UART1的链接管教恢复成默认的MIO[48:49]。波特率还是修改后的9600bps。
3.3 添加已有的GPIO外设1--自动进行外设与Zynq系统的链接
【终于又见到编号了,感觉行文好久都没编号了,可见这篇文档有多流水。】
仅仅构建Zynq子系统后,相当于创建了一个最最简单的ARM芯片,外设功能模块比较少,比不上普通的ARM芯片。体现基于FPGA芯片的SoC系统优越性的重要一点是,用户可以自定义自己的功能外设,从而得到用户定制的ARM芯片系统。
因此有必要学习如何挂载一个由Logic Cell(PL)编写的外设功能模块。这里先挂在一个由Xilinx公司开发封装好的GPIO功能模块,只是该模块与Zynq子系统的接口是AXI总线形式,其中Zynq子系统是主机,外设模块是从机。
前文说过,SoC的Block Design设计相当于绘制原理图,本实验中两个芯片已经确定,一个是Zynq,一个是Xilinx公司开发封装好的GPIO功能模块。元件有了,绘制原 理图的工作只剩下连接了。通常都是手动连接的,但是Vivado很强大,它能对某些符合总线协议的接口进行自动匹配连接,本节我们学习一下是如何操作的。
利用总线形式的接口,就是说明能够方便的挂载多个外设,必然涉及到总线控制器。通常的总线结构示意图为:
选中后,在Block Properties中可以修改模块实例的名称。本实验命名为gpio_sw。
双击AXI GPIO模块的图标,可以打开配置页面。
详细的可以点击Documentation查看该模块的DataSheet。
可以看出,该模块应该是Xilinx公司原有模块升级来的,跟VII pro时代的GPIO模块结构类似,都是1个模块存在两个通道,本实验只用一个通道,而且这个通道全部是输入通道,用来获取拨码开关的输入数据。
由于ZedBoard板上有8个拨码开关,因此本模块需要8个并行的输入数据。
由于Vivoda软件包含了ZedBoard的电路板信息,因此存在自动进行管脚约束的可能。在Board页面,选择通道1:GPIO的Board Interface的下拉列表,可以看到Vivado软件根据ZedBoard的配置信息,找到3个GPIO接口,分别是8个拨码开关sws 8bits,8个LED灯leds 8bits和5个按键开关btns 5bits。这里选择sws 8bits。
点击OK,退出AXI GPIO模块的配置。返回结果如下:
可以看出,一个AXI接口的外设模块基本的port定义包括:
点击“Run Connection Automation”实现模块的自动连接。
在弹出页面中,勾选需要软件自动进行连接的端口。
这里与CPU之间的连接由于比较复杂,希望软件帮忙实现,而与外设之间的连接,可以自行完成,但是由于使用的ZedBoard开发板信息,Vivado软件支持,因此,想看看是否能够自动绑定。点击“OK”启动软件进行连接处理。
处理结果如下所示:
看起来有点乱,可以人为拖动,优化布局。
从这个布局就看出了层级结构,具体说明已在图中进行了标注。
【未完待续】总与能在一篇博客中完成一个完整的小节。不容易。下面将讲如何手动连接。。。。
文章评论(0条评论)
登录后参与讨论