산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> verilog

Verilog 스칼라와 벡터: 비트 선택, 부분 선택, 벡터 연산 마스터

Verilog는 단일 비트(스칼라)와 비트 그룹(벡터)을 모두 표현해야 합니다. 플립플롭은 1비트지만 16비트 레지스터는 16비트를 저장합니다.

스칼라 vs 벡터 선언

wire o_nor;           // 1비트 스칼라 넷
wire [7:0] o_flop;    // 8비트 벡터 넷
reg  parity;          // 1비트 스칼라 변수
reg  [31:0] addr;     // 32비트 벡터 변수 (주소 저장용)

MSB(최상위 비트)는 좌측, LSB(최하위 비트)는 우측에 표기. 상수 표현식만 허용되며 변수 사용 불가. 음수 인덱스도 허용.

비트 선택 (Bit-Select)

벡터의 개별 비트에 접근: vec[index]. 범위 초과나 x/z 인덱스면 x 반환.

reg [7:0] addr;
addr[0] = 1;   // 비트 0에 1 할당
addr[3] = 0;   // 비트 3에 0 할당
addr[8] = 1;   // 불법: 8번 비트 없음

부분 선택 (Part-Select)

연속된 비트 범위 선택. 두 가지 형태:

module des;
    reg [31:0] data;
    int i;
    initial begin
        data = 32'hFACE_CAFE;
        for (i = 0; i < 4; i++) begin
            $display("data[8*%0d +: 8] = 0x%0h", i, data[8*i +: 8]);
        end
    end
endmodule
// 출력:
// data[8*0 +: 8] = 0xfe  (data[7:0])
// data[8*1 +: 8] = 0xca  (data[15:8])
// data[8*2 +: 8] = 0xce  (data[23:16])
// data[8*3 +: 8] = 0xfa  (data[31:24])

자주 하는 실수

module tb;
    reg [15:0] data;
    initial begin
        $display("data[0:9] = 0x%0h", data[0:9]);  // 에러: MSB:LSB 순서 위반 (LSB:MSB로 썼음)
    end
endmodule

부분 선택 시 반드시 [MSB:LSB] 순서(좌측이 큰 값)를 지켜야 합니다.

요약

구분문법용도
비트 선택vec[idx]단일 비트 읽기/쓰기
상수 부분 선택vec[msb:lsb]고정 범위 비트 슬라이스
인덱스 부분 선택 (+:)vec[start +: width]루프 내 동적 슬라이스 (상향)
인덱스 부분 선택 (-:)vec[start -: width]루프 내 동적 슬라이스 (하향)

verilog

  1. 버릴로그(Verilog) 입문: 디지털 회로 설계를 위한 하드웨어 기술 언어
  2. Verilog 결합(Concatenation) & 복제(Replication) 연산자 실전 가이드
  3. Verilog 할당문 이해: 유형, 문법, 모범 사례
  4. Verilog 차단 vs 비차단 할당: 핵심 차이점 완벽 이해
  5. Verilog 함수 마스터하기: 효율적인 RTL 설계를 위한 활용법
  6. Verilog 태스크 이해: 함수와의 차이점, 문법, 활용법
  7. Verilog 블록 간/블록 내 지연 이해: 인터/인트라 할당 지연
  8. Verilog 클럭 생성기: 설계 및 구현 가이드
  9. Verilog 수학 함수 마스터하기: 효율적인 하드웨어 설계를 위한 활용
  10. Verilog $timeformat 마스터하기: 정밀도 및 표시 제어