320 likes | 1.04k Views
쉬프트 레지스터 용어. Shift Register: N-bit 데이터를 직렬 혹은 병렬로 N-bit 레지스터에 이동 저장하는 동기식 순차회로 . Left Shift: 쉬프트 레지스터에서의 데이터의 이동이 오른쪽에서 왼쪽으로 (MSB 방향으로 ) 이동하는 동작으로 한 클록 펄스마다 한 비트씩 이동한다 . Right Shift: 쉬프트 레지스터에서의 데이터의 이동이 왼쪽에서 오른쪽으로 (LSB 방향으로 ) 이동하는 동작으로 한 클록 펄스마다 한 비트씩 이동한다 .
E N D
쉬프트 레지스터 용어 • Shift Register: N-bit 데이터를 직렬 혹은 병렬로 N-bit 레지스터에 이동 저장하는 동기식 순차회로. • Left Shift: 쉬프트 레지스터에서의 데이터의 이동이 오른쪽에서 왼쪽으로 (MSB방향으로) 이동하는 동작으로 한 클록 펄스마다 한 비트씩 이동한다. • Right Shift: 쉬프트 레지스터에서의 데이터의 이동이 왼쪽에서 오른쪽으로 (LSB방향으로) 이동하는 동작으로 한 클록 펄스마다 한 비트씩 이동한다. • Rotation: 마지막 플립플립의 출력이 처음 플립플롭의 입력과 연결되어 직렬 쉬프트(오른쪽 또는 왼쪽)하는 동작으로, 데이터가 계속적으로 순환한다. Fig. 9.57
Bi-SR shift_left shift_right PL-SR
유니버셜 쉬프트 레지스터 01 11 10 00
유니버셜 쉬프트 레지스터의 시뮬레이션 sht_right sht_left par_load
쉬프트 레지스터 VHDL • Structured VHDL Design • 내부 신호들을 이용하여 미리 설계된 컴포넌트들을 연결시키는 VHDL 설계기법. • LSR, RSR과 같은 상이한 형태를 구성하기 위해 DFF primitive들을 사용한다. • DFF Primitive Port Map은 D, CLK, Q이다. • DataFlow Design • 입력과 출력사이의 관계를 정의하기 위해 부울식을 사용하는 VHDL 설계 접근방법. • Entity는 알테라 라이브러리가 필요 없는 것을 제외하고는 구조적 접근방법과 동일하다. • 레지스터 Qi는 여전히 ‘Buffer’로 선언된다. • Behavioral design • 설계를 행위적으로 기술하는 VHDL 설계 기법.
Structured VHDL I (BUFFER 사용)
Structured VHDL II (signal 사용)
Dataflow VHDL concurrent
Generic Width Shift Register • VHDL 컴포넌트의 엔티티 선언에서의 Generic 절(clause)은 컴포넌트가 사례화될 때 규정될 수 있는 파라미터들을 열거한다. • 변수 ‘Width’를 규정하기 위해, 엔티티내의 Generic 절을 사용하라. 일반적인 형식은 GENERIC(Clause := Value). • 4-Bit 쉬프트 레지스터에 대해서는, GENERIC(Width: Positive := 4).
GENERIC절을 사용한 8-bit Shit Right 레지스터 (4-bit SRG를 사례화)
8-bit Universal SRG CONV_STD_LOGIC_VECTOR(value, number_of_bits) 다른 표현으로는 q <= (others => ‘0’); -- q = 00000000; -- aggregate q <= (‘0’, ‘1’ others => ‘0’); -- q = 01000000
16-bit Universal SRG (8-bit universal SRG를 사례화)
LPM 쉬프트 레지스터 • lpm_shiftreg라고 불리는 프로그램이 가능한 LPM 쉬프트 레지스터의 사용을 허용한다. • LPM_WIDTH, LPM_DIRECTION과 같은 여러 가지 옵션 파라미터들을 가지고 있다. (표 9.16 참조) • 설계 접근방법은 구조적 VHDL 방법으로 설계한 카운터와 유사하다.
8-bit LPM 쉬프트 레지스터의 시뮬레이션(Shift left) Buried nodes
8-bit LPM SRG(shift left, pl, aclr) s q_out(7)과 serial_out은 동일
쉬프트 레지스터 카운터(Ring Counters) • 기본적인 링 카운터는 피드백 루프를 가진 D-FF으로 구성된다. • 리셋이나 프리셋을 사용하여 초기 데이터가 쉬프트 레지스터로 로드된다. • 카운터는 “1000”또는 “0111”의 로딩 값에 따라서 1 또는 0이 순환한다. • 링 카운터의 모듈러스는 고유상태의 최대 값으로 정의된다. • 모듈러스는 초기 로드 값에 의존한다: {1000, 0100, 0010, 0001} = Mod4, {1010, 0101} = Mod2. • 일반적으로 N개 플립플롭으로 구성되는 링 카운터는 N-상태를 가진다.(이진 카운터의2N과는 다르다.) • 디코딩 회로가 필요 없다(장점).
쉬프트 레지스터 카운터(Johnson Counters) • Q0가 아닌 !Q0(Complement)가 D3에 피드백 되는 점을 제외하고는 링 카운터와 동일하다. • 데이터가 보수 혹은 “twist”되므로 “Twisted Ring Counter”라 불린다. • 일반적으로 카운터는 클리어 동작에 의해 “0000”으로 초기 화 된다. • 일반적으로 링 카운터보다 더 많은 상태를 가진다. • 카운터의 진행순서= {0000, 1000, 1100, 1110, 1111, 0111, 0011, 0001}. • N-비트 존슨 카운터의 최대 모듈러스는 2N이다. • 카운터 디코딩을 위해 단지 2-input AND(or NAND) 게이트가 요구된다. • (표 9.18 & 9.19).
Summary • Counter는 behavioral description이나 LPM 에서 컴포넌트를 사용하는 • Structural description으로 설계될 수 있다. • Behavioral counter design은 process 문을 사용한다. 프로세서 문 내에 • if문은 클럭 이벤트나 동기/비동기 입력들을 감지한다. • (clk’EVENT and clk =‘1’) • Variable는 :=연산자로 할당한다. • 비동기 입력은 process의 sensitivity list내에 포함되고 클럭보다 먼저 • 평가된다. • 동기입력은 process의 sensitivity list내에 포함되지 않고 클럭보다 나중에 평가된다. • VHDL component는 컴포넌트가 사례화 될 때 규정되는 parameter를 가지고 생성될 수 있다. 이들 parameter들은 component entity 선언에서의 GENERIC 절에서 열거된다.