공부/Verilog

[그냥 공부]#1 등가 연산자 , 타이밍 제어

오비루 2022. 3. 1. 16:21
728x90
728x90

등가 연산자

 

if(a !== b)

다음과 같은 ( !== )연산자를 사용하는 이유는 우리가 if 문을 동작하기 위해 필요한 참 & 거짓 값을 정확하게 얻으려면 논리 결과값이 0 또는 1로 출력되어야 한다.

 

하지만, if( a != b ) 와 같은 연산자를 이용하면 a 와 b 가 x or z 의 값을 지녔을 시 논리 결과값이 X 로 출력이 되어 버그가 생긴다.

 

 

타이밍 제어

 

always @( posedge clock or posedge reset)

와 같은 코드에서 or 연산자 대신 , (콤마) 도 사용 가능하다.

이는 clock 신호가 상승 클럭이거나 reset 신호가 상승일 때 동작함을 이야기한다.

여기서 @ 는 사건 제어를 지정하는 데 사용된다.

@ (clock) q = d; // q=d 는 신호 클럭이 변할 때마다 수행된다.
@ (posedge clock) q=d; // q = d 는 신호 클럭이 상승 변환을 할 때마다 수행된다.
						// (0 -> 1 , x 또는 z , x 에서 1 , z 에서 1)
@ (negedge clock) q = d; // q = d 는 신호 클럭이 하강 변환을 할 때마다 수행된다.
						// (1 -> 0 , x 또는 z , x 에서 0 , z 에서 0)
q = @(posedge clock) d; // 클럭의 상승 모서리에서 현재 d의 값을 구하고 q로 할당된다.

 

만약, 조합 논리 블록의 입력 변수가 매우 많아 쓰기가 복잡하다면 @(*) 기호를 대신하여 사용 가능하다.

이는 모든 입력 변수들이 자동적으로 감지 목록 안에 포함되는 기호이다.

 

추가) 복습하며 코딩하던 도중 오류가 계속 나왔었다.

알고보니 testbench 에서 #50 delay이후 특정 값을 입력하지 않은채 end 를 하여 오류가 지속적으로 발생하였던것이다.

앞으로는 주의하도록 하자.

728x90
반응형

'공부 > Verilog' 카테고리의 다른 글

Combinational logic delay  (2) 2022.08.26
Verilog - Assign & Always 차이  (0) 2022.08.22
[그냥 공부]#2 signed & unsigned  (1) 2022.03.06
플립플롭(Flip - Flop) S-R , D , J-K , T  (0) 2022.02.26