Inflearn brand logo image

인프런 커뮤니티 질문&답변

공룡님의 프로필 이미지
공룡

작성한 질문수

Verilog FPGA Program 1 (Arty A7-35T)

Counter를 이용한 LED 제어 - 13

xilinx 권고와 차이

작성

·

65

·

수정됨

0

안녕하세요?

xilinx 권고와 다른 코드들이 보이는 것 같습니다.

대표적인 예로 reset이 있습니다.

active low, async reset -> active high, sync reset

https://docs.amd.com/v/u/en-US/wp272

https://docs.amd.com/r/en-US/ug949-vivado-design-methodology

이유가 있으실까요?

권장이기 때문에 반드시 지키지 않아도 동작에 문제가 없다 일까요?

답변 2

0

alex님의 프로필 이미지
alex
지식공유자

안녕하세요.

reset 관련된 내용 답변드립니다.

  1. xilinx 문서에는 async 대신에 sync를 사용하라고 권면합니다. 그러나 저의 경험상 sync로 해서 문제가 발생했던 적이 있습니다. 예전에 async로 항상 사용하다가 문서의 내용을 발견하고, sync로 모두 바꾸어서 진행했었는데, block memroy를 사용하는 중에 오류가 발생했습니다. simulation에서는 아무리 해도 정상동작하는데, 보드에서는 동작하지 않았습니다. 많은 시간 허비하다가 reset을 sync로 사용해서 발생한 문제로 결론이 났습니다. 그 후부터는 reset은 항상 async로 동작하게끔 구현합니다.

  2. 대부분 reset 을 POR(power-on-reset)회로로 동작합니다. 그러나 fpga의 경우 한번 더 생각해 봐야 합니다. 전원을 인가하면 por 에서 잠깐 동안 reset을 active 하고 바로 풀어줍니다. 그러나 fpga는 전원이 인가되면 Memory에서 Bitstream을 다운로드 하고 그 후에 Logic이 동작합니다. Logic이 동작할 때에는 이미 por이 끝난 상태이기 때문에 reset이 동작하지 않습니다. 이에 대해서는 FPGA 내부 동작 Sequence을 알아야 합니다. FPGA는 configuration을 진행할 때 내부 레지스터나 메모리를 초기상태로 만들고 진행합니다. 외부에서 별도의 reset 신호를 인가하지 않아도 자체적으로 reset을 구현한다는 의미입니다.

  3. Reset이 아주 중요한 경우에는 어떻게 하나요? 이런 경우에는 다른 Processor에서 fpga을 reset 하도록 합니다. 즉 configuration이 완료된 후에 Processor에서 reset 신호를 만들어 인가해 줍니다. 또는 PLL IP를 사용한다면, PLL의 출력 신호 중에 locked 신호를 reset 신호로 사용하는 경우도 있습니다.

  4. DDR Memory를 사용하는 경우에는, ddr IP에서 출력해주는 user interface reset 신호를 사용하는 것도 좋은 방법입니다. ddr과 연관이 있는 로직은 ddr과 sync를 맞추어 동작시키는 게 좋습니다.

  5. 저의 경험에 비추어 볼 때, FPGA 1개로 구현하는 경우에는 reset을 크게 신경 쓰지 않아도 됩니다. 저는 통상적으로 Active High, Async로 구현합니다. 이로 인해 문제가 발생했던 적은 없었던 것 같습니다. HW 적으로 초기값(reset 값)을 꼭 맞추어 주어야 하는 경우에는 주의해서 설계할 필요가 있을 수 있습니다.

감사합니다 ~!!

공룡님의 프로필 이미지
공룡
질문자

빠른 답변 감사합니다!

내용중 추가로 궁금해져서요..

1. (1) <-> (5) 이 두 글이 서로 상반되는 것 같습니다..

1.JPG.webp2.JPG.webp


2. 요즘 코드를 기반으로 만들어진 schematic이랑 report 보는걸 많이 하고 있는데요,

혹시 1번 과정을 진행하면서 report를 확인했을떄, fanout을 줄어들면서 도움이 됐다거나 같은 근거가 기억이 나실까요?.

3. (3) 관련하여 PLL의 locked 신호로 reset을 사용하는 방법 추천 감사합니다! 저는 개인적으로 configuration 완료를 확인하기 위한 STARTUP을 사용하는데요, PLL locked 신호를 활용하면, PLL은 어떤 신호로 reset을 하면 좋을까요?

 

감사합니다!!

alex님의 프로필 이미지
alex
지식공유자

1) 오해가 발생할 것 같아 해당 내용 삭제했습니다.

