Resolved
Written on
·
268
2
조합회로 강의에서 alway문과 assign을 사용한 두가지 스타일을 보여주셨는데요 제가 본 블로그에서 always문을 사용하여 조합회로를 코딩하면 래치가 생성될 가능성이 있다며 그런 코딩스타일을 정말 신랄하게 비판하더라구요 .. 선생님은 조합회로 설계시 어떤 코딩 스타일을 쓰는게 더 좋다고 생각하시는지 궁금합니다 !
Answer 1
0
안녕하세요 :)
사실 저 질문을 몇번 받긴했는데, 인프런에서는 처음이네요 ㅎ
결론은 좋은 스타일은, 두 코딩 스타일의 회로가 동일하다면 가독성이 좋은 쪽으로 선택하세요. 현업에 가시면 코딩가이드가 있긴합니다...만? 완벽하게 지키시는 분들이 있을지는 의문입니다. 우선은 동작하는 설계에 집중하시고, 현업에 오시면 그때 다듬으셔도 늦지 않다 생각해요.
그리고 명확하게 문법을 알고 있다면, always 문을 사용해도 됩니다. (저는 잘 쓰고 있고, 저 문법으로 많은 양산 제품을 만들었어요.) 어설프게? 알고있다면, 최악을 피하기 위해서 안쓰셔도 됩니다.
https://stackoverflow.com/questions/6009998/verilog-always-block-using-symbol
여기의 답변이 저의 생각하고 일치합니다.
다음은 질문자님의 질문과 유사했던? 주고받았던 QnA 이구요. 답변에 도움이 되시길 바랍니다. :)
참고로, 저분 글에 댓글달지 말아주세요. (싸우고 싶지 않아요?;; 얽히고싶지 않...;;;)
본인이 글을 읽어보시고, 옳다고 생각하시는 것을 선택하시면 됩니다!!
FSM으로 uart 설계중이었는데 그 보통 state 컨트롤시 always(*) 조합회로로 컨트롤을 하는데 이거에 대한 글을 쓴 블로그를 보았는데요.
진짜 always(*)문 안에 레지스터를 쓰게되면 실제 양산시에 큰 문제가 생기나요?
갑자기 궁금해서 여쭤봅니다.
https://m.blog.naver.com/PostView.nhn?blogId=godinus123&logNo=221552331215&proxyReferer=https:%2F%2Fwww.google.com%2F
이 블로그구요. "Note4"에 언급되어있습니다.
예전에 어떤 학생도 이분 글로 물어보던데.. 음..
개인적으로 그렇게 동의하는 글은 아니에요. 다 틀렸다는 아닌데.. 공격적인 말투하고.. 본인말이 무조건 맞다 식의 문장이 조금 걸릴 뿐.. (다 맞지 않지만요)
저희 회사 사장님 및 선배들.. 다 망했겠네요..ㅎ 저도 이번생의 설계 엔지니어는 망했군요.. ㅠㅠ
always(*) 문 이 문법은 쓰세요. Verilog 2001 정식 문법입니다.. 왜 그걸 이렇게 표현했는지.. 이거 Combinational Logic 입니다......
저분 글에 반박하면
<저분 글 발췌>
always@(*)
어떤 양아치가 이런 문장을 책에 처음 썼는지 모르겠으나 이 후로 나온 책들이 모두 이런 문장을 사용했다. 이 문장은 일단 컴비네이셔널 로직을 register 로 선언하게 된다. register 로 선언되면 메모리가 된다. 컴비네이셔널 로직에 플립플롭이나 래치가 되면 시그날 처리가 애매해 진다.
reg 로 선언했다고 해서 전부 register 아니구요. 경우에 따라서 Combinational Logic 으로 만들어집니다. (이 한줄이면 충분해요.)
어떤 양아치 == IEEE
<저분 댓글>
당연히 reg 로 선언해서 컴비네이셔널 로직으로 합성이 가능하죠. 그런데 그게 경우에 따라 레지스터가 될수도 있잖아요. 컴비네이셔널 로직을 설계하는데 만에하나 레지스터나 래치같은 형태로 합성되면 회로에 재앙이 발생합니다.
코딩 스타일로 충분히 막을 수 있는 재앙을 왜 잘못될 확률이 있는 방식으로 설계하냐는 말이죠.
경우에 따라서.. 가 어떤 경우인지는 모르겠는데, 문법을 정확하게 모르면 안쓰는 것이 좋다 의 뉘앙스로는 공감합니다.
하지만 저는 써요 :)
즐공하세요 :)