1

コンパイルするVHDLコードがありますが、それを合成しようとするとスタックします。つまり、合成が終了することはなく、コンソールに次のように表示されます。

図書館の仕事(建築)における実体通訳者の分析。

理由を理解しようとしましたが、理解できません。私が知っているのは、その行にコメントを付けるCPT_PAN <= CPT_PAN - 1;と、突然合成できるということだけです。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity Interpretor is
    Port (SCAN_CODE : IN STD_LOGIC_VECTOR(7 downto 0));
end Interpretor;

architecture Behavioral of Interpretor is
Signal CPT_PAN : Integer range 0 to 255 := 0;
begin
process(SYS_CLK)
begin
if (SYS_CLK'EVENT and SYS_CLK = '1') then
    if SCAN_CODE = "01101011" then 
        if CPT_PAN /= 0 then    
            CPT_PAN <= CPT_PAN - 1; -- Line to be commented to synthesize
        end if;
    end if;
end if;
end process;     
end Behavioral;
4

1 に答える 1

3

どの合成ツールですか?知っておくと便利です。

ザイリンクスXST14.3は、単にレポート<sys_clk> is not declared.して終了します。

そのための入力ポートを追加すると、正しく合成され、ハードウェアは生成されません。

出力を追加し、

entity Interpretor is
Port (
    SYS_CLK   : in std_logic;
    SCAN_CODE : IN STD_LOGIC_VECTOR(7 downto 0);
    Zero      : Out Boolean
 );
end Interpretor;

とアーキテクチャへのライン

Zero <= CPT_Pan = 0;

そしてそれはあなたが期待するものをほとんど生成します。CPT_Panが0に初期化されるため、それでも最適化されて何もなくなり、その場合はプロセスによってまったく処理されません。

合成を試みる前に、これをシミュレートしたかどうか尋ねますか?

于 2012-12-17T13:33:31.547 に答える