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 |