我正在尝试为一个类项目编写一个流行的空间射击游戏,并且遇到了模块实例化的问题。我们目前有一个模块可以对射弹的运动进行编码,并创建了一系列被激活的模块。
我们希望我们的船能像用户想要的那样射出许多射弹,射弹只会从枪管中出现并向屏幕上移动。
这转换为每个射弹的简单内部状态机:
我已经正确编程了状态机,但是当前如果用户发射了一个镜头,则镜头一直持续到屏幕边缘,而另一个镜头在它存在时无法被发射。
理想情况下,我会找一些字典,我可以查看并找到一个“可用”的射弹模块来激活,当该模块可以再次触发时状态机会更新。
所以这个过程看起来像:
我认为这样做的一种方法是从射出的射弹阵列中读出“启用”位,这将是目前正在触发的单热编码:
0110 0011 - Projectiles 1, 2, 6, and 7 are in use
然后我们取出那些位,对它们执行......某些东西,得到数字3,它对应于最小可用射弹模块的索引。输出数字3以供用户输入状态机索引到我们的射弹模块阵列中,然后发送“激活”信号。
答案 0 :(得分:1)
您无法动态实例化硬件。您编写Verilog / SystemVerilog来描述应如何构建硬件。如果您具有需要在不同时间激活的功能,则需要将其合并到状态机中,或者使用在不同输出之间进行选择的多路复用器。