私は比較的単純なメモリアービターを設計していますが、2つの状態があります。VHDL - 論理合成可能にする
- 状態1:ポート1は、メモリに接続されている(デフォルト状態)
- 状態2:ポート2は、メモリに接続されている(要求がある場合のみ)
シミュレーションのModelSimで私のアービタが必要に応じて動作することを証明しています。しかし、私が書いたコードは合成できないと言われました。関連するプロセスのコードを以下に示します。
要求に応じてイネーブル信号がハイになり、イネーブル信号をローに設定すると、そのポートがサービスされたことが確認されます。要件は、2つの同時要求がある場合、ポート2を接続する必要があるということです。しかし、以前の要求のためにポート1がすでに接続されている場合、ポート2はポート1がサービスされるまで待機する必要があります。
私の質問は以下のとおりです。
- 私が書いたコード(およびその理由)での問題は何ですか?私はこのためポストのコード部分をフォーマットに問題が
(最終溶液のため、うまくいけば便利なヒントをaksingない)、このコードの論理合成を行うためのアプローチだろう何
transition: process (clk)
begin
if rising_edge(clk) then
if reset = '1' then
state <= port1;
else
if (state = port1) and (req_p2.enable='1') and
(req_p1.enable='0' or rising_edge(req_p1.enable)) then
state <= port2;
elsif(state = port2) and (req_p2.enable='0') then
state <= port1;
end if;
end if;
end if;
end process;
私に合成可能に見えます。それを合成し、実際の問題を報告してください。私は実際に何かが*状態を使用していると仮定しています。そうでなければ、合成後には、何も最適化されません。 –