我正在尝试用 VHDL 描述一个 RS 异步锁存器。我从 vivado 收到这个错误。
[放置 30-574] IO 引脚和 BUFG 之间的布线放置不当。 如果这个次优条件对于这个设计是可以接受的,你可以 使用 .xdc 文件中的 CLOCK_DEDICATED_ROUTE 约束降级 此消息为警告。然而,使用这种覆盖是高度 灰心。这些示例可以直接在 .xdc 文件中使用 覆盖此时钟规则。 < set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets S_IBUF] >
S_IBUF_inst (IBUF.O) 锁定到 IOB_X0Y93 和 S_IBUF_BUFG_inst (BUFG.I) 由 clockplacer 临时放置在 BUFGCTRL_X0Y7
代码:
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
begin
process (R, S)
variable aux : std_logic := '0';
begin
if (R = '1') then
aux := '0';
elsif(S = '1') then
aux := '1';
else
aux := aux;
q <= aux;
end if;
end process;
end Behavioral;
我没有使用时钟,所以我不明白为什么会收到此错误消息。
你得到了一个时钟信号,因为你的代码成功地描述了一个作为单个预定义单元内置的锁存器。它的时钟输入连接到由 R 和 S 组合而成的信号(其 D 输入信号也由 R 和 S 组合而成)。不建议使用锁存器,因为它们很难处理时序收敛,尤其是当 R 和 S 都是时钟信号时。
您没有发布足够的信息来确定问题出在哪里。但是您的
S
输入可能不在正确的时钟引脚上。由于这似乎不是一个完整的设计,您可能会在警告消息中设置该属性。
请注意,虽然您可能没有在代码中明确使用时钟,但 Vivado 已选择使用时钟资源来实现它。