ZYNQ—7020进行调试时复位PL

分类: ZYNQ |
这种操作我一共想到了两种方法(如有其它请指教):
第一种方法:制作一个IP核,通过PS(在SDK中写寄存器的方法)给该IP核中的寄存器写入一个值,让该IP核输出一个信号(高电平或者低电平),并将此信号直接连接到PL的复位端,依次来复位PL。具体结构架和SDK中的代码如下
http://s3/mw690/006F6HhWzy7bsg8RiH812&690
http://s6/bmiddle/006F6HhWzy7bsgeK52585&690
第二种方法:直接利用zynq模块中的FCLK_RESET0_N信号来使PL复位。具体的就是使FCLK_RESET0_N输出一个高电平信号来使PL复位。这种方法比较简单!但是考虑的事情比较多(下面会讲到)。
具体的结构和SDK中的代码如下:
http://s8/mw690/006F6HhWzy7bsgizGhV87&690
http://s6/bmiddle/006F6HhWzy7bsgoidbD75&690
最后的调试波形如下:
http://s3/mw690/006F6HhWzy7bsgrqQ7M12&690
记得上面提到这种方法考虑的事情比较多:主要是因为zynq的寄存器具有“写保护”,如果直接将数据写入FCLK_RESET0_N对应的寄存器中,则无法实现想要的功能。所以在进行对FCLK_RESET0_N的对应寄存器写数据之前应该把“写保护”模式关闭,然后再将数据写入FCLK_RESET0_N的寄存器中,这样才能有效实现想要的功能。最后不要忘记再将“写保护”模式开启。
对应的开启和关闭“写保护”的寄存器地址以及FCLK_RESET0_N的寄存器地址,在UG585文档中都有相应的描述。他分别对应的寄存器名称为:SCLR_LOCK,SCLR_UNLOCK和FPGA_CLR_CTRL。下面我也将对应的寄存器内容进行了截图,以供参考!
http://s9/bmiddle/006F6HhWzy7bsgQMHlm18&690
http://s7/bmiddle/006F6HhWzy7bsgvqGTIc6&690
http://s2/bmiddle/006F6HhWzy7bsgxmmBz51&690
http://s6/bmiddle/006F6HhWzy7bsgytmvzb5&690
http://s10/bmiddle/006F6HhWzy7bsgzj72Fd9&690