인프런 커뮤니티 질문&답변
[LV1_P4_REGISTER ] Non-Blocking
작성
·
6
1
안녕하세요 ETA님 바쁘신데 고생 많으십니다.
복습을 하던 도중 궁금한 점이 생겨 질문 남기게 되었습니다.
//6.byte enable
always @(posedge clk or posedge areset) begin
if(areset) out_5 <= 16'h0;
else begin
if(sel[0]) out_5[7:0] <= in[7:0];
if(sel[1]) out_5[15:8] <= in[7:0];
end
end
위의 코드를 아래와 같이 변경했을 때, sel = 2'b3인 경우 out_5[7:0]에는 어떤 값이 할당되는지 궁금합니다.. non blocking event region과 관련될 것 같은데, System Verilog LRM을 참조해봐도 이해가 가지 않아 질문 남깁니다.
Non-Blocking assignment 관련하여, 어떤 값이 우선순위를 가지고 할당 되는지 질문 드리고 싶습니다.,
//6.byte enable
always @(posedge clk or posedge areset) begin
if(areset) out_5 <= 16'h0;
else begin
if(sel[0]) out_5[7:0] <= 8'bff;
if(sel[1]) out_5[7:0] <= 8'b11;
end
end
좋은 하루 되십시오 !
[1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요.
[2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂
[3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.)
================ 다음 내용은 읽어보시고 지우시면 됩니다.=================
질문 내용을 작성해주실 때, 위의 3단계로 제가 이해할 수 있게 작성해주시면 정확한 답변을 드릴 수 있을 것 같아요!!
현업자인지라 업무때문에 답변이 늦을 수 있습니다. (길어도 만 3일 안에는 꼭 답변드리려고 노력중입니다 ㅠㅠ)
강의에서 다룬 내용들의 질문들을 부탁드립니다!! (설치과정, 강의내용을 듣고 이해가 안되었던 부분들, 강의의 오류 등등)
이런 질문은 부담스러워요.. (답변거부해도 양해 부탁드려요)
개인 과제, 강의에서 다루지 않은 내용들의 궁금증 해소, 영상과 다른 접근방법 후 디버깅 요청, 고민 상담 등..
글쓰기 에티튜드를 지켜주세요 (저 포함, 다른 수강생 분들이 함께보는 공간입니다.)
서로 예의를 지키며 존중하는 문화를 만들어가요.
질문글을 보고 내용을 이해할 수 있도록 남겨주시면 답변에 큰 도움이 될 것 같아요. (상세히 작성하면 더 좋아요! )
먼저 유사한 질문이 있었는지 검색해보세요.
잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
==================
답변 2
0
안녕하세요 항상 감사하면 살기님.
인프런 AI인턴이 잘이야기해주네요.
당연히 실제로 이렇게 디자인을 하지는 않지만 할당을 살펴보면,
같은 block 내 순차 실행으로 마지막 NBA가 최종 업데이트됩니다.
따라서 8'b11이 할당됩니다.
감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. 항상 감사하면 살기님.
질문해주신 내용에 대해서 답변드리겠습니다. 논블로킹 할당과 비트 선택 관련해서 혼란이 생길 수 있는데, 다음과 같은 내용으로 이해하시면 좋을 것 같습니다.
Non-Blocking Assignment
Non-Blocking Assignment 특성:
- 논블로킹 할당(
<=)은 동시병렬로 실행되기 때문에, 모든 할당문은 하나의 포지티브 엣지에서 동시에 평가됩니다.
- 할당은 모든 매칭되는 이벤트가 평가된 뒤에 이루어지기 때문에, 여러 할당문이 같은 레지스터 비트를 갱신하도록 설정되면 마지막으로 평가된 값을 갖게 됩니다.
- 논블로킹 할당(
주어진 코드 이해:
if(sel[0]) out_5[7:0] <= 8'bff; if(sel[1]) out_5[7:0] <= 8'b11;sel = 2'b11인 경우, 두 조건 모두 참이기 때문에out_5[7:0]에 두 값을 할당하려고 시도합니다.
- 논블로킹 특성상, 마지막으로 평가된
8'b11이out_5[7:0]에 갱신됩니다.
참고할 만한 부분
- 우선순위 이해: 논블로킹 할당은 동시 실행의 의미를 가집니다. 따라서, 문법적으로 나중에 오는 할당이 마지막으로 적용됩니다.
- 행동 이해: 여러 개의 할당문이 서로 영향을 미치지 않는 것으로 설계할 필요가 있습니다. 그렇지 않을 경우, 의도치 않은 결과가 발생할 수 있습니다.
관련 질문 및 내용
비슷한 질문과 답변을 통해 더 명확히 이해하실 수 있도록 추천드립니다.
이 링크들이 상황에 적합한 해결책을 제시하는데 도움을 줄 것입니다. 저는 질문자님의 이해를 돕기 위해 지식공유자님의 기존 답변을 참고로 유사한 답변 링크를 추천하고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




