2016-11-22 21 views
-5

我正在尝试为一个类项目编写一个流行的空间拍摄模式,并且遇到了模块实例化的问题。我们目前有一个模块可以对弹丸的运动进行编码,并创建了一系列的“激活”。如何从SystemVerilog的可用模块列表中动态实例化硬件?

我们希望我们的船能像用户想要的那样射出许多射弹,射弹只会从枪管出现并沿着屏幕向上移动。

这相当于一个简单的内部状态机,每个弹:

  1. 暂停:
    • 如果用户想火了一枪,激活这个模块
  2. 初始化:
    • 设置射弹位置以匹配枪管。将抛射体运动设置为非零。
  3. 移动:
    • 如果我们的碰撞检测单元看见一个碰撞(与敌人或壁),禁用模块并进入暂停
    • 否则简单地通过像素
    • 的一些预定量的步骤的位置

我已经得到正确编程的状态机,但是目前如果用户触发一个镜头,拍去,直到屏幕的边缘,再出手也不能当它存在时被解雇。

理想情况下,我可以查看某种字典并找到一个“可用的”弹丸模块来激活,当该模块可以再次触发时状态机会更新。

所以这个过程会是这样的:

  1. 用户想要射击弹丸
  2. 东西......发现未启用在我们的抛射数组中的元素,并把它
  3. 射击去,并且不允许该模块接受另一个镜头,直到当前镜头被销毁。我能想到

一种方式做,这是读出从出射阵列中,“已启用”比特这将是一个热码,其中正在射击:

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

然后,我们拿这些位,执行......某事......,并得到数字3,这对应于最小可用射弹模块的索引。数字3输出用于用户输入状态机以索引到我们的弹丸模块阵列中,然后发送“激活”信号。

回答

1

您不能动态实例化硬件。你写Verilog/SystemVerilog来描述如何构建硬件。如果您的功能在不同时间需要处于活动状态,则需要将其合并到状态机中,或者使用在不同输出之间进行选择的多路复用器。

+0

是的,我在文章中提到过。我正在实例化这些“射弹”中的10个,并试图弄清楚什么时候正在使用一个“射弹”,以便下一个可以被解雇。所以硬件被实例化,我只需要弄清楚什么时候使用哪个实例。那有意义吗? – ijustlovemath

+1

当您的问题标题是非常误导。我的答案仍然适用。你需要将你的“可用位”合并到你的状态机中,如果没有看到任何代码,就很难进一步帮助你。 –

相关问题