inflearn logo
강의

Course

Instructor

Seolgye-Dokhak's Verilog Master Season 1 (A Career Leap for Digital Design Engineers Completed with Practical Coding Test Problems)

[L1-P12] Interrupt Control: A hardware controller that responds immediately to external events

인터럽트 컨트롤러 요청 처리와 처리 완료 구문 중 이해가 안되는 내용이 있습니다.

15

ksh79533954

65 asked

1

안녕하세요. 에타님. 강의 잘 보고 있습니다. 감사합니다.

궁금한게 있습니다.


[1. 질문 챕터] : Interrupt controller 문제 풀이

[2. 질문 내용] :
1. 새로운 인터럽트 요청 처리에서 interrupt_pending <= (interrupt_pending | interrupt_requests) & ~interrupt_mask; 를 사용한 이유.

2. 인터럽트 처리 완료 구문에서 interrupt_pending[current_interrupt] <= 0;를 쓴 이유.


[3. 시도했던 내용, 그렇게 생각하는 이유] :

  1. interrupt_pending <= interrupt_requests & ~interrupt_mask; 와 무슨 차이가 있는지 이해가 잘 안됩니다.

  2. 굳이 0으로 내리지 않아도 interrupt_mask[current_interrupt] 비트가 1로 업데이트가 되어서 interrupt_pending <= (interrupt_pending | interrupt_requests) & ~interrupt_mask;로 처리가 될거라 생각하는데, 지우고 실행해보니까 기능에 오류가 있네요. 근데 무엇이 문제인지 이해가 안되서 질문 드립니다.



verilog-hdl system-verilog

Answer 2

1

ksh79533954

2번은 이해했습니다.

// 새로운 인터럽트 요청 처리
interrupt_pending <= (interrupt_pending | interrupt_requests) & ~interrupt_mask;

// 현재 처리 중인 인터럽트가 없을 때 새로운 인터럽트 선택
if (!interrupt_active && |interrupt_pending) begin
     current_interrupt <= priority_encoder(interrupt_pending);
     interrupt_active <= 1;
     interrupt_service <= (1 << priority_encoder(interrupt_pending));
end

위 구문이 같은 clk 상승 엣지일 때 실행되기 때문에 interrupt_pending[current_interrupt]를 0으로 clear하지 않으면 문제가 되겠네요.

0

ETA

안녕하세요 김상현님,

클럭게이팅에서 바로 인터럽트 컨트롤러로 열심히 달려시고 계시는 군요!

스스로 질문을 해결하시는 모습에 박수를 쳐드립니다. 후에는 저보다 더 멋진 엔지니어가 될 것 같네요!

1번에 대해서도 충분히 코드를 이해하시고 여쭤보신것같습니다.

아래가 질문이셨죠?

  1. interrupt_pending <= interrupt_requests & ~interrupt_mask; 와 무슨 차이가 있는지 이해가 잘 안됩니다.

답변을 드리자면, 사실 현재 문제의 조건에서는 차이가 없습니다.
다만 모범답안은 입력이 즉 interrupt_requests 가 level로 유지를 안할 수도 있다는 것을 고려해서 넣은 코드라고 생각하시면 될 것 같습니다. 구조에 따라서 인터럽트 리퀘스트가 펄스일수도 있거든요. 그럴 경우는 interrupt_pending | 조건을 추가함으로써 펄스로 오는 인터럽트도 팬딩할수있게 됩니다.

혹시 이 부분이 이해가 안되시면 말씀 부탁 드립니다.

아주 좋은 질문 이였습니다! 또 질문이 있으시다면 구두로 설명드리고 싶네요!

계속 열심히 달리셔서 좋은 결과를 얻으시길 바랍니다. 끝까지 응원하겠습니다. 화이팅!

enable_latch가 F/F이 아니라 래치인 이유가 궁금합니다.

1

23

2

output.txt가 이상하게 나옵니다.

1

80

2

season 2 코딩테스트 강의에 대한 문의드립니다.

1

71

1

4:1먹스 구현방식에 대한 질문입니다.

1

69

2

Windows 기능 켜기

1

89

2

[L1-P02] 멀티플렉서 실전 결과 확인하는데 시간이 너무 걸립니다.

0

76

2

환경설정 문

2

120

2

환불 문의

1

162

2

[LV1_P4_REGISTER ] Non-Blocking

1

106

2

조건문에서 if 연속 사용

1

130

2

vivado 설치

2

154

1

LV1-21 Edge Detector 구현 방법 질문

1

137

1

학교에서 사용하는 툴

1

141

2

[L1-P16 clog2 with memory] clog2 function 질문

1

168

4

fsm 설계 방식에 대한 질문

1

131

2

Level0_P12_verification_testbench

1

125

2

mobaxterm 완전 삭제법

1

408

2

155ns 타이밍 이슈에 관한 궁금증(?)

1

134

2

build 오류

1

175

2

VIVADO 환경

1

151

2

코딩테스트

1

120

2

vscode 환경세팅 방법

2

278

2

L1-P12 인터럽트 제어 질문

2

137

2

L0-P03 design에 예제 코드가 그대로 실려있습니다.

2

119

2