ZYNQ板PL部分程序添加复位信号的几种办法

ZYNQ板子本身芯片有PS_POR_B和和PS_SRST 硬件和软件复位信号了,所以硬件上没必要额外在PL端再增加复位信号了,那如何为PL的程序增加RST复位信号呢,这边提供了三种方式 可供选择

方法一 PLL的locked 充当复位信号

用FPGA的PLL 模块的locked信号来充当RST_N复位信号, Locked信号是用来观察pll输出时钟是否和输入时钟锁定。当锁定时,这个Locked信号就由低电平变为高电平,而这个信号也可以为我们充当rst_n信号来使用 clock wizard默认就会打开这个locked信号(如果我们用locked来充当复位信号,代表输入我们不使用其他复位信号,所以 这里可以直接关闭输入的reset信号)

方法二 用计数器加initial的方式充当复位信号

我们也可以为自己写一个1秒钟的复位信号(可以更短)

这里我们用到initial 来初始化计数器(因为如果没有复位信号,上电瞬间reg 的值可能是随机的,但是增加了initial,上电后reg的值会被初始化为我们给定的值)具体程序如下

parameter T1MS = 26'd50_000_000 ; //50M晶振时钟
reg [25:0]time_count;//时钟计数器
reg rst_n;

initial begin
    time_count=26'd0;
    rst_n=1'b0;
end

always@(posedge clk)
    if(time_count<T1MS)begin
        time_count<=time_count+1'b1; 
    end
    else rst_n<=1'b1;

程序很好理解, initial 块里 初始化了 time_count的值为0,初始化复位信号rst_n的值为0

然后在always块中 当时间计数没满一秒的时候 time_count一直自增, 当计数器计数满一秒钟后,计数器停止计数,并且寄存器rst_n由低电平 变成了高电平。 这里的rst_n 我们就可以拿来充当各个其他always 块的复位信号使用

方法三 用ZYNQ模块的复位信号(比较常用)

因为 不论是TF启动,还是 程序固化到 FLASH启动,我们都必须添加ZYNQ核才能完成上电加载启动的工作,可以这么说只要一个完整的工程,都少不了ZYNQ核,所以这里直接用ZYNQ PS现成的复位信号是最方便也是最理所当然的。 在blockdesign 里添加zynq 核后,zynq核默认就带了FCLK_RESET0_N信号,这个信号直接可以充当各个模块的复位信号使用。

当然还有 Block Design 自动生成的System reset 模块产生的复位信号也是可以使用的。

添加复位的方法还有很多种,大家也可以自行脑洞自行尝试

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注