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 代碼或原語明確指定。建議通過綜合后的原理圖查看是否成功推斷出異步復位邏輯。
?