アルテラDE1ボードに実装している単純な16ビットプロセッサ用のVHDLコードで有限ステートマシンを作成しようとしています。有限状態マシンにはCASE
、16ビットSTD_LOGIC_VECTORによってFSMに取り込まれるさまざまな16ビット命令を処理するステートメントがあります。ただし、有限ステートマシンが命令をデコードするデコード状態で少し問題が発生します。命令の1つは、2つのレジスタをオペランドとして、3つ目をデスティネーションレジスタとして受け取るADDです。ただし、オペランドとしてレジスタと5ビットの即値を取り、宛先の2番目のレジスタを受け取るADD命令もあります。私の問題はCASE
ステートメント、私は2つの異なるADD命令を区別できる必要があります。したがって、ステートメントで「-」や「X」などのワイルドカード値を使用するCASE
と、可能なレジスタと即時値の組み合わせをすべてリストするのではなく、2つのケースで2つを区別できると思いました。例えば:
CASE IR IS --(IR stands for "Instruction Register")
WHEN "0001------0-----" => (Go to 3-register add);
WHEN "0001------1-----" => (Go to 2-register/immediate value add);
WHEN OTHERS => (Do whatever);
END CASE;
私が持っている2つの指示はこれらだけではありません。この投稿を少し短くするために、これら2つを配置しました。このコードをコンパイルして実行すると、プロセッサは「デコード」状態になると実行を停止します。また、Quartusは、「LC3FSM.vhd(37)でのVHDL選択警告:メタ値を含む無視された選択 "" 0001 ----- 0-----""」などの警告を多数出します。これを達成する方法についての損失。私は実際にはすべての16ビットの組み合わせを定義する必要はなく、おそらくその必要もありません。STD_LOGIC_VECTORでワイルドカードを使用して、定義する必要のある組み合わせの数を最小限に抑える方法があることを願っています。
誰かがこれを達成する方法を知っていますか?
ありがとう