본문 바로가기
HW Design/1. Verilog HDL Basic

[Verilog Data Types and Arrays] 2. 기본 데이터 type

by 한PU 2024. 1. 2.
728x90
반응형
  • net types & variable types
    • net types
      • 디지털 회로의 연결을 모델링.
      • 값 저장 x
      • must be driven with data
    • variable types
      • registers or flip flops 모델링
      • 값 저장 o
      • C 언어 등의 ==변수== 와 같다.
  • data table
data 설명
0 2진수 0
1 2진수 1
z High impedance
x unknown value
  • 변수의 일반적 구문
  • <type_name> <size> <variable_name> = <value>;
  • - type 선언 - ` integer example = 100; `

Net Types in Verilog

  • 다른 컴포넌트 사이의 물리적 연결 표현

  • can not be used to store data values or drive data

  • 위 그림에서 mux의 output을 ff의 input에 연결.

    • 컴포넌트 간의 물리적 연결 => net types
  • 일반적으로 wire type 구동 시 continuous assignment 이용

    • assign 키워드

      // 상수 0을 net type 지정 (assign 키워드 이용)
      assign a = 1'b0;
  • always blocks 에서는 net types ==사용 불가==

Wire Type in Verilog

  • 가장 일반적인 net type
  • 가장 기본적인 point to point 연결
  • 전통적인 회로의 선과 같다.
// single wire 선언
wire a;

// wire형에 데이터 전송 ( assign 사용 )
assign a = c;
assign b = d;

wand & wor Types

  • 회로에 기본적인 로직 gate를 삽입

    • wand : and gate
    • wor : or gate
  • 하나 이상의 신호를 assign 해야 사용 가능

    • 각 assign은 gate에 대한 하나의 입력만 나타내기 때문.

      // wand , wor types 선언
      wor a;
      wand b;
// gate에 연결하는 wire 선언  
wire c, d, e, f;

// OR 로직의 gate 생성 ( c | d )  
assign a = c;  
assign a = d;

// AND 로직의 gate 생성 ( e & f )  
assign b = e;  
assign b = f;

- wor, wand type 사용은 추천하지 않음.

tri, triand & trior Types

- wire, wand and wor => tri,triand and trior
- wire, wand and wor과 기능은 완전 동일
- design의 의도를 더 명확하게 보여주기 위해 사용

// tri 선언
tri a;

// high impedance 데이터 전송
assign tri = 1'bz;
  • 실제로는 거의 사용 x

supply0 & supply1 Types

  • 위 type을 통해 신호를 2진수 0 또는 1의 상수 값에 연결 가능

  • Vcc, GND 에 연결된 net을 생성.

    • data를 assign 할 필요 x

      // 0b에 연결된 net 생성
      supply0 a;
      
      // 1b에 연결된 net 생성  
      supply1 b;
      
  • But, 이러한 경우가 거의 없고, 이러한 경우에도 wire이용

    • 잘 사용하지 않음.

Variable Types in Verilog

  • variable data types => 값을 store
    • 값을 assign 하면 다시 할당될 때까지 이 값이 유지
  • C 언어의 int, str 등과 유사

  • variable type은 flip flop의 output을 모델링 하는데 사용.
    • single bit of data 저장.
  • variable type은 always block 내에서만 사용 가능
  • D FF 코드 예시
    always @(posedge clock)
      q <= d;
    end

Reg Type in Verilog

  • 가장 많이 사용.

    • 값을 저장해야할 때 언제든 사용 가능
  • 보통 flip flops의 행동 모델링에 사용

  • 일부 상황에서는 combinational logic 모델링에 reg 사용

    // reg type 선언
    reg q;
// basic flip flop 코드  
always @(posedge clock)  
q <= d;  
end

Numeric Variable Types

  • 지금까지의 type들은 single bits of data 에 사용됨.
  • But, data를 수치로 표현할 수도 있음. (??)
  • integer type & real type 구분

Verilog Integer Type

  • 가장 일반적인 수치 data
  • But, 일반적으로 Port 보다는 모듈 내부 신호에 사용
  • integer
    • default : 32 bit 2's complement number (2의 보수수)
    • 모든 숫자 표현 가능
  • assign 시 2진 값이 아닌 숫자 값을 할당.
    • reg type도 숫자 값 할당 가능
    • integers : constants or loop variables 일 때
  • synthesis tool에서는 integer type에서 사용하지 않는 bits를 자동으로 잘라냄.
    • 255 정수 선언 => tool이 255를 8bit로 잘라냄.
      integer a = 255;

Verilog Real Type

  • 소수점이 있는 숫자 (실수) 를 저장하는 데 사용.

  • 일반적으로 64bit floating point number (부동 소수점 숫자)로 구현

    • 직접 합성 불가능.
    • 일반적으로 testbenches에서만 real type 사용.
  • 소수점, 과학적 표기법을 사용해 값을 assign 가능4

    // real type 선언
    real a;
    
    // 소수점 표기법을 이용해 할당  
    a = 2.5;
    
    // 과학적 표기법을 이용해 할당  
    a = 1e-3;
    

Vector Types in Verilog

  • numerical types 제외, 나머지 모든 type은 단일 비트로 구성

  • 디지털 회로 내에서 데이터 전송시, data busses를 사용하는 경우가 많음.

  • Vector types

    • 이 type을 사용하여 data busses 생성 가능
    • 이를 통해 2개 이상의 bit를 가진 신호 선언 가능
      <type> <size> <variable_name>;
  • <size>

    • [MSB:LSB] 로 표기

      // reg type vector 선언
      reg [3:0] a;
      
      // 2진수 data assign  
      a = 4'b1010;
      
      // 16진수 data assign  
      a = 4'ha;
      
      // 10진수 data assign  
      a = 4'd10;
      
      // 8진수 data assign  
      a = 4'o12;
      

Signed and Unsigned Data in Verilog

  • 2001 표준 전까지 모든 variable, net types 는 부호가 없는 데이터만 저장할 수 있었음.
  • integer type은 항상 부호가 있는 값으로 해석됨.
  • 2001표준 이후 signed , unsigned 키워드를 통해 변수가 data를 해석하는 방식 변경 가능.
  • type을 signed로 선언하면...
    • 2의 보수 숫자로 해석됨 => 음수 할당 가능
  • integer type => 기본적으로 signed (부호화)
  • reg ,wire types는 필요할 때만 키워드 사용
    // reg type 중 signed, unsigned 선언
    reg [31:0] a; // unsigned
    reg signed [31:0] b; // signed
    

// wire type
wire [31:0] a;
wire signed [31:0] b;

// integer type
integer unsigned a;
integer b;
````

728x90
반응형