Ÿ 실습 목표 - 이미지를 저장하는 형식으로 흔히 사용되는 bmp, jpg, gif 등의 파일은 이미지의 픽셀값과 더불어 이미지 크기나 사용자 정보 등을 포함할뿐더러 이미지를 압축하여 저장한다. 이미지 압축을 하면 파일 크기가 작아지는 장점이 있지만 압축률을 높이면 이미지 품질은 떨어지는 단점이 있다. - 이미지의 픽셀값을 그대로 표현하는 raw 형식은 이미지 압축을 않으므로 원본 이미지를 손실없이 그대로 가지므로 다 큰 용량을 가진다. - 본 실습은 수평, 수직 혹은 대각선으로 Shading 된 이미지를 자동 생성하고 raw 형식 파일에저장하는 프로그램을 작성한다.Ÿ raw 파일 형식 - 본 실습에서 사용하는 raw 파일은 픽셀값이 8비트이고 행과 열의 크기는 사용자가 임의로 결정한다. 이미지 픽셀값들이 나열되는 순서는 아래 그림과 같다. 10x10 크기의 이미지의 경우 좌 상단이 원점이 된다. <중 략>- raw 파일에는 총 100개의 8비트 픽셀값이 나열되는데 0번 행에서 0~9번 열의 픽셀값이 나열되고, 다음으로 1번 행에서 0~9번 열의 픽셀값이 순자적으로 나열되고, 마지막 9번 행까지 동일한 규칙으로 픽셀값이 아래와 같이 나열된다.(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (0,6), (0,7), (0,8), (0,9), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (1,7), (1,8), (1,9), ... (8,0), (8,1), (8,2), (8,3), (8,4), (8,5), (8,6), (8,7), (8,8), (8,9), (9,0), (9,1), (9,2), (9,3), (9,4), (9,5), (9,6), (9,7), (9,8), (9,9)Ÿ raw 파일 뷰어 - 프리웨어로 공개된 ‘ImagePro’ 라는 프로그램을 이용하여 raw 파일에 저장된 이미지를 그림으로 화면에 표현한다.
1. Bingo Game 회로의 사양 설계 사양 - Bingo Game 회로는 숫자 맞추기 게임을 수행하는 회로로서 사용자가 0~254 사이의 정수값을 입력하면 회로는 추측값을 제시하면서 사용자가 입력한 목표값과 비교하여 크거나 작음을 판단 하면서 다음 추측값을 제시하는 과정을 반복하면서 최종적으로 사용자가 제시한 정수값을 스스 로 찾는 회로이다.- Bingo Game 회로는 전체 동작을 제어하는 컨트롤러와 추측값을 계산하는 데이터 패스로 이루어 진다. - 전체 회로의 구조는 아래 그림과 같으며 다음의 순서로 동작한다. * 리셋이 활성화 되면 레지스터 reg8bset는 8비트 최대값 255로, 레지스터 reg8b는 0으로 초기 화 된다. 레지스터 reg8bset는 계산 중에는 회로 추측값의 최대값이 저장되고, 반대로 레지 스터 reg8b는 계산 중에는 회로 추측값의 최소값이 저장된다. * 신호 start=1이 되면 사용자 목표값, targetv를 입력 받아 레지스터에 저장한다..
1. Processes always_comb 구문은 조합논리회로를 구현하는데 always 구문과 아래와 같은 차이점 이 있다. - 감응 목록은 사용자가 정의하지 않고 시스템이 자동으로 추출한다. - 대입문 왼편에 사용된 변수는 다른 process 구문에서 쓰기에 사용될 수 없다. -시뮬레이션 시간 0 에 모든 initial 과 always 구문이 실행된 후에 한번 실행된다. always_comb 구문은 always @* 구문과 아래와 같은 차이점이 있다. - always_comb 구문은 시간 0 에 자동으로 한번 실행되지만 always @* 구문은 감응 목록에 이벤트가 발생할 때까지 기다린다. - always_comb 구문은 function 안 내부 신호의 변화에도 감응하지만 always @* 구 문은 function 의 매개 변수의 변화에만 감응한다.
1. Procedural Statements Unique if 구문은 if…else…if 에 명시된 일련의 조건들이 서로 중복되는 경우가 없음을 보장해야 한다. 만일 조건이 중복되는 경우가 발생하거나 참이 되는 조건이 하나도 없 는데 else 구문이 없으면 warning 을 발생한다. 아래 예제에서 변수 a 의 값을 3 가지 경우로 구분하고 있다. 변수 a 가 0 이거나 1 인 경우, 2 인 경우, 4 인 경우로 구분된다. 3 가지 조건을 모두 만족하지 않는 경우에 대한 else 구문이 없기 때문에 변수 a 가 3, 5, 6, 7 이면 warning 을 발생한다. bit [2:0] a; unique if ((a == 0) || (a == 1)) $display("0 or 1"); else if (a == 2) $display("2"); else if (a == 4) $display("4");
1. Coverage 커버리지 는 회로를 구성하는 요소들 중에서 시뮬레이션에 의해 테스트벤치가 기능을 검증하는 정도를 퍼센트로 나타내는 척도이다. 커버리지 는 크게 2 가지로 구분할 수 있는데 하나는 HDL 코드가 실행되는 정도를 시뮬레이션으로 자동으로 추출되는 코드 커버리지 와 설계자가 회로의 기능을 기술한대로 동작이 실행되는지 시뮬레이션으로 검출하는 기능 커버리지 가 있다. 후자가 본 장에서 다루는 주제이다. 검증 모델을 설계하여 기능 커버리지 코드를 기술하기 위한 설계자의 노력이 더 필요 하지만 정형화된 검증 모델을 제시하기 때문에 시뮬레이션 툴을 이용한 커버리지 검사 가 가능하며, 대용량 회로의 테스트를 용이하게 진행할 수 있으며, 테스트벤치의 재사 용이 가능한 장점을 제공한다. covergro up 커버리지 모델은 키워드 ‘covergroup‘ 으로 설계자가 기술해야 한다. 클래스와 같이 한 번 정의하면 new() 생성자를 이용하여 인스턴스를 만들어 사용한다.