【正文】
F = 1。 end Clear: begin if (!A) state =Idle。 F=0。 G=1。 end endcase endmodule 設(shè)計(jì)示例(續(xù)) 還可以用另一個(gè) Verilog HDL模型來表示同一個(gè) 有限狀態(tài), 見下例: module fsm (Clock, Reset, A, F, G)。 input Clock, Reset, A。 output F,G。 reg F,G。 reg [3:0] state 。 parameter Idle = 4’b1000, Start = 4’b0100, Stop = 4’b0010, Clear = 4’b0001。 設(shè)計(jì)示例(續(xù)) always @(posedge clock) if (!Reset) begin state = Idle。 F=0。 G=0。 end else case (state) Idle: begin if (A) state = Start。 G=0。 end Start: if (!A) state = Stop。 Stop: begin if (A) state = Clear。 設(shè)計(jì)示例(續(xù)) F = 1。 end Clear: begin if (!A) state =Idle。 F=0。 G=1。 end default: state =Idle。 endcase endmodule 設(shè)計(jì)示例(續(xù)) 我們還可以用另一種風(fēng)格的 Verilog HDL模型來表示同一個(gè) 有限狀態(tài) 。 在這個(gè)模型中,我們 把 用 always語句在時(shí)鐘沿觸發(fā)條件下的狀態(tài)變化放在一個(gè)獨(dú)立的塊中, 而把在狀態(tài)控制下的兩個(gè)開關(guān)分兩個(gè)獨(dú)立的 組合邏輯 always塊 來描述。 見下例: module fsm (Clock, Reset, A, F, G)。 input Clock, Reset, A。 output F,G。 reg [1:0] state 。 reg F,G。 parameter Idle = 2’b00, Start = 2’b01, Stop = 2’b10, Clear = 2’b11。 設(shè)計(jì)示例(續(xù)) always @(posedge Clock) if (!Reset) begin state = Idle。 end else case (state) Idle: if (A) state = Start。 Start: if (!A) state = Stop。 Stop: if (A) state = Clear。 Clear: if (!A) state = Idle。 default: state = 2 ’bxx。 endcase 設(shè)計(jì)示例(續(xù)) always @(state or Reset or A) begin if ( !Reset) F = 0。 else if (state == Stop) F = 1。 end always @(state or Reset or A) begin if (! Reset) G = 0。 else if (state == Clear) G = 1。 end endmodule