맘스터치보단파파이스 2024. 5. 9. 09:36

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
GATE 만드는중.

verilong code  --> synthesis 합성 --> netlist (회로) --> implemention (FPGA에 배치) -->FPGA에 맞는배치회로 
논리              -->                             물리
성질이 바뀌어버린다. 코드가 하드웨어화. 

--> bitstream --> FPGA 회로 파일  oooo.bit  --> FPGA Download.


설계사양 결정 : What chip , size, 전력... 

RTL 모델링 :  verilog 코딩

RTL --> 검증 --> RTL --> 검증  // 웨이퍼에 찍기 전 까지 계속 검증.

RTL 시뮬레이션 ( 기능 검증) : system verilog 

---------------Front end

virtuoso FullcostumSOC 했던 AUTO P&R : 레이아웃 설계. 웨이퍼에 회로그리는거
PCB에 그리고나면 거버파일 : PG 데이터
장비에 PG데이터 넣으면 마스크- 웨이퍼 공정 하고나서 칩 생성.

---------------Back end

웨이퍼에 칩 한개를 die chip이라고 한다.


배우는 부분 : 설계~ RTL시뮬레이션

수율 : 웨이퍼에 정상인 칩이 몇%인가 정상chip / Total chip : 공정기술


////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
test_bench, simulation 해보는중.

모듈 : 함수같지만 함수랑은 다르다.
module ~ endmodule



module 이름(port list);
회로설계 : 
1. assign문을 이용한 continuous assignment 연속 할당문
2. 정의된 Gate 회로 이용. primitive 회로 이용.
3. 논리를 이용하여 코드 always문 안에서 수행.

-dataflow level  : assign
-Gate level : 모듈( output, in1 ....)
-behavioral level :always


assign y0 = x0 & x1; 
 = : 연결한다 

moudle tb_gate : port 없다.

gate test_bench  : instance 실체화 --> tb_gate 안에

reg : 메모리공간
wire : 저장기능 X

initial begin  
end : {  ~  }
verilog의 중괄호는 의미가 다르다.
전원이 들어가면 begin부터 시작한다.
#00 : 딜레이 없이 x1, x0에 입력
#10 : 10ms 뒤에 입력.

$finish : 시뮬레이션 끝.
출력값을 wire로 연결하고 wire값을 확인한다.

덧셈과 오버플로우
올림까지 세개씩 더하는 상황.
HalfAdder : carry in이 없음.
FullAdder : carriy in 값 처리해줌

Half + Half = Full 로 표현 가능. Sum 선과 cin 추가선 연결 필요

instance : 실체화