오늘은 맑음

verilog hdl 설계시 주의할 점(2) 본문

Digital logic

verilog hdl 설계시 주의할 점(2)

자전거 타는 구구 2021. 4. 21. 00:23
반응형

 모호한 표현을 사용하지 말자

몇 가지 예시가 있습니다.

 

1. 동일하지 않은 data width를 가진 신호를 연결하기

input [2:0] in_data;

wire [3:0] a;

 

assign a = in_data;

 

이렇게 할당하게 되면 a[3]은 어떠한 값이 될까요?

요즘 컴파일러들은 매우 좋아서 아마 알아서 0으로 채울지도 모릅니다.

하지만 어떤 상황에서 무슨 에러가 발생할지 모르는 코드가 됩니다.

컴파일러에 따라 달라지겠죠.

따라서 위와 같이 매우 모호한 코드는 피해야 합니다.

 

assign a = {1'b0, in_data};

 

이런 식으로 사용하지 않는 비트는 꼭 채워주도록 합시다.

 

2. data overflow 사용하기

 counter를 짤 때 마침 딱 8까지 반복해서 숫자를 세는 상황이 발생했습니다.

그래서 변수를 3bit 설정해놓고 계속 더했습니다.

계속 더하다가 3'b111이 되었을 때 다시 0으로 돌리기 위해 1을 더해 overlow를 내버려서 000으로 초기화시켰습니다.

이러한 경우 시뮬레이션에서는 1000이 되기 때문에 상위 1bit는 버리고 3'b000으로 나타나게 됩니다.

 

하지만 이러한 방법도 오류를 발생할 수 있는 상황을 만들 수 있게 됩니다.

따라서 3'b111이 되었을 때 overflow를 내지 말고 다시 3'b000으로 초기화를 해줍시다.

 

 지금 생각나는 상황을 정리해봤습니다.

 물론 컴파일러가 잘 처리 해주겠지만, 항상 에러가 발생하지 않는 정확한 코드를 작성하기 위해 연습하는게 좋다고 생각합니다. 

 혹시 이후에 생각이 나거나 경험하게 된다면 추가해서 기술하겠습니다.

 

**컴파일시 발생하는 warning은 모두 잡아주도록 합시다. 이는 verilog hdl뿐만 아니라 다른 언어에서도 마찬가지 입니다.

 

 

반응형
Comments