Compilation SystemVerilog:always_comb构造不推断纯粹的组合逻辑

Compilation SystemVerilog:always_comb构造不推断纯粹的组合逻辑,compilation,verilog,system-verilog,quartus,Compilation,Verilog,System Verilog,Quartus,我有一个FSM,它控制我正在构建的游戏中的不同事件(在Quartus Prime Lite 17.0版中)。 当我试图编译它时,我得到以下错误: Error (10166): SystemVerilog RTL Coding error at GameFSM.sv(40): always_comb construct does not infer purely combinational logic. 我将所有输出都指定为默认值,因此我认为不应推断任何锁存(我不完全理解它是如何工作的…) //

我有一个FSM,它控制我正在构建的游戏中的不同事件(在Quartus Prime Lite 17.0版中)。 当我试图编译它时,我得到以下错误:

Error (10166): SystemVerilog RTL Coding error at GameFSM.sv(40): always_comb construct does not infer purely combinational logic.
我将所有输出都指定为默认值,因此我认为不应推断任何锁存(我不完全理解它是如何工作的…)

//游戏FSM,控制游戏事件
模块GameFSM(
输入逻辑时钟、复位、NPC冲突、死机NPC、开始游戏、暂停游戏、继续游戏、延迟指示器,
输出逻辑信息主菜单,
输出逻辑信息\u暂停,
输出逻辑信息_win,
输出逻辑信息_lose,
输出逻辑显示主菜单,
输出逻辑主菜单\u音乐,
输出逻辑背景音乐,
输出逻辑暂停,
输出逻辑Win_音乐,
输出逻辑丢失音乐
);
枚举逻辑[2:0]{主菜单,三颗心,两颗心,一颗心,延迟状态,暂停,赢,输}状态,nxtState;
逻辑[1:0]返回_状态;
始终@(posedge clk或negedge重置)
开始
如果(!resetN)开始//异步重置

prState问题在于您读取并分配到
始终梳
块中的
计数器
信号:

                counter = counter - 1;
这可以创建一个组合反馈回路

同样适用于:

                counter = DELAY_TIME;
也许您应该对
计数器使用顺序逻辑
始终@(posedge clk…

另一个问题信号可能是
返回\u状态
。我不知道为什么我的模拟器没有抱怨这个。我认为
返回\u状态
也应该分配到它自己的顺序逻辑块中

                counter = DELAY_TIME;