728x90
반응형
- blocking , non-blocking 할당
- non-blocking 할당
- 코드 작성시 <= 기호 사용
- 순차 논리 회로 구현
- 할당 직후 업데이트 X
- 할당 스케줄링을 사용하여 값을 업데이트
- blocking 할당
- 코드 작성시 = 기호 사용
- continuous assignment 사용 시 항상 blocking 할당만 사용 가능
- 조합 논리 회로 구현
- 이해하기 쉽다.
- 신호 할당 시 코드 줄이 실행되는 즉시 신호가 값을 업데이
- procedural 블록에서는 두 가지 유형 모두 사용 가능.
- non-blocking 할당
Assignment Scheduling
- non-block 할당을 통해 코딩시 코드는 순차적으로 실행.
- But, 할당하는 신호는 이러한 방식으로 업데이트 X
- 트위스트 링 카운터 회로 예시
- 코드
always @(posedge clock) begin
q_dff1 <= ~q_dff2;
q_dff2 <= q_dff1;
end
728x90
- 신호가 즉시 업데이트 된다면?
- 초기값 둘 다 0b 가정
- 2번째 줄에서 q_dff1 에 1b 업데이트
- 3번째 줄에서 곧바로 q_dff1이 1b가 되어 q_dff2도 1b가 됨.
- 이 문제를 해결하기 위해
- non-blocking 할당은 scheduled 할당을 사용.
- 신호 변경은 할당 직후가 아닌 미래에 이루어지도록 예약.
- 일반적으로 시뮬레이션 주기가 끝날 때 신호는 값을 업데이트.
- 신호 변경은 할당 직후가 아닌 미래에 이루어지도록 예약.
- non-blocking 할당은 scheduled 할당을 사용.
- 예약 할당의 이해를 위해 이중 플립플롭 회로를 보자.
- 코드
always @(posedge clock) begin
q_dff1 <= q_dff2;
q_dff2 <= q_dff1;
end
- 먼저 q_dff1에 값 입력.
- 이후 원래 q_dff1의 값을 q_dff2에 입력.
- Q(t)와 Q(t+1)의 관계.
- 항상 Q(t)와 짝을 이루어야 함.
- 디지털공학(2) 중간고사 틀린 내용
- 한 사이클이 끝나고, 신호에 값 업데이트
- 이후 동작 반복.
Synthesis Example
- 두 할당 비교를 위해, 트위스트 링 카운터 회로를 다시 모델링
always @(posedge clock) begin
q_dff1 <= ~q_dff2;
q_dff2 <= q_dff1;
end
- vivado 등을 통해 회로도를 볼 수 있다.
반응형
- 2개의 FF, NOT gate는 LUT1을 사용해 구현
- blocking 할당을 사용할 경우
always @(posedge clock) begin
q_dff1 = ~q_dff2;
q_dff2 = q_dff1;
end
- 두 번째 FF 제거
- blocking 할당은 바로 신호를 업데이트
- 즉, 두 번째 ff은 필요가 없음.
- blocking 할당은
- 조합 논리 회로 모델링 시에만 사용.
- 코드 이해, 유지 관리 목적
728x90
반응형
'Verilog HDL > 1. Verilog HDL Basic (문법)' 카테고리의 다른 글
[Using the Always Block] 4. 예제 풀이 (0) | 2024.01.10 |
---|---|
[Using the Always Block] 3. Always Block 과 조합 회로 (0) | 2024.01.10 |
[Using the Always Block] 1. Always block 이란? (1) | 2024.01.10 |
[Verilog Tutorial] level-4 Using Continuous Assignment 모음 (0) | 2024.01.10 |
[Using Continuous Assignment] 3. 예제 풀이 (0) | 2024.01.10 |