&引用;无效的模块实例化";Mealy序列检测器中的错误-Verilog
我已经为检测特定序列的Mealy状态机定义了一个模块。我没有像通常那样对状态进行编码,这是一个更好的选择,因为我想用另一种方式进行编码(我在一本书中看到了一个类似的例子,但代码是用VHDL编写的)&引用;无效的模块实例化";Mealy序列检测器中的错误-Verilog,verilog,Verilog,我已经为检测特定序列的Mealy状态机定义了一个模块。我没有像通常那样对状态进行编码,这是一个更好的选择,因为我想用另一种方式进行编码(我在一本书中看到了一个类似的例子,但代码是用VHDL编写的) 我对这个错误消息一无所知。有人能解释一下错误信息并建议如何更正吗?您的always块中缺少begin和end关键字。代码认为您正在尝试实例化模块,而不是进行信号分配。在always块(Q1分配)下只捕获第一行。其他人不会。试试这个: always @(posedge Clk) begin Q1 &
我对这个错误消息一无所知。有人能解释一下错误信息并建议如何更正吗?您的always块中缺少begin和end关键字。代码认为您正在尝试实例化模块,而不是进行信号分配。在always块(Q1分配)下只捕获第一行。其他人不会。试试这个:
always @(posedge Clk)
begin
Q1 <= (Q1&&(!Q3))||((!Q1)&&Q2;&&(!Q3)&&(!Q4)&&(x_in));
Q2 <= ((!Q3)&&Q4;&&(!x_in))||(Q1&&Q2;&&(!Q3)&&(!Q4)&&x_in);
Q3 <= Q1&&Q2;&&(!Q3)&&(x_in);
Q4 <= (Q1&&Q2;&&(x_in))||(Q1&&(!Q4)&&(!x_in))||((!Q1)&&(!Q2)&&(Q4)&&(!x_in))||((!Q1)&&(!Q2)&&(x_in))||((!Q1)&&(!Q3)&&Q4;&&x_in)||(Q1&&Q2;&&(!Q4)&&x_in);
end
始终@(posedge Clk)
开始
Q1始终块中缺少开始和结束关键字。代码认为您正在尝试实例化模块,而不是进行信号分配。在always块(Q1分配)下只捕获第一行。其他人不会。试试这个:
always @(posedge Clk)
begin
Q1 <= (Q1&&(!Q3))||((!Q1)&&Q2;&&(!Q3)&&(!Q4)&&(x_in));
Q2 <= ((!Q3)&&Q4;&&(!x_in))||(Q1&&Q2;&&(!Q3)&&(!Q4)&&x_in);
Q3 <= Q1&&Q2;&&(!Q3)&&(x_in);
Q4 <= (Q1&&Q2;&&(x_in))||(Q1&&(!Q4)&&(!x_in))||((!Q1)&&(!Q2)&&(Q4)&&(!x_in))||((!Q1)&&(!Q2)&&(x_in))||((!Q1)&&(!Q3)&&Q4;&&x_in)||(Q1&&Q2;&&(!Q4)&&x_in);
end
始终@(posedge Clk)
开始
Q1您有多个语法错误
在始终
块中需要一个开始/结束
always @(posedge Clk) begin
Q1 <= (Q1&&(!Q3))||((!Q1)&&Q2;&&(!Q3)&&(!Q4)&&(x_in));
Q2 <= ((!Q3)&&Q4;&&(!x_in))||(Q1&&Q2;&&(!Q3)&&(!Q4)&&x_in);
Q3 <= Q1&&Q2;&&(!Q3)&&(x_in);
Q4 <= (Q1&&Q2;&&(x_in))||(Q1&&(!Q4)&&(!x_in))||((!Q1)&&(!Q2)&&(Q4)&&(!x_in))||((!Q1)&&(!Q2)&&(x_in))||((!Q1)&&(!Q3)&&Q4;&&x_in)||(Q1&&Q2;&&(!Q4)&&x_in);
end
始终@(posedge Clk)开始
Q1您有多个语法错误
在始终
块中需要一个开始/结束
always @(posedge Clk) begin
Q1 <= (Q1&&(!Q3))||((!Q1)&&Q2;&&(!Q3)&&(!Q4)&&(x_in));
Q2 <= ((!Q3)&&Q4;&&(!x_in))||(Q1&&Q2;&&(!Q3)&&(!Q4)&&x_in);
Q3 <= Q1&&Q2;&&(!Q3)&&(x_in);
Q4 <= (Q1&&Q2;&&(x_in))||(Q1&&(!Q4)&&(!x_in))||((!Q1)&&(!Q2)&&(Q4)&&(!x_in))||((!Q1)&&(!Q2)&&(x_in))||((!Q1)&&(!Q3)&&Q4;&&x_in)||(Q1&&Q2;&&(!Q4)&&x_in);
end
始终@(posedge Clk)开始
Q1巧合的是,这是我CPE166高级逻辑设计课程的当前作业。赋值的主要思想是正确地合成寄存器。类似这样的情况(虽然我们的任务要复杂得多,有多个可能的输入、更长的序列、复位、可编程序列和需要去抖动的按钮):
模块序列检测器(
输入线x_in,clk,
输出线y_输出
);
reg[3:0]序列,序列nxt;
参数正确顺序=4'b1001;
始终@(posedge clk)
巧合的是,这是我的CPE166高级逻辑设计课程的当前作业。赋值的主要思想是正确地合成寄存器。类似这样的情况(虽然我们的任务要复杂得多,有多个可能的输入、更长的序列、复位、可编程序列和需要去抖动的按钮):
模块序列检测器(
输入线x_in,clk,
输出线y_输出
);
reg[3:0]序列,序列nxt;
参数正确顺序=4'b1001;
始终@(posedge clk)
seq Err,这些分号不是必需的吗?我在没有它们的情况下编译,得到了一个语法错误。我使用的是Verilog 1995语法,也许正如您在更新的语法中所说的那样?我发布的代码仍然存在编译错误。分号用于结束语句。呃,这些分号不是必需的吗?我在没有它们的情况下编译,得到了一个语法错误。我使用的是Verilog 1995语法,也许正如您在更新的语法中所说的那样?我发布的代码仍然存在编译错误。分号用来结束语句。啊!我不知道。代码现在编译得很好。非常感谢。关于旁注,我完全同意你的观点(我可能会在你的句子中添加几个额外的reallys),但我是Verilog新手,只想直接从状态方程中编写代码,并验证我通过通常的方法和此方法得到的输出是否相同。正如我的回答所解释的,此代码不是合法的Verilog语法。你的编译器应该会产生错误。啊!我不知道。代码现在编译得很好。非常感谢。关于旁注,我完全同意你的观点(我可能会在你的句子中添加几个额外的reallys),但我是Verilog新手,只想直接从状态方程中编写代码,并验证我通过通常的方法和此方法得到的输出是否相同。正如我的回答所解释的,此代码不是合法的Verilog语法。编译器应该生成错误。
Q1 <= (Q1&&(!Q3))||((!Q1)&&Q2;&&(!Q3)&&(!Q4)&&(x_in));
// ---------------------------
module sequence_detector(
input wire x_in,clk,
output wire y_out
);
reg [3:0] seq, seq_nxt;
parameter correct_sequence = 4'b1001;
always @(posedge clk)
seq <= seq_nxt;
always @(*)
seq_nxt = {seq[2:0] , x_in};
assign y_out = (seq == correct_sequence);
endmodule