순차논리회로
종류
- 래치(latch), 플립플롭(flip/flop), 메모리
래치
- 잘 사용하지 않으며, 의도하지 않는 래치는 만들지 말아야 합니다.
F/F
- JK F/F, T F/F은 합성시 사용하지 않는다.
- D F/F만 사용한다.
메모리
- ROM은 설계 구분으로는 조합논리회로이다.
- SRAM은 합성 가능하다.
D F/F
동작
- 언제나(always) clk의 양의 에지(posedge clk)일때 (@) q에 d를 저장한다.(q <= d);
조합논리회로의 always구문과의 차이점
- @( ) 내부의 감지목록에 posedge 또는 negedge신호만을 사용
- Non blocking 할당문에 <=를 사용
- always 구문에서 할당되는 출력을 reg로 정의하는것은 동일하다.
D F/F 의 비동기 리셋
- 조그만 원(o)기호는 active low를 의미하며 rst=0일 경우 리셋됩니다.
- 플립플롭은 기본적으로 클럭(clk)의 에지(edge)에서만 q값을 변경합니다.
- Asynchronous(비동기) 리셋은 클럭에 상관없이 q값을 0으로 리셋됩니다.
- 리셋이 클러과 상관없이 동작하므로 감지목록에 negedge rst를 추가합니다.
- 리셋이 가장 우선하므로 리셋 판별인 if (!rst)를 제일 위에 놓습니다.
D F/F 의 비동기 리셋 과 셋
- 리셋은 출력을 0으로 preset또는 set은 출력을 1로 합니다.
- rst 또는 set이 0으로 바뀌거나 clk이 1로 바뀔 때 동작합니다.
- 일반적으로 플립플롭 코드 작성시 감지목록에는 에지를 사용하여 최대 clk, reset, set 3가지만 넣을 수 있습니다.
- 감지목록에 posedge or negedge를 사용하지 않으면 래치가 발생합니다.
D F/F의 동기 리셋
- 동기 리셋은 clk가 상승 에지일 때만 rst가 0이면 q가 0으로 리셋됩니다.
- 비동기 리셋과 같이 아무때나 rst가 0이어도 q가 0으로 되지 않습니다.
- 동기식 리셋의 플립플롭은 가능하면 사용하지 않는 것이 좋습니다.
D F/F with enable
- clk의 상승에지에서 en이 1이면 새로운 d의 값을 저장하고 출력합니다.
- clk의 상승에지에서 en = 0이면 현재의 출력값을 다시 저장하여 출력하므로 값을 유지합니다.
- 마지막 else 문장을 굳이 적을 필요가 없습니다.
4bit D F/F (4bit register)
- 여러 비트의 플립플롭을 같이 사용할 때 레지스터라 합니다.
- 4비트의 입력을 병렬로 받아 출력한다.
- q와 d의 선언시 [3:0]으로 명시되어 있다면 q <= d;와 같이 비트표시를 생략하여 작성할 수 있습니다.
D F/F with q and qbar outputs
q 와 q_bar가 출력으로 나가는 상황을 생각해보면 다음과 같이 생각할 수 있습니다.
하지만 위처럼 플립플롭이 여러개 나오면 좋지 않습니다. 즉 아래와 같이 조합논리회로 assign문을 활용합니다.
할당문
- 연속 할당문 (assignment)
- 조합논리회로 출력인 wire신호를 위한 assign 문에서 사용합니다.
- 예) assign y = ~a;
- 절차형 할당문(procedural assignment)
- always블록, initial 블록, task, function에서 사용합니다.
- blocking 할당문 : = 사용 , 나열된 순서대로 실행합니다.
- nonblocking 할당문 : 할당기호 <= 를 사용합니다. nonblocking 문장끼리는 동시에 실행됩니다.
플립플롭 작성시 nonblocking 사용
- a와 b가 동시에 값이 바뀐다.
플립플롭 작성시 blocking 사용
- blocking을 사용하여 순서대로 문장이 실행되면 b의 값은 항상 1의 값을 유지합니다.
Non blocking 사용 예 : 시프트 레지스터
- 모든 문장이 동시에 실행되므로 4개의 플립플롭으로 합성됩니다.
- 순차회로에서는 nonblocking만을 사용한다.
Blocking 사용 예
- 밑의 그림과 같이 구성됩니다.
- 모든값이 d의 값과 동일하게 됩니다.
출력 신호 주의사항
- 출력신호는 한 블록에서만 출력되어야 합니다.
순차논리회로 : 하나의 always블록에서만 출력
조합논리회로 : 하나의 always블록 또는 하나의 assign문장에서만 출력
조합논리회로와 순차논리회로
- always와 assign문으로 나누어 즉, AND(조합회로), F/F(순차회로)로 따로 생각하여 작성할 수 있지만 , AND와F/F를 한꺼번에 순차회로로 생각하여 always문안에 한번에 작성할 수 있습니다.
조합논리회로를 순차논리에 포함
조합논리회로와 순차논리회로의 기술 방법
Shift register
- 병렬 로드(parallel load)가 가능한 시프트 레지스터
'UVM & RTL > Verilog HDL' 카테고리의 다른 글
[7] Verilog HDL D Filp-Flop 실습 (0) | 2022.01.20 |
---|---|
[6] Verilog HDL clock 실습 (0) | 2022.01.20 |
[5] Verilog HDL 모듈, 테스트 벤치 (0) | 2022.01.15 |
[3] Verilog HDL 조합 회로 기술 (0) | 2022.01.15 |
[1] Verilog HDL 논리값 & 자료형 (0) | 2022.01.14 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!