FW 심화 과정/[1] HDL, ARM프로세서설계

0620 Verilog Lexical (문법)

천숭이 2022. 6. 20. 19:41

 집적회로의 종류

# ASIC

- 맞춤형 집적회로

- 한 번 제작하면 수정이 불가능

- 동작속도 빠름 / 제작 오래걸림 / 제작 비용 비쌈(대량생산용) 

- 빈 땅 설계

 

# FPGA

- LUT가 있어서 Programmable 하다. -> gate역할

- 재설계 가능하다

- 동작속도 ASIC보다는 느리고 CPU보다는 빠름 / 제작 빠름 / 제작 비용 쌈(소량생산용)

 

■ 아날로그 vs 디지털

# 아날로그 회로

- 잡음에 약하지만 정교하게 표현가능

# 디지털 회로

- 잡음에 강하지만 정교하게 표현하지 못함

 

  Hardware Description Language

# HDL 이란 ?

- 하드웨어 기술언어

- HDL 문법과 문장으로 디지털 회로를 기술할 수 있다

- 무어의 법칙으로 반도차 소자에 집적되는 트랜지스터/게이트 수가 크게 증가하면서 자동화에 대한 니즈가 필요해 개발됨

 

# HDL 장점 / purpose lang과 다른 점

1. 타이밍 (딜레이) 제어 용이

2. bit 레벨에서의 동작을 기술하기 용이

3. 구조 및 Instantiation이 용이

4. 동시 다발적 연산 표현 용이 (Concurrency)

 

 

# HDL 컴파일 과정

System specification -> Algorithm Design -> RTL 디자인(HDL) -> 합성과정을 통한 Schematic Design -> P&R과정을 통한 최적화된 Layout Design -> Fabrication

 

# HDL 해석 팁

명령어 위치에 상관없이 변수들 추적하며 실행되는 흐름대로 해석하기

 

 

 

 


 

 

  Module / Instance

# Module

- 베릴로그의 기본 블럭

- 객체를 만들기 위해 구성된 블록

 

# Instance 

- 모듈을 가지고 찍어낸 object (붕어빵)

- 찍어내는 행위를 Instantiation이라고 한다

 

 Combinational vs Sequential

# 조합회로

- 현재의 입력만이 출력을 결정  (딜레이 포함해서.,)

- 메모리 소자가 없음

- 연산, 조건, 제어 등의 알고리즘을 담당

 

# 순차회로

- 현재의 입력과 메모리에 저장된 값들을 조합해서 출력을 결정함

- 조합회로 + 메모리 소자

- 클럭신호가 있다 

- ex) Latch, F/F

 

 

■ 예약어

많이 쓰이는 예약어 : initial, begin, end, always, posedge, wire, reg 등등

int                a, b, c;

keyword       object

 

■ 수의 표현

진법 : Binary (2) , Decimal (10) , Hexa-decimal (16)

<size>'<진법><수> 

12'habc = 12_1010_1011_1100 처럼 표현 가능

수는 msb lsb 순으로 작성

 

 

 

  reg와 wire      ** 중요! **

# wire

- always 구문 내부의 좌측 변수는 무조건 reg로 선언

- 다른 신호에 의해서 연속적으로 유지되는 Net

- 모든 input / output / inout 은 wire로 선언

 

# reg

- 다른 신호에 의해서 덮어지기 전까지 유지되는 데이터 저장 요소

 

 

 기억소자

- Latch

 상태 변화가 기준

- Flip-Flop

 클럭의 Edge를 사용하는 대표적인 소자, edge 변화가 기준

 

# D Flip-Flop       (delay 파영의 F/F 라서 D)

- reset이 있을 때

 

 

 

 

 

 

 

# 덧셈의 결과 표현

* Nbit Adder는 N+1의 덧셈기가 필요하다 (overflow 방지)*

wire [7:0] a, b;
wire [8:0] s;
assign s = a+b;
// a와 b가 unsigned라면, unsigned로 간주하고 msb 0으로 패딩 후 덧셈 진행  ((
 //Zero Extension
// a와 b가 signed라면,     a와 b의 msb로 패딩 해야하므로
 //   assign s = {a[7], a} + {b[7], b}; 코드 수정
   //Sign Extension

- 덧셈의 결과 표현은 다르지만 로직은 똑같은, 입력만 변형함

# 음수 표현법 복습
비트반전 -> MSB비트 1로 바꾸기(1의보수) -> 1더하기(2의보수) 
ex)
0111 = 7
1011 = 11 (unsigned)
1011 = -8 (signed) 
         = -2^3 + 2^1 + 2^0


<수의 범위>
unsigned : 0000~1111
signed : 1000(-8) ~ 0111(7)

# 비교기 동작방식
- 크기를 비교할대는 내부의 뺄셈기가 작동한다