1

我有一些看起来很琐碎的 VHDL 代码,这让我发疯。我有一个外部逻辑位连接到一个名为“inint”的信号。然后,该信号将在如下所示的过程中使用:

process(inint)
  begin
    if rising_edge(inint) then
      extint <= '1';
    end if;

    if falling_edge(inint) then
      extint <= '0';
    end if;

  end process;

但是,当我合成 tis 代码时,只合成了代码的下半部分,而不是上半部分。我在这里想念什么?

我猜这是非常基本的东西,但不能指望它。任何帮助将不胜感激。

问候,

谢莱什

4

1 回答 1

0

正确的方法是使用双倍数据速率寄存器。否则,您将无法合成以时钟速率切换的逻辑。您需要的 Xilinx 原语称为 ODDR,并记录在您设备的选择 IO 资源用户指南中(这里是 Artix-7 的原语,请参见第 127 页)。

它可以被实例化来做你想做的事情:

ODDR_INST1 : ODDR
generic map (
    DDR_CLK_EDGE => "SAME_EDGE",
    INIT         => '0',
    SRTYPE       => "SYNC"
) 
port map (
    Q  => extint,
    C  => inint,
    CE => '1',
    D1 => '1',
    D2 => '0',
    R  => '0',
    S  => '0'
);

作为补充说明,试图暗示双倍数据速率输出(这是您的代码所做的)不是一个好主意。它可能不受支持,但作为一般规则,如果您需要特殊用途的硬件(您需要),您应该直接实例化它,因为很难保证工具何时会推断(尽管它们比以前更具确定性) )。

于 2015-11-02T13:52:48.287 回答