一开始接触到FPGA,肯定都知道”复位“,即简单又复杂。简单是因为初学时,只需要按照固定的套路——按键开关复位,见寄存器就先低电平复位一次,这样一般情况可以解决99%的问题,甚至简单的设计,就不可能有问题。复杂是因为复位本身是对大规模的硬件单元进行一种操作,必须要结核底层的设计来考虑问题。
1. 常见问题
自己在学习实践过程中,以及看到网友询问的,有关FPGA复位设计大概有以下几类问题:
我板子上没有设计按键复位怎么办?
怎么设计上电复位?不可能上电都要去按键吧
同步复位还是异步复位?各自优势是啥?
高电平复位还是低电平复位?
……
归根结底,就是怎样设计复位,我可能给不出完美的答案,但查阅了一些资料,总结了一些设计中考虑的因素,在加上参考文献,应该能解决99.9%的疑惑。
2. 常见的复位方式
我们习惯上通常使用的复位有三种方式:
硬件开关:复位信号接一个拨码开关或按键,或者RC电路
电源芯片:上电时候电源芯片产生,可以长时间维持,直到稳定。
控制芯片:控制芯片产生复位脉冲。
没有专门的电源或控制芯片,甚至连按键都忘记设计的情况下,有人提出可不可以拿内部计数器做一个所谓的上电“软”复位,如下代码所示,当cnt计数到一定的值时,产生一个复位脉冲信号。
always@(posedge clk or negedge rst_n)
begin</