2015년 6월 13일 토요일

[Veliog] Statement


Concurrent statement
always statement
format : always@(sensitivity_list)
sensitivity_list : always문 안에서 값이 참조되는 모든 변수의 리스트이다. simulation시 참조하게 되며 리스트에 해당하는 변수들의 값 변화가 있을 때에만 always문이 동작하게 된다. 따라서 리스트에 빠진 변수가 있으면 그 변수와 관련된 값 변화가 제대로 simulation이 안될 수 있다.
 
Sequential statement
If
ex1)
ex2)
If(조건문)
begin
할당문들;
end
else if(조건문)
begin
할당문들;
end
else if(조건문)
begin
할당문들;
end
always @(A or B)
if(A > B)
Z = A;
else
Z = B;
always @(Ctrl or A or B)
if(Ctrl)
Z = A & B;
else
Z = A | B;
주어진 조건에 따라 2개 이상의 상태로 분기된다. 위로 갈수록 우선순위가 높다.
Latch를 만들지 않기 위해 else문이 있는 것이 좋다.
Case
ex1)
ex2)
Case(case_expression)
case-item : assignment;
case-item : assignment;
end case;
always @(A or B or C or D)
case(1’b1)
A : Z = 2’b00;
B : Z = 2’b01 ;
C : Z = 2’b10 ;
default : Z = 2’b11 ;
endcase
always @(Op or A or B)
case(Op)
2’b00 : Z = A + B;
2’b01 : Z = A - B;
2’b11 : Z = A* B;
default : Z = A / B;
endcase
주어진 조건에 따라 다수의 상태로 분기된다. 위로 갈수록 우선순위가 높다.
Latch를 만들지 않기 위해 default를 설정하는 것이 좋다.
for
ex1)
ex1’)
for(초기값 ; 조건문 ; 증감)
begin
순차구문;
end
end
always @(Address)
for(J = 3; J >= 0 ; J = J -1)
begin
if(Address == J)
Line[J] = 1;
else
Line[J] = 0;
end
always @(Address)
if(Address = 3)
Line[3] = 1;
else
Line[3] = 0;
if(Address = 2)
Line[2] = 1;
else
Line[2] = 0;
if(Address = 1)
Line[1] = 1;
else
Line[1] = 0;
if(Address = 0)
Line[0] = 1;
else
Line[0] = 0;
동일한 명령어를 반복할 때 사용한다. 위의 ex1)ex1’)는 같은 동작을 한다. for문은 코드의 양을 줄이기 위해 사용한다.

댓글 없음:

댓글 쓰기