작성
·
31
2
안녕하세요 🙂
[1. 질문 챕터] : 29. [L1-P12] Interrupt Controller (인터럽트 제어)
의 제가 설계한 TODO 부분이 의도한 대로 동작하지 않는 것에 대해서
[2. 질문 내용] :
제가 작성한 코드 (TODO부분)
wire [$clog2(INT_COUNT)-1:0] priority_req;
assign priority_req = priority_encoder(interrupt_requests);
always@(posedge clk or negedge rst_n) begin
if(!rst_n) begin
interrupt_service <= {INT_COUNT{1'b0}};
interrupt_active <= 1'b0;
end else if(interrupt_ack) begin
interrupt_active <= 1'b0;
interrupt_service <= 8'b0;
end else if(interrupt_requests) begin
interrupt_active <= 1'b1;
interrupt_service <= (1 << priority_req); // one hot
end
end
[3. 시도했던 내용, 그렇게 생각하는 이유] :
가장 이해가 안되는 부분은
interrupt_ack 가 1이 됐을 때 (시뮬레이션에서 95ns)
interrupt_active <= 1'b0;
interrupt_service <= 8'b0;
이 부분이 예약되고 105ns에서 각각 0으로 값이 업데이트 될 것으로 예상하였는데
delay 발생하는 부분이 없는 것입니다.
제가 예상했던 파형 (빨간색)
답변 2
1
안녕하세요 손민재님,
질문 주셔서 감사드립니다. 민재님 열정에 따봉을 드립니다!
아마 파형상으로 보면 0으로 값이 변경이 예상되는 구간은 95ns에서 105ns까지 일 것 같네요.
제가 손민재님 코드를 그대로 넣어서 돌려보았는데요.
ack 가 1인 클럭의 상승 엣지 시점에 active와 service 값이 0 으로 초기화 되는 것을 확인할 수 있었습니다.
./clean 하고 다시 ./build 를 하여도 동일한 증상이 나타날 경우 다시 한번 말씀 부탁 드립니다.
파형을 보니 조금만 코드를 손보면 답안에 도달하실수 있을것 같으십니다.
화이팅하셔요!
0
안녕하세요, 인프런 AI 인턴입니다. 손민재님.
인터럽트 제어 관련 Verilog 코드에서 발생한 동작 문제에 대해 설명드리겠습니다. 특히, interrupt_ack 발생 시, 해당 신호를 의도한 대로 업데이트하는 것이 핵심인 것 같습니다. 질문 내용을 바탕으로 시뮬레이션 상에서 신호가 예측과 다르게 동작하는 원인과 해결 방안을 안내드리겠습니다.
Interrupt Ack의 동작
interrupt_ack
가 1로 설정되면 interrupt_active
와 interrupt_service
가 0으로 설정되기를 기대합니다.posedge clk or negedge rst_n
에 의해 이 블록이 실행됩니다.interrupt_requests
는 비동기적으로 발생할 수 있습니다. 그러나 posedge clk
로 인해 interrupt_service
와 interrupt_active
는 항상 클락 에지에 동기화되어 업데이트됩니다.딜레이가 없는 이유
posedge clk
에서 예측되는 상태 변화가 즉시 반영되기 때문입니다.신호의 우선순위: 코드 내 if-else
문에서 가장 우선 순위가 높은 조건이 먼저 평가됩니다. 따라서 원하는 조건이 예상대로 작동하는지 확인하는 것이 좋습니다.
시뮬레이션 설정: 시뮬레이션 도구에서 클럭 주기, 리셋 타이밍, 또는 다른 신호의 초기 조건이 올바르게 설정되어 있는지 확인해야 합니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다!!
시뮬레이션 돌릴 때 실수가 있었던 것 같네요 ㅠㅠ
덕분에 헤매면서 답안에 도달할 수 있었습니다.
항상 좋은 강의 감사하고 남은 강의랑 part2까지 기대하겠습니다!!