2016-11-22 8 views
-5

私は、クラスプロジェクトの普及したスペースシュートアップをプログラムしようとしており、モジュールのインスタンス化に関する問題にぶつかってきました。私たちは現在、発射物の動きをエンコードし、それらの配列を作成して「アクティブ化」するモジュールを持っています。SystemVerilogで使用可能なモジュールのリストからハードウェアを動的にインスタンス化するにはどうすればよいですか?

私たちの船は、ユーザーが望むほど多くの発射体を発射したいと思っています。発射体は、単に銃身から出て画面上を移動するだけです。

  1. 停止::これは、各発射するための簡単な内部のステートマシンに変換

    • をユーザーがショットを発射したい場合は、
  2. 初期化このモジュールをアクティブ:
    • 発砲位置をガンバレルと一致するように設定します。発射動作を非ゼロに設定します。
  3. 移動: たちの衝突検出装置は、単にピクセル
  4. のいくつかの所定量の位置をステップモジュールを無効にし、それ以外の
  5. を停止するために行く(敵や壁に)衝突を見れば

私は状態マシンが正しくプログラムされていますが、現在ユーザーがショットを実行すると、ショットは画面の端に移動し、別のショットは移動できませんそれが存在する間に解雇される。

理想的には、私が調べることができ、起動可能な「利用可能な」発射モジュールを見つけることができます。ステートマシンは、そのモジュールを再発動することができるときに更新します。

ので、プロセスは次のようになります。

  1. ユーザーは
  2. 何か発射を発射したい...それはショットが行く
  3. 有効になっていない私たちの発射配列の要素を検索し、可能現在のモジュールが破壊されるまでモジュールが別のショットをとることを禁止します。

    0110 0011 - Projectiles 1, 2, 6, and 7 are in use 
    

    :私はこれを行うに考えることができます

一つの方法は、現在、発射されるのワンホットエンコーディングになり出し発射配列から「有効」ビットを読み取ることですそれらのビットをとり、何かを実行し、番号3を取得します。これは、利用可能な最小の発射モジュールのインデックスに相当します。番号3は、ユーザ入力ステートマシンが発射モジュールのアレイにインデックスを付けるために出力され、発射モジュールに「活性化」信号が送信される。

答えて

1

ハードウェアを動的にインスタンス化することはできません。 Verilog/SystemVerilogを書いて、ハードウェアの構築方法を記述します。異なる時間にアクティブにする必要のある機能がある場合は、その機能をステートマシンに組み込むか、異なる出力を選択するマルチプレクサを組み込む必要があります。

+0

ええ、私はポストでこれを言及しました。私はこれらの「発射物」のうち10個をインスタンス化しています。次の発射を発射できるようにいつ使用されているのか把握しようとしています。ハードウェアがインスタンス化されるので、どのインスタンスをいつ使用するかを把握するだけです。それは理にかなっていますか? – ijustlovemath

+1

あなたの質問のタイトルが非常に誤解を招く場合。私の答えはまだ適用されます。使用可能なビットをステートマシンに組み込む必要があります。コードを見ることなく、さらに手助けすることは困難です。 –

関連する問題