2) local, global reset 나누어 사용하지는 않았습니다. 시스템이 복잡하지 않다면 단순한 reset 구조(1개)를 사용하는 것을 추천합니다.

3) pll reset은 외부에서 입력되는 reset을 사용하거나, 1'b0로 입력해도 됩니다. 크게 영향을 받지 않습니다.

감사합니다 ~!!

공룡님의 프로필 이미지
공룡
질문자

  1. 넵! 감사합니다. 제가 잘못 이해한 것 같습니다

  2. 제가 이해하기로는 xilnx가 권면하기로 local과 global을 나누란 거로 이해했는데(fanput 등 이유로) , 잘못 이해했을 수 있습니다. 다만 질문은 왜 async 와 sync 의 차이가 있냐인데요

  3. 외부 리셋과 POR의 차이가 궁금합니다. POR에 의한 외부 리셋은 보통 RC 시정수 값에 의한 power on 이후 신호로 이해하고 있는데, (2) 항으로 por 은 의미가 없어 보여서요.. 1'b0을 입력해도 된다는 건.. 필요에 따라 구현한 모듈의 reset에도 1'b0을 입력해도 된다는 말씀이실까요?

     

늦은 시간까지 답변해주셔서 감사합니다!

alex님의 프로필 이미지
alex
지식공유자

안녕하세요.
1) reset의 async, sync의 차이가 문맥적으로 보면 clock에 동기되어 동작하느냐, 그렇지 않느냐인데, 실제 fpga에 적용되는 것은 어떤 차이가 있는지 정확히는 잘 모르겠습니다.
2) reset, clock은 다른 신호들과 구별된 신호들입니다. 저는 reset, clock은 최대한 단순하게 설계하는 것이 타이밍이나 성능면에서 좋다고 알고 있습니다. reset, clock을 여러 개로 나누어야 할 필요가 있을 때에는 나누어 구현할 수 밖에 없지만, 굳이 여러개로 나누어서 구현할 필요가 없을 때에는 최대한 단순하게 구현하는 것이 좋습니다.
3) 대부분의 모듈에서 reset (high active 인 경우)을 1'b0로 입력해서 구현해도 크게 문제가 되지 않습니다. 앞에서 설명했듯이 전원이 인가되면 FPGA 내에서 모든 요소들을 reset 상태로 만들어 주기 때문입니다. 특별히 reset이 타이밍과 연관되어 중요한 경우에는 타이밍에 맞게 reset을 생성해서 입력해 주어야 합니다.
4) 강의에 설명된 내용이 Xilinx의 권면과 맞지 않는지는 잘 모르겠습니다. 다만 제가 20여년동안 여러 선배님들의 코드를 보고, 여러 프로젝트를 진행하면서 나름 최적화한 코드입니다. 지금까지 코드의 구성이 잘못되어 문제가 되었던 적은 없었고, 지금도 다른 사람들의 코드를 보면, 내가 만든 코드가 잘 정리된 코드라 생각합니다.
5) fpga 코딩을 하며, fan in/out 까지 고려해서 코딩을 했던 적은 없었습니다. fpga 코딩은 기능구현과 simulation 검증의 무한 반복입니다. 타이밍에 맞게 동작하는지 계속해서 확인해야 합니다.
6) xilinx 자료를 보면서 배우는 것은 좋은 것 같습니다. 그러나 처음부터 너무 어렵게 접근하면 어려움이 많습니다. 강의에 설명된 내용은 20여년 동안 현업에서 일을 하면서 경험하고 검증된 내용을 바탕으로 이루어졌습니다. 강의 내용대로 하다 보면 몸으로 익혀지고, 차츰 내 것으로 만들어서 나만의 코딩 스타일을 만들어 가시길 바랍니다.
감사합니다 ~!!

공룡님의 프로필 이미지
공룡
질문자

FPGA 관련 업무를 15년 이상을 해오면서, reset에 관한 다양한 경험들을 쌓을 수 있었습니다. 특히 Xilinx사의 엔지니어들과 국내 FAE분들과의 대화를 통해 많은 인사이트를 얻을 수 있었고, 이번에도 선생님의 경험을 배우고자 질문을 드리게 되었습니다.

FPGA 분야는 정해진 하나의 정답이 있는 것이 아니라 대부분의 경우 ‘권장(recommend)’ 방식으로 접근하는 경우가 많습니다. Reset 신호의 경우, 특성상 fanout이나 skew가 클 수밖에 없어 여러 가지 방법론이 제시되고 있는 것으로 보입니다.

