Xilinx FPGA 中的寄存器(Flip-Flop)**确实支持异步复位**,但具体实现方式取决于你使用的设计方法(HDL 代码风格或原语实例化)。以下是详细说明:
---
### 1. **Xilinx 寄存器的复位特性**
- **同步复位和异步复位均支持**,但需要通过代码或原语明确指定。
- 异步复位的信号通常会直接连接到寄存器的 `CLR`(Clear,低电平有效)或 `PRE`(Preset,高电平有效)端口,这些端口是**异步的**。
---
### 2. **HDL 代码中的异步复位示例**
- **Verilog 异步复位**:
```verilog
always @(posedge clk or negedge rst_n) begin
if (!rst_n)
q <= 0; // 异步复位
else
q <= d;
end
```
综合后,Xilinx 工具会自动推断出带有异步复位端口的寄存器(使用 `FDCE` 或 `FDPE` 原语)。
- **VHDL 异步复位**:
```vhdl
process(clk, rst_n)
begin
if (rst_n = '0') then
q <= '0'; -- 异步复位
elsif rising_edge(clk) then
q <= d;
end if;
end process;
```
---
### 3. **Xilinx 原语中的异步复位**
Xilinx 提供的寄存器原语(如 `FDCE`、`FDPE`)明确支持异步复位:
- **`FDCE`**: 带异步清零(`CLR`)的 D 触发器。
- `CLR` 为低电平时,寄存器输出强制为 `0`(异步)。
- **`FDPE`**: 带异步置位(`PRE`)的 D 触发器。
- `PRE` 为高电平时,寄存器输出强制为 `1`(异步)。
---
### 4. **注意事项**
- **复位优先级**:异步复位的优先级高于时钟边沿触发。
- **资源类型**:某些专用硬件资源(如 DSP、BRAM 的寄存器)可能对复位信号有特殊限制,需查阅对应文档。
- **复位极性**:Xilinx 原语通常支持低电平有效的异步复位(如 `CLR`),但可通过反相器调整。
---
### 5. **为什么有人误以为不支持?**
- 如果代码中未正确编写异步复位条件(例如缺少 `negedge rst_n`),综合工具可能推断为同步复位。
- 某些第三方IP核或模板可能默认使用同步复位。
---
### 总结
Xilinx FPGA 的寄存器**支持异步复位**,但需通过 HDL 代码或原语明确指定。建议通过综合后的原理图查看是否成功推断出异步复位逻辑。