본문 바로가기

디지털 회로 실습

2-3강 - verilog 기초 3 (기초 구문, Net 형 자료형)

5. 기초 구문

1) for문

0> 규칙

loop command (for, repeat, while, forever)는 기본적으로 순차회로(always문, initial문)내에서만 사용

1> 문법

for (초기값 ; 조건식 ; 오퍼레이션)
         처리문 or 블록 처리문

for문의 index는 integer로 선언한다.

2줄 이상이 되는 경우 block (begin, end)로 묶어준다.

2> 예시

integer count;

initial begin
     for (count = 0; count <128; count = count +1)
	$display(“count = %d”, count); 
end

=> 0에서부터 127까지 증가시키고 출력

 

2) if문

1> 문법

if (조건식)
	처리문 or 블록 처리문
else
	처리문 or 블록 처리문

2줄 이상이 되는 경우 block (begin, end)로 묶어준다.

 

2> 예시

if (enable ==1'b1) begin
   data = 10; //Decimal assigned
   address = 16'hDEAD; // Hexadecimal
   wr_enable = 1'b1; // Binary
end
else begin
   data = 32'b0;
   wr_enable =1'b0;
   address = address +1;
end

 

3) while 문

1> 문법

while ( 조건문 )
	처리문 or 블록 처리문

조건문이 false가 될 때까지 수행한다.

2> 예시

integer count;

initial
begin
     count = 0;
     while (count < 128)	
     begin		
		$display(“count = %d”, count);
		count = count +1;
     end
end

=> 0부터 127까지 출력

 

4) case 문

1> 문법

case  (판정식)
       항1 : 처리문1 ;     // 판정식이 항1과 같으면, 처리문1을 실행
       항2 : 처리문2 ;     // 판정식이 항2와 같으면, 처리문2을 실행
                 :
       항N : 처리문N ;    // 판정식이 항N과 같으면, 처리문N을 실행
       default : 처리문 N+1 ;  // 판정식이 항N까지 일치하지 않으면 처리문 N+1을 실행
endcase			

판정식이 해당하는 항에 가서 처리문을 실행한다.

물론 일치하는 항이 없다면 default의 처리문을 실행한다.

case로 시작해서 endcase로 닫아주어야 한다.

 

2> 예시

case(address)
   0: $display("num is 0");
   1: $display("num is 1");
   2: $display("num is 2");
   default : $display ("num is not 0, 1 and 2");
endcase

3> C언어와의 유사성

- 판정식과 일치하는 처리문을 실행하는 구조가 유사하다.

4> C언어와의 차별성

- C언어처럼 switch라는 keyword가 아닌 case라는 keyword에 판정식을 넣는다.

- C언어의 switch와 달리 break로 닫지 않아도 된다.

- endcase로 해당 구문을 닫아주어야 한다.

 

6. Net형 자료형

1) 설명

1> 정의

device(gate or module) 간의 물리적 연결을 나타낸다. 

값(신호)이 저장되는 것이 아니다.

net 값이 변할 때 자동으로 net에 새로운 값이 전달된다.

2> 특징

크기를 정하는 vector를 지정하지 않으면 1bit net이다. (default)

keyword인 wire, trireg, tri, wand, wor, triand, trior 등으로 선언된다. (wire를 주로 쓴다.)

2) 사용

1> 기본 문법

네트 형 [범위] [지연] 네트 이름, …, 네트 이름;

범위 : vector 혹은 bit로 지정한다.

지연 : simulation에서 사용

2> 예시

wire a;             // net a를 정의

wire b, c;         // net b, c를 정의

wire d = 1’b0;   // net d는 논리값 0으로 선언