作者eeleader (领导者)
看板Programming
标题[问题] verilog的人狗鸡虫
时间Wed Nov 10 03:12:42 2010
这个游戏就是人只能带一只动物去对岸,然後狗跟鸡不能在一起
,鸡跟虫也是(在没有人的情况下)带全部动物去对岸
我是这样写,就是除了我拨的状态以外,全部都是错误,但是问题就卡在
我跳状态的时候,我还没拨,他error的灯就会亮,故我加了ok在外面判别
但是他好像会跟假设我A跳B的那个OK也顺便判断了ˊ.....
请问我到底该怎咪改阿 3Q.....
din由左至右就是人狗鸡虫
qout由左至右就是人狗鸡虫上岸 人狗鸡虫对岸
module fin(clk,reset, din,ok,qout,error);
input clk,reset,ok;
input [3:0] din;
output [7:0] qout;
output error;
reg error,clkout;
reg [7:0] qout;
reg [3:0] state;
reg [3:0] ns;
reg [22:0] counter;
parameter [3:0]
A=4'b0000,
B=4'b0001,
C=4'b0010,
D=4'b0011,
E=4'b0100,
F=4'b0101,
G=4'b0110,
H=4'b0111,
I=4'b1000,
J=4'b1001,
K=4'b1010,
L=4'b1011;
always@(posedge clk)
begin
counter<=counter+22'd1;
clkout<=counter[22];
end
always@(posedge clkout or posedge reset)
begin
if(reset==1)
begin
state=A;
end
else
state=ns;
end
always@( state or din or ok)
begin
case(state)
A:
begin
qout=8'b11110000;
error=1'b0;
if((din==4'b1010)&ok)
begin
qout=8'b01011010;
ns=B;
error=1'b0;
end
else
begin
ns=A;
if(ok==1'b1) //这边避免我ㄧ开始就直接进来这 +OK 但是还是不对
begin
error=1'b1;
end
end
end
B:
begin
error=1'b0;
if((din==4'b0010)&ok)
begin
ns=C;
qout=8'b11010010;
error=1'b0;
end
else
begin
ns=B;
if(ok==1'b1) //这边避免我ㄧ开始就直接进来这 +OK 但是还是不对
begin
error=1'b1;
end
end
end
C:
begin
error=1'b0;
if((din==4'b1011)&ok)
begin
ns=E;
qout=8'b01001011;
error=1'b0;
end
else if((din==4'b1110) &ok)
begin
ns=D;
qout=8'b00011110;
error=1'b0;
end
else if((din==4'b1010) &ok)
begin
ns=B;
qout=8'b01011010;
error=1'b0;
end
else
begin
ns=C;
if(ok==1'b1) //这边避免我ㄧ开始就直接进来这 +OK 但是还是不对
begin
error=1'b1;
end
end
end
E:
begin
if((din==4'b0001)&ok)
begin
ns=G;
qout=8'b11100001;
end
else if((din==4'b0010)&ok)
begin
ns=C;
qout=8'b11010010;
end
else
begin
ns=E;
error=1'b1;
end
end
G:
begin
if((din==4'b1011)&ok)
begin
ns=E;
qout=8'b01001011;
end
else if((din==4'b1101)&ok)
begin
ns=H;
qout=8'b00101101;
end
else
begin
ns=G;
error=1'b1;
end
end
H:
begin
if((din==4'b0001)&ok)
begin
ns=G;
qout=8'b11100001;
end
else if((din==4'b0101)&ok)
begin
ns=I;
qout=8'b10100101;
end
else if((din==4'b0100)&ok)
begin
ns=L;
qout=8'b10110100;
end
else
begin
ns=H;
error=1'b1;
end
end
I:
begin
if((din==4'b1101)&ok)
begin
ns=J;
qout=8'b10100101;
end
else if((din==4'b1111)&ok)
begin
ns=K;
qout=8'b00001111;
end
else
begin
ns=I;
error=1'b1;
end
end
J:
begin
if((din==4'b0101)&ok)
begin
ns=I;
qout=8'b10100101;
end
else if((din==4'b0001)&ok)
begin
ns=G;
qout=8'b10100101;
end
else
begin
ns=J;
error=1'b1;
end
end
D:
begin
if((din==4'b0100)&ok)
begin
ns=F;
qout=8'b10110100;
end
else if((din==4'b0010)&ok)
begin
ns=C;
qout=8'b11010010;
end
else
begin
ns=D;
error=1'b1;
end
end
F:
begin
if((din==4'b1110)&ok)
begin
ns=D;
qout=8'b00011110;
end
else if((din==4'b1101)&ok)
begin
ns=J;
qout=8'b10100101;
end
else
begin
ns=F;
error=1'b1;
end
end
K:
begin
ns=K;
qout=8'b00001111;
error=1'b1;
end
L:
begin
if((din==4'b1110)&ok)
begin
ns=D;
qout=8'b00011110;
end
else if((din==4'b1101)&ok)
begin
ns=J;
qout=8'b00101101;
end
else
begin
ns=L;
error=1'b1;
end
end
endcase
end
endmodule
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.255.43.211
※ 编辑: eeleader 来自: 111.255.43.211 (11/10 03:13)