复位信号哪些场景可以省略
复位信号在某些时候可以省略,从而节省LUT和布线资源。
必须拥有复位信号的场景:控制逻辑,状态位,重要计数器,重要状态寄存器
可以不加复位信号的场景:数据传输的中间寄存器
可以省略复位的场景
| 场景 | 示例 | 不复位的原因 | 条件 |
|---|---|---|---|
| 用于消除亚稳态的打拍信号 | uart_rx_ff1 |
一般不需要复位信号,其本意是为了消除亚稳态,如果有复位信号,反而会加重亚稳态问题。 | |
| uart发送/接收寄存器 | uart_tx_reg |
只有当判断到uart一帧数据发送,或者接收完成。该寄存器才有效,初值对结果无影响。 | 系统不会用uart初始值的话 |
| 纯数据流水线寄存器 | pipe1, pipe2, pipe3 |
上电后数据随机,但系统启动后会被新数据覆盖 | 系统启动阶段会自动刷新数据 |
| 普通计数器(持续运行型) | clk_div_cnt, pwm_cnt |
初值不影响最终周期 | 不依赖特定初值,只要连续计数即可 |
| DSP 运算中间寄存器 | mul_out, add_res |
每次运算会更新值 | 不需复位 |
| RAM 输出寄存器 | ram_data_out |
上电读出随机值无关紧要 | 读取前不会使用 |
| 高速数据流中间级寄存器 | 视频流、音频流数据 | 初值无意义 | 有效数据到来后自然更新 |
| 握手延迟链 / 延迟线 | delay1, delay2 |
启动后自动进入稳定延迟 | 初始值不影响数据相位 |
必须复位的场景
| 场景 | 示例 | 不复位的后果 | 原因与说明 |
|---|---|---|---|
| 电平信号转脉冲信号时,对电平信号的打一拍 | 脉冲信号一般具有控制功能 | ||
| 状态机状态寄存器 (FSM) | state |
上电进入非法状态,系统逻辑跑飞 | FSM 无法保证初始状态,必须从 IDLE 开始运行 |
| 控制信号寄存器 | enable, valid, start, done |
上电时输出随机信号导致错误触发 | 控制逻辑在启动阶段必须处于确定状态 |
| 复位信号同步器 | reset_sync1, reset_sync2 |
导致全局复位不同步或短脉冲错误 | 自身用于产生稳定复位,必须保证初值 |
| 跨时钟域握手信号 | req, ack |
跨时钟通信异常 | 初始状态必须一致,否则握手协议失效 |
| 总线接口控制信号 | AXI、I2C、SPI 控制寄存器 | 启动时协议不符合规范 | 通信协议要求复位后为固定状态 |
| 计数器(若依赖复位启动) | 帧计数器、字节计数器 | 无法同步到系统起点 | 需要复位到零才能正确对齐帧边界 |
| FIFO 控制逻辑 (wr_ptr, rd_ptr) | FIFO 读写指针 | 上电指针错乱,FIFO 满/空判断错误 | 指针初始化错误会破坏整个数据流 |
复杂场景下
- 如果跨时钟域传电平信号,在目的域为解决亚稳态问题打了两拍的,为了将这电平信号转脉冲信号又打了一拍。
- synchronizer(前两拍) :不复位(避免引入异步复位带来的风险)。
- edge-detect 的延迟寄存器(最后一拍) :加同步复位,保证上电/复位释放时不会产生虚假脉冲。