You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vivado报CLOCK_DEDICATED_ROUTE错误:异步RS锁存器无时钟却报错

解决Vivado中异步RS锁存器的BUFG布局错误

错误原因

Vivado综合器误将异步置位信号S识别为时钟信号,自动为其分配了全局时钟缓冲(BUFG)资源。但S只是普通的异步控制信号,不需要走FPGA的专用时钟布线通道,这种不匹配导致布局工具抛出Place 30-574错误。

你的代码写法加剧了这个误判:进程中q <= aux;仅在R和S都为低电平时执行,这种不完整的输出赋值会让综合器生成非标准的锁存器结构,进一步误导工具的信号类型识别。

修复步骤

1. 修正RS锁存器代码逻辑

正确的异步RS锁存器需要在进程的所有分支中都更新输出信号,确保电路行为符合预期,同时避免综合器误判。修正后的代码如下:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity RSlatch is
Port ( 
    R, S : in std_logic;
    Q    : out std_logic
 );
end RSlatch;

architecture Behavioral of RSlatch is
    signal aux : std_logic := '0';  -- 改用signal而非variable,更符合VHDL设计规范
begin
    process (R, S)
    begin
        if R = '1' then 
            aux <= '0';
        elsif S = '1' then  
            aux <= '1';
        end if;  -- 当R/S都为0时,aux保持原值,无需额外赋值
        Q <= aux;  -- 每次进程触发都更新输出
    end process;
end Behavioral;

注意:将原代码中的variable改为signal,这是VHDL设计中存储状态的标准做法,variable的生命周期和作用域容易引发意外行为。

2. 添加约束强制禁用时钟专用布线(可选)

如果修正代码后仍出现该错误,可以在你的.xdc约束文件中添加以下命令,明确告诉工具R和S不是时钟信号,禁止为它们分配专用时钟布线:

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets S_IBUF]
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets R_IBUF]

官方不建议长期使用该约束,优先通过修正代码逻辑让综合器正确识别信号类型。

内容的提问来源于stack exchange,提问作者Marcu Petric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:52:48