1. 문제 및 설명
A. Lemmings은 걷기와 낙하뿐 아니라, 때때로 파기(digging)을 수행할 수 있다.
- 오른쪽으로 걷는 상태
- 왼쪽으로 걷는 상태
- 떨어지는 상태
- 땅 파기
B. Lemmings는 장애물에 부딪히면 이동 방향을 바꾼다.
- 왼쪽에서 부딪히면 -> 오른쪽으로
- 오른쪽에서 부딪히면 -> 왼쪽으로
- 양쪽에서 동시에 부딪혀도 이동 방향을 바꾼다.
- 바닥이 없어지는 상태가 되면 낙하상태가 되며, aaah를 외친다.
- 낙하 중에 장애물에 부딪혀도 걷는 방향에는 영향을 주지않는다.
- 바닥이 사라지는 순가에 동시에 충돌이 발생해도 방향은 바뀌지 않는다.
- 낙하 중 바닥이 다시 생기는 순간에도 충돌이 발생하더라도 방향에는 영향을 주지 않는다.
- 바닥이 다시 생기면, 낙하를 멈추고 낙하하기 전의 방향 그대로 다시 걷기 시작한다.
- 현재 땅 위에서 걷고 있을 때만 파기를 시작 할 수 있다.
- 한 번 파기 시작하면, 반대편에 도달할 때 까지 계속 파기를 수행한다.(ground=0)일 될 때까지
- 땅이 없어지는 순간 낙하상태로 전환된다.
- 이후 다시 땅을 만나면, 원래 걷던 방향으로 다시 걷기 시작한다.
- 파는 중에 장애물에 부딪혀도 아무런 영향이 없다.
2. 요구사항
A. 위의 동작을 모델링하는 FSM을 설계하시오.
3. 문제 풀이
A. State
- WL (Walk Left)
- WR (Walk Right)
- FWL (Falling Walk Left)
- FWR (Falling Walk Right)
- DIGL (Digging Walk Left)
- DIGR (Digging Walk Right)
B. output
- walk_left (state == WL)
- walk_right (state == WR)
- aaah (state == FWL | state == FWR)
- digging ( state == DIGL | state == DIGR)

4. 모듈 정의
module top_module(
input clk,
input areset, // Freshly brainwashed Lemmings walk left.
input bump_left,
input bump_right,
input ground,
input dig,
output walk_left,
output walk_right,
output aaah,
output digging );
5. 답
module top_module(
input clk,
input areset, // Freshly brainwashed Lemmings walk left.
input bump_left,
input bump_right,
input ground,
input dig,
output walk_left,
output walk_right,
output aaah,
output digging );
parameter WL = 3'b000, WR = 3'b001, FWL = 3'b010, FWR = 3'b011, DIGL = 3'b100,DIGR = 3'b101;
reg [2:0] state, next_state;
always@(*)
begin
case(state)
WL: next_state <= (ground)?(dig?DIGL:(bump_left?WR:WL)):FWL;
WR: next_state <= (ground)?(dig?DIGR:(bump_right?WL:WR)):FWR;
FWL: next_state <= (ground)?WL:FWL;
FWR: next_state <= (ground)?WR:FWR;
DIGL: next_state <= (ground)?DIGL:FWL;
DIGR: next_state <= (ground)?DIGR:FWR;
default: next_state <= state;
endcase
end
always@(posedge clk, posedge areset)
begin
if(areset)
state <= WL;
else
state <= next_state;
end
assign walk_left = (state==WL);
assign walk_right = (state==WR);
assign aaah = state[1];
assign digging = state[2];
endmodule
'Verilog > HDLbits' 카테고리의 다른 글
| [HDLBits] Fsm onehot (1) | 2026.04.13 |
|---|---|
| [HDLBits] Lemmings4 (0) | 2026.04.11 |
| [HDLBits] Lemmings2 (0) | 2026.04.11 |
| [HDLBits] Lemmings1 (0) | 2026.04.10 |
| [HDLBits] Exams/ece241 2013 q4 (1) | 2026.04.08 |