인프런 커뮤니티 질문&답변
always @(*) 문장 질문
해결된 질문
작성
·
1.3K
2
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
먼저 좋은 강의 정말 감사합니다.
always @(*) 문장 관련해서 질문을 많이 받으셔서 스트레스 받으실 듯 하여 관련 답변이나 링크들 읽어 보았습니다.
제가 이해한 바로는 다음과 같은데 혹시 잘못 이해한 부분이 있는지 여쭤보고 싶습니다.
- always @ 안에 기술되는 Type은 전부 reg여야 한다. (port는 예외)
- always @(*)는 모든 입력이 포함된 것을 의미하므로 입력이 변경될 때 마다 항상 변경되는 것이기 때문에 모듈이 순차가 아닌 조합회로를 기술할 때 유용하다.
- always @(*)은 Combinational Logic이고 reg Type을 선언하게 된다.
- 하지만 reg라고 해서 전부 F/F인 것은 아니다. Always의 level sensitive로 사용하느냐(combinational Logic), Clock Edge Sensitive로 사용하느냐(Sequential Loigic)에 따라서 갈린다.
- reg로 선언했다고 해서 전부 메모리가(Latch나 F/F) 되는 것은 아니지만 문법을 정확하게 지키지 않는다면 메모리가 되어 조합회로의 시그널 처리를 애매하게 만들 수 있으므로 유의하자. 조합회로를 설계하는데 Latch나 F/F의 형태로 합성되면 회로에 큰 문제가 생길 수 있다.
VHDL을 2년전에 배우고 Verilog를 시작하게 되어 아직 지식이 많이 부족하다 보니 이런 질문 드리게 되었습니다.
감사합니다.
퀴즈
하드웨어 설계에서 FSM(Finite State Machine)의 주요 목적은 무엇일까요?
데이터 저장 용량 최대화
제어 로직을 체계적으로 설계
클럭 주파수 자동 조정
전력 소모량 실시간 측정
답변 1
1
설계독학맛비
지식공유자
와....... 감동입니다!!!
정리를 아주 잘해주셨습니다.
한 줄을 우선 수정하겠습니다.
- always @ 안에 기술되는 Type은 전부 reg여야 한다. (port는 예외)
always @ () 문안에 Assign 시, 왼쪽 피연산자 = 오른쪽 피연산자 관계에서, (ex, A <= B; )
왼쪽 은 Reg, 오른쪽은 Reg / Wire 무관합니다. 이는 Combinational logic 의 (*) 이나, Sequential Logic 의 (posedge clk) 모두 동일하게 적용됩니다.
port 는 별도로 reg 를 기술하지 않으면 default 로 wire 입니다.
다음과 같이 결론 내겠습니다. (문장이 매끄럽지 않은점은 이해를..)
- always @ 안에 기술되는 대입시 사용하는 왼쪽 피연산자의 Type 은 reg여야 한다.
다음 문장도 위 문장의 연장선상 입니다. 고쳐보셔요 :)
- always @(*)은 Combinational Logic이고 reg Type을 선언하게 된다.
나머지는 옳다 라고 생각합니다.
즐공하세요 :)





답변 너무 감사드립니다! 이해에 큰 도움이 되었어요 :D
제 나름대로 두 문장을 아래와 같이 고쳐보았습니다.
- always@() 블럭 안에서 대입할 때, 왼쪽 피연산자의 Type은 reg여야 한다.
- always@(*)은 Combinational Logic이다. 마찬가지로 블럭 안에서 대입 시 왼쪽 피연산자의 Type은 reg여야 한다. 또한 always@(*)의 의미에 따라 Level Sensitive로 동작하게 되므로 블럭 내에서 선언한 reg가 메모리의 형태로 합성되지는 않는다.