我有一些看似简单的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代码时,只有代码的下半部分合成而不是上部。我在这里缺少什么?
我猜这是非常基本的东西,但不能指责它。任何帮助将不胜感激。
此致
SHAILESH
答案 0 :(得分:0)
正确的方法是使用双倍数据速率寄存器。否则,您无法合成以时钟速率切换的逻辑。您需要的Xilinx原语称为ODDR,并在您的设备的Select IO Resources用户指南中进行了说明(here是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'
);
作为一个补充说明试图暗示双倍数据速率输出(这是你的代码所做的)不是一个好主意。它可能不受支持,但作为一般规则,如果你需要专用硬件(你这样做),你应该直接实例化它,因为它很难保证工具会推断出来(尽管它们比以前更加确定) )。