while(1) work();
반응형
본 게시글은 KUEE 정보공개 프로젝트에 포함된 글입니다.
https://blog.youhogeon.com/65

본 자료의 저작권은 모두 저에게 있으며
학업에 참고 자료로만 사용하시길 바랍니다.
부득이하게 인용해야 하는 경우 반드시 출처(KUEE 정보공개 프로젝트)와 링크를 남겨주시길 바랍니다.

src.zip
0.02MB
6.pdf
1.43MB

 

VLSI 설계 및 실험보고서 LAB 06 # MBIST 1. 개요 MBIST는 Memory-Built-In-Self-Test의 약자로, 메모리의 정상 동작을 확인하기 위한 회로이다. 본 실험에서는 256x44bit 메모리를 이용해 MBIST를 설계하며, 아래와 같은 방식으로 메모리를 테스트한다. 1) 메모리에 값 저장 / NCE = 0, NWRT = 0, D_IN = 0000...0000 2) 메모리에서 값 읽기 / NCE = 0, NWRT = 1, (expected) D_OUT = 0000...0000 3) 메모리에 값 저장 / NCE = 0, NWRT = 0, D_IN = 1111...1111 4) 메모리에서 값 읽기 / NCE = 0, NWRT = 1, (expected) D_OUT = 1111...1111 5) 메모리에 값 저장 / NCE = 0, NWRT = 0, D_IN = 1010...1010 6) 메모리에서 값 읽기 / NCE = 0, NWRT = 1, (expected) D_OUT = 1010...1010 7) 메모리에 값 저장 / NCE = 0, NWRT = 0, D_IN = 0101...0101 8) 메모리에서 값 읽기 / NCE = 0, NWRT = 1, (expected) D_OUT = 0101...0101 2. Expected Timing Diagram 위 그림은 [1. 개요]에서 3단계까지 회로를 동작시켰을 때 예상되는 Timing diagram이다. MBIST_start 신호를 줌으로써, MBIST는 NCE 값을 0으로 설정해 메모리를 동작시킨다. 이후 11bit counter를 클럭에 따라 동작시키며 MSB 3bit는 state_counter로, LSB 8bit는 ADDR로 사용한다. 특히 state_counter의 LSB는 메모리에 NWRT 신호로 사용한다. state_counter의 LSB가 0인 구간(NWRT가 0인 구간) 동안 메모리의 각 addr에는 DATA_in 값이 저장되며, state_counter의 MSB가 1인 구간(NWRT가 1인 구간) 동안 메모리의 addr으로부터 불러온 데이터가 DATA_out으로 출력된다. 3. Timing Diagram in Simulate 구현한 MBIST의 동작을 테스트하기 위해 테스트벤치 코드를 이용해 파형을 확인하였다. 위에서 예측한 정상적인 MBIST 파형과 시뮬레이터 결과로 나온 파형이 일치함을 확인할 수 있었다. NWRT가 0으로 주어지는동안 addr는 0부터 255(1111 1111)까지 순차적으로 증가하며 DIN값(0000...0000)을 메모리에 저장하였다. 이는 NWRT를 1으로 인가하고, addr을 0부터 255까지 증가시키며 메모리에 저장된 값을 비교함으로써, 정상 동작됨을 확인할 수 있었다. 위 사진을 통해 각각 NWRT가 0일때와 NWRT가 1일때의 파형을 확인할 수 있다. DIN값이 1111...1111일 때, 1010...1010일 때, 0101...0101일 때의 파형도 아래와 같이 정상적으로 출력되었다. DIN값이 1111...1111인 경우 파형은 위와 같았다. DIN값이 1010...1010인 경우 파형은 위와 같았다. DIN값이 0101...0101인 경우 파형은 위와 같았다. 더불어, 네 가지 DIN값에 따른 시험이 종료된 경우 MBIST_done값이 1로 바뀌도록 설계하였다. 이 때의 파형은 위와 같았다. # Memory control with 22x22 bit multiplier 1. 개요 본 실험에서는, 256x44bit 메모리와, 지난 시간에 구현한 22x22bit carry save multiplier(SRCS in the last stage)를 이용하여 메모리에 있는 값을 불러와 곱한 뒤 다시 메모리에 저장하는 회로를 구현한다. 클럭에 따른 정확한 동작 순서는 아래와 같다. (1클럭) 메모리에서 피연산자 읽기 / NCE = 0, NWRT = 1 (2클럭 ~ 3클럭) multiplier 연산(2클럭 소요) / NCE = 1 (4클럭) 메모리에 값 저장 / NCE = 0, NWRT = 0, D_IN = (계산된 결과값) 2. Expected Timing Diagram 위 그림은 회로를 동작시켰을 때 예상되는 timing diagram이다. NCE를 0, NWRT를 1로 설정함으로써 메모리의 addr에 저장된 피연산자를 불러올 수 있고, 피연산자들은 multiplier에 의해 곱연산되어 Mul_out으로 출력된다. 이후 NCE를 다시 0, NWRT를 0으로 설정하여 Mul_out을 다시 메모리의 addr 에 저장하는 작업을 반복하면 메모리에 있던 모든 피연산자 데이터들이 계산된 결과 데이터들로 바뀌게 된다. 3. Timing Diagram in Simulate 본 실험에서는 256개의 피연산자쌍을 미리 메모리에 넣은 뒤, [1. 개요]에서 설명한 클럭에 따른 동작을 256번 반복해 각 피연산자쌍의 계산 결과가 메모리에 저장되도록 하였다. 이후 메모리에 있는 값을 불러와, 주어진 테스트 벡터 데이터와 비교하였다. [1. 개요]에서 설명한 바와 같이 총 네 클럭에 걸쳐 하나의 피연산자쌍을 메모리에서 불러와 계산하고 다시 메모리에 결과값을 집어넣는 과정을 256번 반복하도록 구현하였다. 구현한 코드의 동작을 테스트하기 위해 테스트벤치 코드를 이용해 파형을 확인한 결과 위 그림과 같았다. 그림에 표시한 바와 같이 NCE, NWRT값이 적절히 조절되고 있음을 확인할 수 있었다. [로드-계산-저장] 과정을 256번 반복한 뒤, NCE값을 0, NWRT값을 1로 고정하였다. 더불어, addr 값(그림에서 {RA, CA})을 순차적으로 증가시키며 메모리에 저장된 계산 결과를 불러와 테스트 벡터와 비교하였다. 그 결과 메모리에 저장된 모든 데이터가 테스트 벡터 데이터와 일치해, 코드가(회로가) 정상적으로 동작함을 확인할 수 있었다.

반응형
profile

while(1) work();

@유호건

❤️댓글은 언제나 힘이 됩니다❤️ 궁금한 점이나 잘못된 내용이 있다면 댓글로 남겨주세요.

검색 태그