개발 편의성을 위한 소소한 Tips/04 질의 응답 정리

[FPGA Q/A. 017] always @(*) 문장 질문

반응형
질문자체가 좋은 답이라 그대로 적습니다 :)

Q

먼저 좋은 강의 정말 감사합니다.

always @(*) 문장 관련해서 질문을 많이 받으셔서 스트레스 받으실 듯 하여 관련 답변이나 링크들 읽어 보았습니다.
제가 이해한 바로는 다음과 같은데 혹시 잘못 이해한 부분이 있는지 여쭤보고 싶습니다.
 
  • always@() 블럭 안에서 대입할 때, 왼쪽 피연산자의 Type은 reg여야 한다.
  • always @(*)는 모든 입력이 포함된 것을 의미하므로 입력이 변경될 때 마다 항상 변경되는 것이기 때문에 모듈이 순차가 아닌 조합회로를 기술할 때 유용하다.
  • always@(*)은 Combinational Logic이다. 마찬가지로 블럭 안에서 대입 시 왼쪽 피연산자의 Type은 reg여야 한다. 또한 always@(*)의 의미에 따라 Level Sensitive로 동작하게 되므로 블럭 내에서 선언한 reg가 메모리의 형태로 합성되지는 않는다.
  • 하지만 reg라고 해서 전부 F/F인 것은 아니다. Always의 level sensitive로 사용하느냐(combinational Logic), Clock Edge Sensitive로 사용하느냐(Sequential Loigic)에 따라서 갈린다.
  • reg로 선언했다고 해서 전부 메모리가(Latch나 F/F) 되는 것은 아니지만 문법을 정확하게 지키지 않는다면 메모리가 되어 조합회로의 시그널 처리를 애매하게 만들 수 있으므로 유의하자. 조합회로를 설계하는데 Latch나 F/F의 형태로 합성되면 회로에 큰 문제가 생길 수 있다.

 

VHDL을 2년전에 배우고 Verilog를 시작하게 되어 아직 지식이 많이 부족하다 보니 이런 질문 드리게 되었습니다.

 
감사합니다.
 

 

 

반응형