こんにちは、この単純な VHDL プロセスがあります (MyHDL コードから生成):
DIGIPOT_CONTROLLER_CONNECTCLOCK: process (delayedClock) is
begin
if to_boolean(clkEn) then
if to_boolean(delayedClock) then
scl_d <= '0';
else
scl_d <= 'Z';
end if;
else
if to_boolean(sclIdleValue) then
scl_d <= 'Z';
else
scl_d <= '0';
end if;
end if;
end process DIGIPOT_CONTROLLER_CONNECTCLOCK;
元の MyHDL コード:
@always(delayedClock)
def connectClock():
if(clkEn):
if(delayedClock):
scl_d.next = False
else:
scl_d.next = None
else:
if(sclIdleValue):
scl_d.next = None
else:
scl_d.next = False
シミュレーションでは (ISIM および MyHDL シミュレーターの両方で) 完全に動作しますが、Spartan 6 に合成しようとすると、次の警告が表示されます。
これは、このプロセスが clkEn および sclIdleValue 信号に敏感であるべきであるとどういうわけか推測したことを理解しています。しかしもちろん、これは私が意図したものではありません。clkEn または sclIdleValue がそれぞれの状態を変更したときではなく、delayedClock が状態を変更したときにのみ出力を変更したい。
Spartan 6 アーキテクチャではできなかったことですか? それとも、意図した動作をさせるためにプロセスを別の方法で説明する必要がありますか?