[問題] verilog的人狗雞蟲
這個遊戲就是人只能帶一隻動物去對岸,然後狗跟雞不能在一起
,雞跟蟲也是(在沒有人的情況下)帶全部動物去對岸
我是這樣寫,就是除了我撥的狀態以外,全部都是錯誤,但是問題就卡在
我跳狀態的時候,我還沒撥,他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)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章