在PS中使用用户自己封装的IP
(1)建立并封装纯PL的IP核
建立一个纯PL的工程,在工程中添加自己编写的Verilog模块;创建IP只需要.v文件,不需要做管脚分配;
(2)tools--->创建和封装新IP
选择封装当前的工程,包含.xci文件;
在工程设置中,添加自定义IP的工程目录,到IP仓库中---->apply---->OK;
上述的Display name即为IP的封装名称;该名称可以用于搜索;
(3)到此自定义IP封装完毕
(4)在另外目录,创建PS侧的工程
上图中,run_led_v1_0是纯PL侧的模块,ZYNQ_PS是纯PS侧的模块,在该例子中,PL侧使用的是从PS侧分过来的时钟和复位信号,所以xdc文件中,不需要做clk和reset_n的管脚分配;
含PS时,使用核心板上的50Mhz晶振,PLL分频为100Mhz,然后分一部分给块图中的PL部分使用,此时,不需要为PL侧的clk和reset分配管教;
仅含PL时,使用底板上的100Mhz晶振,此时需要为PL中的clk和reset分配管脚;
自定义的IP本质上是和CPU同等地位的IP核;
由于,该IP核只需要使用到PS中的clk和reset,所以随便跑个PS程序,能提供clk和reset即可;此中,直接使用HelloWorld程序;HelloWorld需要打印,所以加入UART1,PS程序运行需要DDR,加入DDR;
PS侧需要使用的时钟如上所示;
(5)运行
只要PS侧给该IP核提供了clk和reset,其就能运行;
应用程序--->debug as---->debug configuration---->system debug;
(6)注意事项
需要注意管脚分配,该工程中,PL侧只有LED_o[3:0]一共4个管教需要外接,所以管脚分配只需要分配这4个管教即可;
而单独跑water_LED程序时,由于没有PS为其提供clk和reset,还需要为clk,reset提供管脚分配和做时序约束(底板的时钟为100Mhz);