다만, Xilinx에서 제공하는 기본적인 설계와 다른 방식으로 구현할 경우, reset 앞단에 LUT가 추가로 사용될 수밖에 없으며, 이로 인해 결과적으로 timing에 영향을 준다고 알고있습니다. 최근 Xilinx FAE와의 대화에서도 이 부분을 확인하였으며, 이를 설명함에 있어 GPT의 문장을 인용하고자 합니다. 물론 GPT의 설명이 절대적인 정답은 아니지만, 해당 FAE 분께서도 유사한 설명을 하셨기에 참고로 공유드립니다.

  • 저는 simulation을 functional simulation과 timing simulation을 구분해서 functional simulation 이후 timing simulation를 하는 편입니다. 저의 경우, 말씀해주신 simulation에서는 정상인데 보드에서는 오동작 경험은 functional simulation 후 timing simulation를 진행하면 크게 나타나지는 않았던것 같습니다.

 

감사합니다!


1. FPGA 내부 플립플롭(FF)의 reset 지원 방식

Xilinx FPGA의 대부분의 플립플롭은 다음과 같은 reset 기능을 하드웨어적으로 지원합니다:

  • Synchronous reset: 기본적으로 지원

  • Asynchronous reset: 일부 디바이스에서 지원 (device dependent)

  • Active-high reset: 대부분 기본적으로 지원

  • Active-low reset: 하드웨어 FF는 보통 active-high만 직접 지원

alex님의 프로필 이미지
alex
지식공유자

fpga 관련 업무를 15년 이상 하셨다니 대단합니다. 제 강의가 도움이 되실지 모르겠네요 ㅎ

여러가지 내용 공유해 주셔서 감사드립니다.

잘 아시겠지만, fpga가 너무나 내용이 많아서 모든 것을 다 아는 것은 어려운 일이라 생각합니다. 저도 여러 프로젝트들을 해오면서 검증된 내용들만으로 일을 진행합니다. 복잡한 문법을 사용하기보다는 나름 검증된 틀안에서 코딩을 하니, 처음 접하시는 분들에게는 생소할 수도 있을 것 같습니다.

아무튼 좋은 내용 공유해 주셔서 감사드립니다.

0

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

질문하신 내용은 FPGA 설계를 진행함에 있어서 굉장히 중요한 주제입니다. 특히, 리셋 신호에 관한 설계는 FPGA 신뢰성 및 복잡성에 커다란 영향을 미칠 수 있습니다.

리셋 설계의 차이점

  1. Active Low vs. Active High:

    • Active Low: 일반적으로 ‘0’일 때 활성화되는 리셋 신호를 의미합니다. 이는 하드웨어 설계에서 전통적으로 많이 사용되어 왔으며, 다양한 논리 회로에서 안정적입니다.
    • Active High: ‘1’일 때 활성화되는 리셋 신호를 의미합니다. 최신 설계에서는 대체로 이 방식을 권장하고 있습니다.
  2. 동기식 vs. 비동기식 리셋:

    • 동기식 리셋(Sync Reset): 리셋 신호가 클럭 신호에 동기화되어 클럭 엣지에서 설정됩니다. 권장되는 이유는 메타안정성 문제를 줄여주고, 설계의 타이밍 분석을 좀 더 쉽게 할 수 있다는 점입니다.
    • 비동기식 리셋(Async Reset): 클럭과 무관하게 리셋 신호가 활성화됩니다. 이는 즉각적인 리셋이 필요할 때 유용하지만, 메타안정성 문제를 일으킬 수 있습니다.

이는 왜 중요한가?

  • FPGA 설계자는 전략적으로 선택합니다: Xilinx 및 AMD의 권고는 시스템 안정성과 종단처리에 대한 요구사항을 충족시키기 위한 것입니다. 하지만, 모든 권장이 모든 프로젝트에 최적의 솔루션이 되는 것은 아닙니다.
  • 설계 요구에 따른 선택: 권장 사항은 “권장”일 뿐, 프로젝트의 정확한 환경과 요구사항을 고려한 의사 결정이 필요합니다.

실제 프로젝트에서 설계자가 자신이 속한 환경과 요구에 맞춰 선택할 수 있으며, 설계 의도나 특정 조건 하에서는 Xilinx의 권장사항과 다르게 설정해도 문제가 발생하지 않을 수 있습니다.

추가적으로 reset 방식에 대한 좀 더 구체적인 설명을 듣고 싶다면, 이 질문에 대한 지식공유자의 답변을 참조하시면 도움이 될 수 있습니다.

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

공룡님의 프로필 이미지
공룡

작성한 질문수

질문하기