inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Verilog Master Season 1 của 설계독학 (Tự học thiết kế) (Bước nhảy vọt trong sự nghiệp kỹ sư thiết kế kỹ thuật số hoàn thiện thông qua các bài toán kiểm tra lập trình thực tế)

[L1-P12] Điều khiển ngắt (Interrupt Control): Bộ điều khiển phần cứng phản ứng tức thì với các sự kiện bên ngoài

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

35

ksh79533954

67 câu hỏi đã được viết

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

Câu trả lời 2

1

ETA

안녕하세요 김상현님,

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

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

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

아래가 질문이셨죠?

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

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

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

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

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

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하지 않으면 문제가 되겠네요.

메모리 리셋 관련 질문 드립니다.

1

18

2

RTL_ROM이 무엇인지 알고 싶습니다.

1

15

2

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

1

35

2

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

1

81

2

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

1

76

1

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

1

69

2

Windows 기능 켜기

1

89

2

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

0

80

2

환경설정 문

2

122

2

환불 문의

1

163

2

[LV1_P4_REGISTER ] Non-Blocking

1

106

2

조건문에서 if 연속 사용

1

130

2

vivado 설치

2

154

1

LV1-21 Edge Detector 구현 방법 질문

1

140

1

학교에서 사용하는 툴

1

141

2

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

1

172

4

fsm 설계 방식에 대한 질문

1

132

2

Level0_P12_verification_testbench

1

127

2

mobaxterm 완전 삭제법

1

413

2

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

1

136

2

build 오류

1

179

2

VIVADO 환경

1

152

2

코딩테스트

1

123

2

vscode 환경세팅 방법

2

279

2