[問題] verilog的人狗雞蟲

看板Programming作者 (領導者)時間15年前 (2010/11/10 03:12), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
這個遊戲就是人只能帶一隻動物去對岸,然後狗跟雞不能在一起 ,雞跟蟲也是(在沒有人的情況下)帶全部動物去對岸 我是這樣寫,就是除了我撥的狀態以外,全部都是錯誤,但是問題就卡在 我跳狀態的時候,我還沒撥,他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)
文章代碼(AID): #1CsPqjt5 (Programming)
文章代碼(AID): #1CsPqjt5 (Programming)