inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)

[FPGA 8장] HW IP 를 제어하기 위한 AXI4-Lite Interface 이해하기 - 실습편 (HW Debug 를 위한 ILA 사용)

verilog 동작 타이밍 관련 질문입니다.

184

bgkim

작성한 질문수 5

1

안녕하세요 🙂

Verilog 동작캡처.png.webp

 

위의 그림에서 verilog always 동작시점은 S_AXI_ACLK posedge 시점에서 3개의 always 문이 동시에 실행되는 것 같습니다.

 

S_AXI_ACLK posedge 시점의 변수값이 axi_awready = 0, axi_wready = 0, S_AXI_WVALID = 1, S_AXI_AWVALID = 1 이고,

assign slv_reg_wren = axi_wready && S_AXI_WVALID && axi_awready && S_AXI_AWVALID;

slv_reg_wren = 0 입니다.

 

이러한 경우에서 if (slv_reg_wren) 조건은 0 이 되고,

 

S_AXI_ACLK posedge 동작과정에서 slv_reg_wren = 1 로 바뀌게 됩니다.

 

그렇다면 if (slv_reg_wren) 조건이 S_AXI_ACLK posedge 순간에는 0 이고,

S_AXI_ACLK posedge 처리과정에서 if (slv_reg_wren) 조건이 1 이 되는데

 

같은 클락에 if (slv_reg_wren) 조건이 동작하는지 궁금합니다.

 

정리하면

if (slv_reg_wren) 조건이 S_AXI_ACLK posedge 순간에는 0이고, 처리과정에서 1이 되는데,

S_AXI_ACLK posedge 처리 전체과정이 완료되면 if (slv_reg_wren) 조건이 실행이 되는지 않되는지 궁금합다.

 

좋은 강의 감사합니다.

 

 

fpga 임베디드

답변 2

0

설계독학맛비

안녕하세요 🙂

질문이 너무 길어서 + 코드 질문인지라 ㅠ 어디서부터 어떻게 답변을 드려야하나 어려움이 있는데요. (코드는 있는 그대로 동작을 하니까.. ㅠ)

전달드린 코드의 동작을 여쭤보시는거라면, waveform 확인을 부탁드립니다.

그럼에도 불구하고.. 분석이 어려우시다면..

세부적으로 각 signal 의 궁금하신 timing 때 waveform 을 올려서 질문을 다시 작성해주시면 좋을 것 같아요.

 

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. bgkim님.

Verilog에서의 모든 always 블록은 클록 엣지, 즉 S_AXI_ACLK의 상승 엣지(posedge)에서 동시에 트리거됩니다. 이때, 신호는 해당 클록 사이클 내에서만 변화할 수 있습니다.

질문 주신 부분을 중심으로 설명드리자면:

클럭 사이클 내 변수 업데이트

  • Verilog에서는 같은 클럭 사이클 내에서 always 블록 내에서 변수 값이 업데이트됩니다. 예를 들어, axi_awready, axi_wready, S_AXI_WVALID, S_AXI_AWVALID 값들이 특정 클럭 엣지에서 결정되면, assign slv_reg_wren = axi_wready && S_AXI_WVALID && axi_awready && S_AXI_AWVALID;는 이전 값으로 평가됩니다.

  • 따라서 if (slv_reg_wren) 문이 같은 사이클 내에서 변수가 업데이트된 것을 반영할지의 여부는 ‘non-blocking assignment (<=)‘와 ‘blocking assignment (=)‘의 차이로 설명할 수 있습니다. 일반적으로 ‘non-blocking assignment’를 사용할 경우, 현재 클럭 사이클에 변경된 값을 다음 사이클부터 반영하게 됩니다.

관련 유사 질문 및 답변

이와 유사한 논의가 이루어진 질문 및 답변도 확인해 보세요:

이러한 동작은 레지스터 트랜스퍼 레벨(RTL) 시뮬레이션에서 시간 순서대로 값을 평가하는 방법에 의해 영향을 받습니다. 이를 이해하면, Verilog 설계 및 시뮬레이션 과정에서 이러한 동작을 더 잘 이해할 수 있으리라 생각합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

UART0, 1 중 선택

1

48

2

datamoverbram모듈질문

1

61

2

vitis 설치엣 alveo kria versal 등 옵션을 끄고 설치를 했습니다.

1

96

2

vitis 설치 관련 질문 있습니다!

1

84

2

FPGA 공식문서 읽는법

1

95

2

보드 추가의 클릭창이 없습니다.

1

70

2

Edit in IP Packager에서 코드 수정 후 IP 수정하면 simulation에서 수정된 코드로 작동이 안됩니다

1

81

2

BRAM의 Read / Write를 다 수행했는지 확인할 때 사용되는 num_cnt / i_num_cnt 관련 질문

1

106

1

Vitis 코드 작성

1

130

2

vivado 및 vitis 리눅스 환경 설치 관련 질문드립니다.

1

288

3

[9장 led 점등 시간 제어 불가]

1

81

2

Platform Invalid 오류

1

145

3

WSL 설치 관련 문의드립니다!!

1

96

2

Vivado 툴, 파일 질문드립니다!

1

150

2

9장 LED 점등 안됨

1

109

3

Edit in IP Packager 이후에

1

82

1

Fpga 로직

1

89

2

pmu-fw is not running

1

126

2

Create Project에 대해서 궁금해요

1

89

2

장치관리자 USB 포트

1

98

2

FPGA 7장 AXI_LITE I/F질문

1

89

1

bram mover에서 합성할때

1

77

2

타이밍 위반 질문

1

78

2

rvalid 초기화

1

66

2