[MP] Week12
Hardware Description Language
Various Target Chips
- 지금은 amd가 도전을 하고 있지만 전에는 Motorola가 칩을 지배하던 시기가 있었다.
- 빵판에서 회로를 만들 수도 있지만 선이 하나라도 잘못되면 돌아가지 않기 때문에 좋은 하드웨어 시스템을 만들기 힘들다. 집적도가 떨어진다.
- 가장 일반적인 대안은 Programmable Logic Array(PLA 또는 PAL)
- 디지털 시스템을 만들 때 빵판에서 처음부터 하나 하나의 ttl을 이어서 만들기 보다 atl이 있다.
- sum of products에 알맞는 회로가 있다는 것이다.
- 회로 설계를 생산성 있게 하기 위한 다양한 소프트웨어가 EDA에 있다.
Enabling concept
After programming
- 모든 가능한 연결 중에서 원하는 것만 남기는 것: personalization 또는 programming
- 최적화가 되지 않은 코드를 합성한다고 하자.
FPGA
- Field Progammable Gate Array(FPGA): 가속기
- Logic Block = Logic Sell = Logic Element
Various Target Chips -
- HDML은 상위 수준에 명시하는 것이다.
- FPGA는 reconfiguration(재설정)을 가능하게 한다.
- 반면 ASIC은 완전히 고정된 것이다. reconfiguration은 불가능하고 한 번 칩이 나오면 그 칩은 다른 용도로 사용될 수 없다. 바꾸고 싶으면 새로 만드는 수밖에 없다.
- FPGA를 통해 설계한 하드웨어가 ASIC을 위한 중간 단계일 수도 있지만 그 자체로 and product일 수 있다.
Design Flow using HDL
- Design Specification: 어떤 하드웨어든 디자인이 명세되어야 한다. n1, n2가 주어졌을 때 같으면 무엇이 켜지고 이런 것을 자연어에서 시스템 명세로 주어져야 한다.
- Behavior Modeling: 명세하는 과정
- RTL modeling:
- Functional Simulation:
- Logic Synthesis: gate로 합성하는 과정, netlist
- Place & Routing: 여러가지 동일한 것을 FPGA에 어떻게 연결하는 것이 효화적일까 mapping하는 것 EDA 이용 -> 여기까지 Layout을 확정하는 과정
- 원하는 회로를 어떤 식으로 집적할 것인지에 대한 단계가 PG(Pattern Generation) OUT이다.
- 생산 단에 가기 전에 회로가 제대로 동작하는지 확인하기 워한 검토의 과정이 필요하다.
- 우리 수업에서는 Function simulation과 Time Simulation을 하는 과정까지 한다.
Example of Verilog HDL
- Programming Language가 아니라 Description Language다.
- 프로그램을 한다는 것은 메모리에 존재하는 instruction을 one by one fetch해서 순차적으로 수행하는 것을 만드는 것을 programming이라 한다.
- 즉 programming과 구분해야 한다.
- 아무리 C와 비슷하더라도 프로그래밍이 아니다.
- 사람의 논리적인 순차적인 생각을 흉내낼 필요가 없는 본연적으로 하드웨어를 기술하기 위한 언어다.
- C와 HDL을 구분했으면 한다.
- 마치 function처럼 기술을 하는 것처럼 보이지만 구분해야 한다.
- half adder 두 개로 full adder를 만들 수 있다.
다음 강의
-
디자인 명세 : Behavior Modeing, RTL Modeling -> Functional Simulation(기능적으로 옳은지) -> Logic Synthesis(실제 합성) -> Gate Lavel verification(게이트 레벨로 만들어서 합성된 걸로 시뮬레이션하는 것) -> Place & Routing(하드웨어적으로 보드에 맵핑하는 것) -> Post-layout Verification(그 후 입증) -> Pattern Generation OUt(에이징을 위한 설계 단계) -> Fabrication(생산)
- 오늘은 각각의 예제를 설계하는 습관을 들인다. 구글링을 하면 더 좋은 자료를 찾을 수 있을 것이다.
- module로 하드웨어를 명세한다.
- port list: input list, output list
- 프로그램 언어에서는 인자로 들어가는 것을 모두 입력으로 여기지만 module이라는 HDL에서는 명확하게 input과 output을 구분해야 한다.
- reg는 내부 시그널이다.
- 아웃풋이 어떤 벡터면 reg를 같은 크기의 벡터로 정의해야 한다.
- 넘브아키(넘블락킹 ‘<=’) assignment: 동시에 일어나는 치환을 명시할 수 있어야 한다.
- 4개의 full adder를 cascading해서 4비트 adder를 만들 때 full adder instanciation한 게 있었다.
- 모듈 안에서 모듈을 콜할 수 있다.
- always 구문 안에서는 assign을 하지 않지만 밖에서는 써야 한다.
- non blocking assignment는 순차회로에서 사용된다.
- Q = Q « 1과 Q <= Q « 1를 구분해야 한다.
Behavioral Modeling
- 원래는 모든 것을 gate 레벨에서 표현하는 것이 맞다.
- 그럼에도 상위 수준으로 표현할 수 있다.
- 더 알고리즘틱하게 표현하는 것이다.
- Veriloge는 C와 비슷하게 만드려고 노력한 언어다,
- Test Bench: 가상의 모듈 입력값을 인가하는 로직