2013-04-30 2 views
3

나는 다음과 같은 작업을 수행합니다 몇 가지 코드를 찾고 있어요는 :'&`연산자가 표준 논리 벡터에 대해 무엇을합니까?

[20 19 18 ... 3 2 1] 

하지만 내가 이해하지 못하는 것은 &가 무엇이다 :

signal1 : std_logic 
vector1 : std_logic_vector 

vector1 <= vector1(20 downto 1) & signal1; 

나는 vector1(20 downto 1)는 다음과 같은 생산한다고 가정 그것. signal10이고 signal11 인 경우 벡터가 생성되면 0을 반환합니까?

답변

5

&은 연결 연산자가 아닙니다. 더 작은 배열 또는 요소 (비트, 문자)로 더 큰 배열 (벡터, 문자열)을 만듭니다.

vector1(20 downto 1)vector1에서 20 비트 슬라이스를 취합니다 : 에 signal1이 추가되어 새로운 21 비트 벡터가 생성됩니다. 이것은 다음 21 비트 여야 I 가정 vector1<=에 의해 할당 (또는 당신은 컴파일 타임 오류가있다!)되어

signal vector1 : std_logic_vector(21 downto 1); 

는 다음이 시프트 레지스터로 vector1 선언

경우; 그러한 모든 연산은 signal1에서 새로운 LSB로 1 비트 씩 왼쪽 쉬프트가됩니다.

+0

아하 네 말이 맞아. 그것은 실제로 지연입니다 (제 생각에). 그것은 다음과 같은 것입니다 :'vector1 <= vector1 (DelayVal downto 1) & signal1;'본질적으로'signal1'을 DelayVal 클럭 사이클 수만큼 지연시킵니다. – KronoS

+0

빙고 : 이것은 시프트 레지스터에 대한 일반적인 용도 중 하나입니다. 보너스 포인트의 경우, vector1의 길이는 DelayVal의 관점에서 선언되어야합니다. –

관련 문제