오브젝트 하드웨어 기술 언어 IT CookBook, VHDL을 이용한 디지털 회로 입문
1 하드웨어 기술 언어의 개요 2 기본 논리회로의 HDL화 3 시뮬레이션 4 논리 합성
Section 02 기본 논리회로의 HDL화 OR회로 NAND회로
Section 02 기본 논리회로의 HDL화 NOR회로 NOT회로
Section 02 기본 논리회로의 HDL화 BUF회로
Section 03 시뮬레이션 테스트 벤치 설정 시뮬레이션(simulation) [흉내내는 것, 모의 실험]이라는 의미로, 여기에서는 회로 동작에 필요한 입력을 주고 이에 따른 출력의 변화를 관찰하는 것 앞 절의 각 엔티티에 입력을 주기 위해 필요한 기술 테스트 벤치 설정 VHDL로 시뮬레이션을 대상 회로에 입력을 주거나 대상 회로의 출력을 관측하기 위한 테스트 벤치(test bench)(또는 테스트 벡터(test vector))를 설정
Section 03 시뮬레이션
Section 03 시뮬레이션 신호 선언 컴포넌트 선언 port 문 signal 문 엔티티에 대한 입출력 선언
Section 03 시뮬레이션 하위층 엔티티의 호출 행 번호 8~11에서 컴포넌트로 선언한 시뮬레이션의 대상 엔티티 [AND_2]를 호출한다. 이것을 컴포넌트 인스턴스(component instance, 부품 실례) [이름에 의한 관련성] 이름에 의한 관련성에서는, 포트명 => 신호명 으로 기술 이 경우 [포트명]은 시뮬레이션의 대상 엔티티 [AND_2]의 입출력을 나타내며, 신호명은 [4.3.2 신호 선언]에서의 신호명을 나타낸다. 리스트 4.12의 행 번호 13~15는 [이름에 의한 관련성]으로 기술 [위치에 의한 관련성] 위치에 의한 관련성에서는, 시뮬레이션의 대상 엔티티 [AND_2]의 port 문에서 기술한 포트 리스트의 포트명의 순서대로 신호명이 대응 엔티티 [AND_2]에서는, 리스트 4.1에 의해 [A→B→OUT_AND2]의 순서로 기술되어 있기 때문에 여기에서는 행 번호 13~15는, U0: AND_2 port map (IN_A, IN_B, OUT_AND_2); 로 기술
Section 03 시뮬레이션 하위층 엔티티로의 입력 파형의 정의 (1) process 문 시뮬레이션을 목적으로 한 테스트 벤치는 architecture 문의 [begin] 뒤에 process 문에 각 신호의 파형을 기술 신호감지 리스트에 신호명을 기술하면, 그 신호 값이 바뀌었을 때 process 문의 [begin] 뒤에 기술한 sequential 문(순차 처리문)이 실행 그러나, 시뮬레이션을 목적으로 한 테스트 벤치의 아키텍처에서는 시뮬레이션의 개시와 동시에 sequential 문을 실행하면 되기 때문에 신호감지 리스트에는 아무것도 기술하지 않음 이 process 문은 회로 기술에서도 사용하는데, 그 때에는 신호감지 리스트가 중요한 의미를 갖는다. process(신호감지 리스트) begin sequential 문 구문 정의에서는 프로세스 문에 해당된다 end process; (2) wait 문 하층 엔티티로의 입력 파형에 대해 기술 행 번호 18~22가 그림 4.19의 구문 정의에 나타낸 sequential 문으로, 위에서부터 차례대로 대상 엔티티의 입력 파형의 변화를 기술 여기서의 시뮬레이션은 [2AND] 회로이며 입력은 [IN_A]와 [IN_B] 이 2개의 신호를, ·제일 처음에는 [IN_A]='0', [IN_B]='0' ·100[ns] 후에 [IN_A]='1', [IN_B]='0' ·200[ns] 후에 [IN_A]='0', [IN_B]='1' ·300[ns] 후에 [IN_A]='1', [IN_B]='1‘ [IN_A]와 [IN_B]를 제어하려면, [begin] 직후에 [IN_A <= '0'; IN_B <= '0';] 100[ns] 경과 후에 [IN_A <= '1';] 다시, 100[ns] 경과 후에 [IN_A <= '0'; IN_B <= '1';] 또 다시, 100[ns] 경과 후에 [IN_A <= '1';] 이 시간을 제어하는 것이 wait 문 wait문으로 sequential 문의 실행 개시를 늦출 수가 있다.
Section 03 시뮬레이션
Section 03 시뮬레이션
Section 03 시뮬레이션 2AND 회로의 시뮬레이션 결과 입력의 변화 시뮬레이션 결과를 타임 차트로 표시하고 좌측에는 엔티티명과 신호명을 표시 [2AND] 회로의 시뮬레이션에서는 파형 표시를 위에서부터 입력 [IN_A]와 [IN_B], 출력 [OUT_AND_2]가 되도록 지정 이 신호는 모두 엔티티 [AND2_TEST]의 signal 문에서 지정한 것이므로 [/and2_test/in_a] 형식으로 표시 [4.3.5 하위층 모듈로의 입력의 파형 정의]와 대응하고 있는지 확인해 보자. 신호 변화의 기대값 제일 처음에는 [IN_A]='0', [IN_B]='0‘ 100[ns] 후에 [IN_A]='1', [IN_B]='0‘ 200[ns] 후에 [IN_A]='0', [IN_B]='1‘ 300[ns] 후에 [IN_A]='1', [IN_B]='1‘ 시뮬레이션 결과에는, 개시 시간을 t0, 100[ns] 경과 후를 t1, 200[ns] 경과 후를 t2라고 명명 시뮬레이션 개시 시간 t0에서는 [IN_A]='0', [IN_B]='0' 100[ns] 경과 후인 t1에서는 [IN_A]='1', [IN_B]='0' 200[ns] 경과 후인 t2에서는 [IN_A]='0', [IN_B]='1' 300[ns] 경과 후인 t3에서는 [IN_A]='1', [IN_B]='1' 이 되어 앞의 신호 변화의 기대값과 일치한다.
Section 03 시뮬레이션
Section 03 시뮬레이션 출력의 변화 Add Source 파형 표시 방법 시뮬레이션 실행 시간의 지정 입력에 따라 변화하는 출력을 조사 이번에는 [2AND] 회로의 시뮬레이션이므로 입력 [IN_A]와 [IN_B]가 둘 다 '1'일 때, 출력 [OUT_AND_2]가 '1'이 될 것 그림 4.21의 t3부터 t4사이를 나타내며 [2AND] 회로의 올바른 동작을 확인 Add Source ISE Web PACK의 프로젝트를 신규 작성할 때는 VHDL을 기술한 [LST4_13.VHD]와 [LST4_14.VHD]를 Add Source 파형 표시 방법 [ModelSim]에서는 Objects 윈도우에서 Wave 윈도우에 필요한 신호를 drag&drop 하거나, Wave 윈도우에서 drag&drop 함으로써 임의의 신호를 임의의 순서로 표시 시뮬레이션 실행 시간의 지정 시뮬레이션에서는 실행 시간을 지정 이번에는 개시부터 최대 300[ns] 후에 입력을 변화하고 있기 때문에 시뮬레이션에도 최소한 300[ns]의 시간이 필요 그림 4.21에서는 이를 고려해서 500[ns] 동안 실행
Section 03 시뮬레이션 그 밖의 회로의 시뮬레이션 결과
Section 03 시뮬레이션
Section 03 시뮬레이션 그 밖의 회로의 시뮬레이션 결과
Section 04 논리합성 [시뮬레이션 결과]로부터 기술한 내용의 타당성을 확인할 수는 있어도, 그것이 [논리 합성 툴]에 의해 올바르게 논리 합성된다는 보장은 할 수 없음 RTL(Register Transfer Level): 회로 구성의 상세 내용을 고려해서 기술하는 것 동작 레벨(behavior level): 회로의 동작이나 기능을 고려해서 기술하는 것 동작 레벨 한 사람의 엔지니어로는 설계가 불가능한 대규모 LSI의 개발을 하는 경우 LSI의 회로를 적당한 기능별로 또는 블록 단위로 분할해서 여러 멤버가 동시적으로 병행 작업을 한다면, 설계 기간을 단축 가능 회로의 블록 분할에서는 블록별로 [동작 레벨]을 기술해서 타당성을 검증 여기에서는 블록 내부의 회로에 영향을 받지 않고 해당 블록이 의도했던 대로 동작하는 것을 검증할 수 있으면 되기 때문에, 논리 합성의 결과는 문제가 되지 않음 [동작 레벨]로 기술하고 이를 시뮬레이션하고, 블록 분할의 타당성을 확인한 후 각 담당자가 각각의 블록에 대해 회로설계를 시작 전체에서 시작하여 세부로 점차적으로 설계를 진행시키는 방식을 [하향적 설계(top-down design)] 어떤 블록의 작업이 극단적으로 늦어지면 그 부분은 (1)의 [동작 레벨]을 사용하고, 그 이외의 블록은 설계를 진행시킨 [RTL]을 사용하여 전체를 시뮬레이션하면 전체에 미치는 영향을 줄일 수 있음 [동작 레벨]과 [RTL]이 섞인 시뮬레이션을 혼합 레벨 시뮬레이션(mix level simulation)