7 / 37 · 개념
슬라이스·연결·반복 연산의 폭
연결된 신호의 전체 폭과 값 보존 조건을 계산하며 데이터 경로를 구성합니다.
내용은 무료로 볼 수 있습니다. 수강 신청하면 학습 기록을 저장할 수 있어요.
연결 연산은 덧셈이 아닙니다
{a,b}는 a의 비트 뒤에 b의 비트를 이어 붙입니다. 폭이 각각 M과 N이면 결과 폭은 M+N입니다. 두 피연산자가 unsignedunsigned 비트열을 음수가 없는 정수로 해석하는 규칙입니다. n비트의 범위는 0부터 2^n−1이며, 같은 비트열의 signed 해석과 다를 수 있습니다. 자세히 보기 비트열이라면 수치적으로는 다음과 같습니다.
a=2'b10, b=3'b101이면 연결 결과는 5'b10101, 즉 21입니다. 산술합 7과는 다른 연산입니다.
a의 비트는 b의 폭만큼 높은 자리로 이동합니다. 연결 연산연결 연산 비트열을 옆으로 이어 붙이는 연산입니다. 결과 폭은 피연산자 폭의 합이며 숫자의 덧셈과는 다릅니다.은 a+b가 아니라 a×2³+b로 읽어야 합니다.
- a = 10: 폭 2비트, 정수 2
- b = 101: 폭 3비트, 정수 5
- {a,b} = 10101: 폭 5비트, 2×8+5=21
폭을 식 옆에 적어 보기
logic [7:0] word;
logic [3:0] upper, lower;
logic [7:0] swapped;
assign upper = word[7:4];
assign lower = word[3:0];
assign swapped = {lower, upper};8'hA3을 입력하면 swapped는 8'h3A입니다. 슬라이스슬라이스 벡터에서 연속된 비트 범위를 선택하는 연산입니다. 선택한 범위가 결과의 폭과 비트 순서를 정합니다. 범위를 하나 틀리면 폭 또는 값이 달라집니다. 부분 선택은 원래 벡터가 signed여도 별도의 unsigned 값으로 취급되는 상황이 있으므로 signed 연산 앞에서 의미를 다시 확인해야 합니다.
부호 확장과 반복 연결
logic signed [3:0] small;
logic signed [7:0] extended;
assign extended = {{4{small[3]}}, small};부호 비트 네 개와 원래 네 비트를 연결하여 총 8비트를 만듭니다. sign extension은 MSBMSB 가장 높은 자릿값을 갖는 비트입니다. 벡터의 선언 방향에 따라 인덱스 번호가 달라지므로 항상 가장 큰 번호라고 가정하면 안 됩니다. 자세히 보기가 1이라고 1을 더하는 산술 연산이 아니라, 해석한 값을 보존하도록 비트 배치를 넓히는 작업입니다.
q[N-2:0]를 사용하는 범용 시프트 회로는 N=1에서 범위가 성립하지 않습니다. 최소 지원 폭을 제한하거나 generate 분기로 N=1을 별도 처리하세요. 매개변수화는 숫자를 변수로 치환하는 것만으로 완성되지 않습니다.
직접 생각해 보기
a는 3비트 101, b는 2비트 11입니다. {a,b}의 폭과 값은 무엇인가요? 이것을 4비트에 저장하면 무엇이 남나요?
해설 보기
폭은 5비트, 비트열은 10111이고 값은 입니다. 4비트에 저장하면 상위 비트를 버려 0111, 즉 7이 남습니다.