我正在尝试为一个类项目编写一个流行的空间拍摄模式,并且遇到了模块实例化的问题。我们目前有一个模块可以对弹丸的运动进行编码,并创建了一系列的“激活”。如何从SystemVerilog的可用模块列表中动态实例化硬件?
我们希望我们的船能像用户想要的那样射出许多射弹,射弹只会从枪管出现并沿着屏幕向上移动。
这相当于一个简单的内部状态机,每个弹:
- 暂停:
- 如果用户想火了一枪,激活这个模块
- 初始化:
- 设置射弹位置以匹配枪管。将抛射体运动设置为非零。
- 移动:
- 如果我们的碰撞检测单元看见一个碰撞(与敌人或壁),禁用模块并进入暂停
- 否则简单地通过像素 的一些预定量的步骤的位置
我已经得到正确编程的状态机,但是目前如果用户触发一个镜头,拍去,直到屏幕的边缘,再出手也不能当它存在时被解雇。
理想情况下,我可以查看某种字典并找到一个“可用的”弹丸模块来激活,当该模块可以再次触发时状态机会更新。
所以这个过程会是这样的:
- 用户想要射击弹丸
- 东西......发现未启用在我们的抛射数组中的元素,并把它
- 射击去,并且不允许该模块接受另一个镜头,直到当前镜头被销毁。我能想到
一种方式做,这是读出从出射阵列中,“已启用”比特这将是一个热码,其中正在射击:
0110 0011 - Projectiles 1, 2, 6, and 7 are in use
然后,我们拿这些位,执行......某事......,并得到数字3,这对应于最小可用射弹模块的索引。数字3输出用于用户输入状态机以索引到我们的弹丸模块阵列中,然后发送“激活”信号。
是的,我在文章中提到过。我正在实例化这些“射弹”中的10个,并试图弄清楚什么时候正在使用一个“射弹”,以便下一个可以被解雇。所以硬件被实例化,我只需要弄清楚什么时候使用哪个实例。那有意义吗? – ijustlovemath
当您的问题标题是非常误导。我的答案仍然适用。你需要将你的“可用位”合并到你的状态机中,如果没有看到任何代码,就很难进一步帮助你。 –