要するに、私はある種のプロセッサを作ろうとしています (「ある種の」というのは理由がありますが、詳細には立ち入らないでください)。もの。
つまり、このコードでは:
programmProcess: process (clk,rst) is
variable counter : natural;
begin
if (rst = '1') then
counter := 0;
elsif (clk'event and clk = '1' and pm_nEn= '1') then
RAM(counter) <= data; --This is where the issue is
counter := counter + 1;
if (counter = 1024) then
counter := 0;
end if;
end if;
data <= "ZZZZZZZZZZZZZZZZ";
end process programmProcess;
...そして、これはテストベンチプロセスです:
stim_proc1: process
begin
rst <= '1';
pm_nEn <= '1';
wait for clk_period;
rst <= '0' ;
data <="0000111110111001";
wait for clk_period;
data <="0000111010111001";
wait for clk_period;
data <= "ZZZZZZZZZZZZZZZZ";
pm_nEn <= '0';
wait for 10*clk_period;
wait;
end process;
... ここで、RAM は 16 ビットの 1024 個のベクトルの配列であり、データは 16 ビットの inout ベクトルであり、pm_nEn は基本的に RAM に値を入力できる単一ビットです。
アイデアは、RAM(カウンター) がデータ ベクターから値を取得するというもので、これはテストベンチで手動で値が供給されますが、これは起こりません。つまり、データが必要な値を持っているにもかかわらず、すべての RAM の値は「UUUUUUUUUUUUUUU」のままです。最初に評価され、カウンターが 0 の場合でも、RAM(0) は未定義です。
私は ISE スイートを使用しており、シミュレーションを試みた後、すべてのステップをトレースしただけで、RAM(カウンター) に値が割り当てられるステップが表示され、データ ベクトルには手動で追加された値があります。テストベンチを実行しますが、RAM はまだ値を取得しません。
質問は基本的に - なぜこれが起こるのですか? RAM に値が割り当てられないのはなぜですか?
また、完全な VHDL とテストベンチ (便利なように ISE で生成されたもの) を Google ドキュメント形式で示します。