1. 조합회로
1-1 기본 컨셉

조합회로 모델링 시 always @ () 구문에서 감시신호 목록에 input 신호들을 모두 포함시켜야 한다. 혹은 * 표시로 간단히 나타낼 수도 있지만 불필요한 리소스가 사용될 수 있어 input들을 직접 기술하는 방식이 권장된다.
if조건문과 case문 사용시 else/ default 를 꼭 기술해줘야 래치가 발생하지 않는다.

코드 작성 시 논리 최적화를 고려해야 한다. 즉, 최소의 게이트 수와 치소 지연경로를 갖는 회로가 합성되도록 해야 한다.
또한 소스코드를 간결하게 모델링하여 가독성과 디버깅을 용이하도록 해야 한다.
1-2 인코더 / 디코더

간단히 인코더는 비트의 압축, 디코더는 비트 압축 해제 이다.
위의 두 예시를 보면, 왼쪽 예시는 일반적인 인코더이고 오른쪽은 우선순위 인코더이다. 최상위 비트부터 0인지 1인지를 비교하여 0일 때 출력을 111부터 000까지 할당하고 있다.

위의 예시는 파라미터를 사용하여 어떻게 NtoM 디코더를 구현하는지에 대한 코드이다. 3to8 디코더 같은 경우는 모든 case를 작성하는 일이 부담스럽지 않지만 NtoM이 크다면 일일이 적기가 쉽지 않다. 이러한 경우 오른쪽과 같이 파라미터 값을 지정하고 always ~ if문을 사용하여 NtoM디코더를 구현할 수 있다.
2. 합성
2-1 기본 컨셉
합성 (synthesis) 이란? 동작적 또는 추상적(abstract) 형태의 논리 기술로 부터 구체적인 논리 구조 또는 회로를 생성 (최적화 포함)
→ synthesis tool 이 정확한 합성을 하기 위해, 그 이전 단계부터 회로를 정확히 모델링하는 것이 중요
- Synthesis –Elaboration 후 회로를 생성하는 과정
- Implementation – FPGA에 Place & Route 하는 과정
2-2 조합회로 모델링 유의사항
※ always block : 조합회로의 입력에 변화가 있을 때 마다 출력이 평가되는 동작 설계 시 사용
- 감지신호 목록 기입
- 좌변 출력변수는 reg 형으로 선언 (실제로 reg가 생성되는 것은 아님)
- if 문에서 else 문 사용
- case 문에서 default 사용
2-3 조합회로 모델링 연습 - comination 회로

8bit comb 회로를 사용하여 모델링 연습을 해본다. 사실 위 코드는 소프트웨어로 처리되고 있는데 이는 하드웨어 설계에 적합하지 않다. 너무 많은 리소스가 사용되기 때문이다.

그림은 합성 후의 회로이기 때문에 SUB MULTI 등의 로직이 최적화되어 나타내어진다.
다음은 comb 모듈의 BW 값을 수정하여 8bit와 16bit comb 회로의 차이를 확인해본다. 컴파일 후 Report Utilization 확인하면 사용된 하드웨어의 크기를 알 수 있다.


두 util 결과를 확인해보면 16bit 회로가 리소스를 더 많이 사용하고 있음을 확인할 수 있다.
'[Harman교육] 베릴로그' 카테고리의 다른 글
| [23.03.22] CPU설계 - Shifter unit (0) | 2023.03.22 |
|---|---|
| [23.03.21] CPU 설계 - ALU unit (0) | 2023.03.21 |
| [23.03.20] CPU 설계 기초 (0) | 2023.03.20 |
| [23.03.17] 무어/ 밀리 모델 (0) | 2023.03.17 |
| [23.03.14] 조합회로와 순차회로 -2 (0) | 2023.03.16 |