使用处理器系统设计嵌入式系统(4)---PS与PL的结合
0赞在PL中,我们可以很方便地实现已有的设计,并且将一些IP核结合进来;这次主要测试了PS与PL中资源的结合方法。本次测试的系统大概构成是:
PS中有UART(直接使用第一次测试时建立的工程)、GPIO(连接到ZedBoard板子的LD9这个LED);PL中有AXI定时器,AXI GPIO和以后Chipscope调试用的内核ICON;PS与PL之间有EMIO接口完成IO信号处理,它们之间的数据交换则使用AXI互连总线。
首先打开PlanAhead,并在Design souces下面打开上次建立的xmp文件(此时XPS自动打开)。在XPS中切换到Bus Interface选项卡,并在IP catalog中点击GeneralPurposeIO,添加一个AXI的GPIO,如图1所示。
图1 XPS中添加PL的IP并关联到PS
在产生好的axi_gpio_0下面,改变channel1的位宽为1(默认32),因为我们只需要一个触发LD9的就可以了。保存之后,AXI互连总线会自动将PS与PL中的IP进行连接。然后在IP catalog中点击DMA and Timer, 添加一个AXI Timer/Counter IP;在IP catalog中Debug下面添加ChipScope AXI Monitor和ChipScope Integrated Controller(即以前使用ChipScope时用到的ICON)。全部添加完成之后,在XPS中看到的port中有以下的连接:
图2 XPS中的端口示意
为了将PL中的定时器中断链接到PS中的中断控制器,需要在图2中示意的processing_system7_0下面的IRQ_F2P,用鼠标左键单击L to H那个选项,然后手动添加到中断源,如图3所示。
图3 手动添加中断源
接下来在BusInterfaces选项卡中,用同样的方法,把chipscope_axi_monitor关联到axi_gpio_0.S_AXI,并把Chipscope_icon_0关联到chipscope_axi_monitor;当然也可以把其它需要使用ChipScope Pro观测的值关联上去,如图4所示。最后把processing_system7_0下面的M_AXI_GPO_ACLK关联到processing_system7_0::FCLK_CLK0。
图4 关联Chipscope
全部IP添加完成并关联之后,还需要把PS与PL通过EMIO连接。这里发现14.3版本需要在XPS中Zynq选项卡下I/O peripheral下面把EMIO启用,才能改变它的宽度,如图5所示(这是与前面版本ISE的区别)。
图5使能并配置EMIO
然后在XPS中Zynq选项卡下点击32b GP AXI Master Ports,在User选项卡下面点击general,可以看到EMIO的数据宽度,如图6所示。
图6 EMIO配置
在XPS下,切换到port选项卡,点击processing_system7_0下面的(IO_IF)GPIO_0,把它设置为外部可用,如图7所示。
图7 配置管脚为外部可用
点击XPS的菜单栏---project, design rule check,会给出端口配置的检查信息。关闭XPS并回到PlanAhead,在project manager中新建一个约束文件,添加约束语句:
# Connect to Push Button "BTNU"
NET axi_gpio_0_GPIO_IO_pin IOSTANDARD=LVCMOS25 | LOC=T18;
# Connect to Push Button "BTNR"
NET processing_system7_0_GPIO_pin IOSTANDARD=LVCMOS25 | LOC=R18;
可以把AXI GPIO关联到PL的T18和R18管脚,分别对应于ZedBoard上的一个按键。然后在PlanAhead中点击generate bitstream,经过编译、布局布线等工作,最终产生bit文件(PS是硬核,不需要下载,但是PL是可编程逻辑,仍然需要下载)。目前貌似PlanAhead仍不支持多核并行工作,所以编译等待的时间仍然较长(ISE套件安装的时候倒是已经可以多核并行了)。
编译生成无误之后,将bit文件和硬件系统的配置导入到SDK,然后就可以重复上次的测试过程了。