Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module FSM_one_hot(
- input w,clk,aclr,
- output reg z,
- output reg [8:0] y);
- reg [8:0] d;
- reg [8:0] y_Q,
- Y_D;
- localparam [8:0] A = 9'b000000000, // kody stanów
- B = 9'b000000011,
- C = 9'b000000101,
- D = 9'b000001001,
- E = 9'b000010001,
- F = 9'b000100001,
- G = 9'b001000001,
- H = 9'b010000001,
- I = 9'b100000001;
- always @(*) begin
- d[0] = ~aclr;
- d[1] = y[0] & ~w | y[5] & ~w | y[6] & ~w | y[7] & ~w | y[8] & ~w;
- d[2] = y[1] & ~w;
- d[3] = y[2] & ~w;
- d[4] = y[3] & ~w | y[4] & ~w;
- d[5] = y[0] & w | y[2] & w | y[3] & w | y[4] & w | y[5] & w;
- d[6] = y[5] & w;
- d[7] = y[6] & w;
- d[8] = y[7] & w | y[8] & w;
- case (y_Q)
- A: if (!w) Y_D = B; else Y_D = F;
- B: if (!w) Y_D = C; else Y_D = F;
- C: if (!w) Y_D = D; else Y_D = F;
- D: if (!w) Y_D = E; else Y_D = F;
- E: if (!w) Y_D = E; else Y_D = F;
- F: if (!w) Y_D = B; else Y_D = G;
- G: if (!w) Y_D = B; else Y_D = H;
- H: if (!w) Y_D = B; else Y_D = I;
- I: if (!w) Y_D = B; else Y_D = I;
- default: Y_D = 4'bxxxx;
- endcase
- end
- always @(posedge clk,negedge aclr)
- if (~aclr) begin y_Q <= 0; y <= 0; y[0] <= 1'b1; end
- else begin y_Q <= Y_D; y <= d; end
- always @(*)
- z = (y_Q == E) | (y_Q == I);
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement