1. 문제 및 설명
A. 이 FSM은 Arbiter 회로로 동작하며, 3개의 장치가 공유 자원에 접근할 수 있도록 제어한다.
B. 각 장치는 요청 신호 r[i]를 통해 자원 사용을 요청한다.
C. FSM은 요청이 없는 동안 대기 상태를 유지한다.
D. 우선 순위는 다음과 같다.
- 장치1 > 장치2 > 장치3
E. 장치 i가 grant를 받으면, 해당 요청 r[i]=1이 유지되는 동안 게속 grant를 유지해야 한다.
2. 요구사항
A. 순차회로와 조합회로를 분리하여 구현하시오
- 조합회로: 상태 전이 테이블을 위한 always block
- 순차회로: 상태 플립플롭을 위한 always block
B. FSM의 출력인 g[ㅑ]는 다음 두 방법 중 하나를 사용하여 기술하시오.
- assign 구문
- always block
3. 문제 풀이
A. FSM 동작 원리
- FSM은 요청신호 r[1:3]을 감시한다.
- 요청이 없으면 대기상태 유지
- 요청 발생 시 우선순위에 따라 grant 결정
- grant 중인 장치가 요청을 유지하는 동안 현재 상태 유지
- 요청이 해제되면 다시 요청 검사 수행

4. 모듈 정의
module top_module (
input clk,
input resetn, // active-low synchronous reset
input [3:1] r, // request
output [3:1] g // grant
);
5. 답
module top_module (
input clk,
input resetn, // active-low synchronous reset
input [3:1] r, // request
output [3:1] g // grant
);
parameter A = 3'b000, B = 3'b001, C = 3'b010, D = 3'b100;
reg [3:1] state, next_state;
assign g = state;
always@(*)
begin
case(r)
3'b000: next_state = A;
3'b001: next_state = (state == A | state == B)?B:A;
3'b010: next_state = (state == A | state == C)?C:A;
3'b011: next_state = (state == A | state == B)?B:(state == C)?C:A;
3'b100: next_state = (state == A | state == D)?D:A;
3'b101: next_state = (state == A | state == B)?B:(state == D)?D:A;
3'b110: next_state = (state == A | state == C)?C:(state == D)?D:A;
3'b111: next_state = (state == A | state == B)?B:(state == C)?C:(state==D)?D:A;
endcase
end
always@(posedge clk)
begin
if(!resetn)
state <= A;
else
state <= next_state;
end
endmodule
'Verilog > HDLbits' 카테고리의 다른 글
| [HDLBits] Exams/review2015 count1k (0) | 2026.05.31 |
|---|---|
| [HDLBits] Exams/2013 q2bfsm (0) | 2026.05.17 |
| [HDLBits] Exams/2012 q2b (0) | 2026.05.17 |
| [HDLBits] Exams/2012 q2fsm (0) | 2026.05.17 |
| [HDLBits] Exams/m2014 q6 (0) | 2026.05.17 |