4

これは、VHDL を初めて使用する人にとって最も一般的な問題に違いありませんが、ここで何が間違っているのかわかりません。これは、私が適切なステート マシンの設計で見た慣用句のすべてに準拠しているようです。私はアルテラ Quartus 9.2 でコンパイルしています。実際のエラーは次のとおりです。

「[file] [line] の "spiclk_out" のレジスタを推測できません。これは、クロック エッジの外で値を保持していないためです」

ENTITY spi_state_machine IS
    PORT(
            spiclk_internal : IN STD_LOGIC;
            reset : IN STD_LOGIC;
            spiclk_out : BUFFER STD_LOGIC
    );
END spi_state_machine;

PROCESS(spiclk_internal, reset)
BEGIN
    IF reset = '1' THEN
        spiclk_out <= '0';
    END IF;

    IF spiclk_internal = '1' AND spiclk_internal'EVENT THEN --error here
        spiclk_out <= NOT spiclk_out;
    END IF;
END PROCESS;

御時間ありがとうございます。

4

1 に答える 1

4

書かれているように、プロセスはがアクティブな場合でもエッジでspiclk_outトグルします。これは、非同期リセットを使用するフリップフロップの動作ではありません。spiclk_internalreset

おそらくあなたが望むのは

SPICLK: process(spiclk_internal, reset)
    if reset = '1' then
        spiclk_out <= '0';
    elsif spiclk_internal'event and spiclk_internal='1' then
        spiclk_out <= not spiclk_out;
    end if;
end process SPICLK;
于 2011-05-13T05:20:38.640 に答える