设计一个状态机,我用Verilog语言编写的程序如下: 但编译不了,有哪些错误啊,求高手指教

moduleSellmachine(X,Y,S1,S2,S3,S4,CAN,CLK,RETURN,Now);inputX,Y,S1,S2,S3,S4,CAN,CLK;ou... module Sellmachine(X,Y,S1,S2,S3,S4,CAN,CLK,RETURN,Now);
input X,Y,S1,S2,S3,S4,CAN,CLK;
output [2:0] RETURN,Now;

parameter [2:0] INIT=3'b000,
A=3'b001,
B=3'b010,
C=3'b011,
D=3'b100,
RECORD=3'b101;
reg [2:0] P,S,REG,Now,Next,RETURN;
always @ (posedge CLK)
Now<=Next;

always @ (X or Y or S1 or S2 or S3 or S4)
begin
if((X==0)&&(Y==0))
P=3'b000;
else if((X==1)&&(Y==0))
P=3'b001;
else if((X==0)&&(Y==1))
P=3'b010;
else if((S1|S2|S3|S4)==0)
S=3'b000;
else if((S1==1)&&(S2==0)&&(S3==0)&&(S4==0))
S=3'b001;
else if((S1==0)&&(S2==1)&&(S3==0)&&(S4==0))
S=3'b010;
else if((S1==0)&&(S2==0)&&(S3==1)&&(S4==0))
S=3'b011;
else if((S1==0)&&(S2==0)&&(S3==0)&&(S4==1))
S=3'b100;
end
always @ (X or Y or S1 or S2 or S3 or S4)
if(CAN==0)
case(Now)
INIT:begin if((S1|S2|S3|S4)==0)
begin Next=RECORD;
REG=P;
RETURN=3'b000;
end
else if((X==1)&&(Y==0)&&(S1==1)&&(S2==0)&&(S3==0)&&(S4==0))
begin Next=A;
RETURN=P-S;
end
if((X==0)&&(Y==1)&&(S1==1)&&(S2==0)&&(S3==0)&&(S4==0))
begin Next=A;
RETURN=P-S;
end
else begin Next=INIT;
RETURN=3'b000;
end
end
default: begin Next=INIT;
RETURN=3'b000;
REG=3'b000;
end
endcase
else begin RETURN=P;
Next=INIT;
end
endmodule
展开
 我来答
angela_angela
2012-06-06 · TA获得超过495个赞
知道小有建树答主
回答量:130
采纳率:100%
帮助的人:189万
展开全部
大致看了下,具体的没细看,你这里面有很明显的错误就是,你的状态机里面用的是阻塞赋值,尝试非阻塞赋值看看,那样应该就没什么问题了,即将“=”改为“<=”
更多追问追答
追问
编译的时候显示有致命的错误,如下,难道逻辑有问题?
追答
你写的有点混乱,最好能将第一个always @ (X or Y or S1 or S2 or S3 or S4)块和第二个always @ (X or Y or S1 or S2 or S3 or S4)块放在一起,而且要有周期的概念,你写的是状态机,不是组合逻辑,PS的值有先后之分的,你写的我是没怎么看懂的
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式