Verilog 자료형

2020. 10. 8. 00:14·study/Logic Circuit
반응형

Verilog의 논리값

논리값 의미
0 logic zero , or false condition
1 logic one, or true condition
x unknown logic value
z high - impedance state


Verilog HDL의 자료형


Net 자료형 : 소자간의 물리적인 연결을 추상화

  • 논리 게이트나 모듈 등의 하드웨어 요소들 사이의 물리적 연결을 나타내기 위해 사용
  • 연속 할당문, 게이트 프리미티브 등과 같은 구동자(의 값에 의해 net의 값이 연속적으로 유지됨 , 값을 저장하지 않음 (단, trireg net는 예외)
  • 구동자가 연결되지 않으면, default 값인 high-impedance (z)가 됨. 단, trireg net는 이전에 구동된 값을 유지
  • default 자료형은 1비트의 wire
  • wire, tri, wand, wor, triand, trior, supply0, supply1, tri0, tri1, trireg

 

 



net 자료형 종류

자료형 이름 의미
wire 함축된 논리적 동작이나 기능을 갖지 않는 단순한 연결을 위한 net
tri 함축된 논리적 동작이나 기능을 갖지 않는 단순한 연결을 위한 net이며, 하드웨어에서 3상태(tri-state)가 되는 점이 wire와 다름
wand 다중 구동자를 갖는 net이며, ‘wired-and’(즉, open collector logic)의 하드웨어 구현을 모델링하기 위해 사용
for 다중 구동자를 갖는 net이며, ‘wired-or’(즉, emitter coupled logic)의 하드웨어 구현을 모델링하기 위해 사용
triand wand와 동일하게 다중 구동자를 갖는 net이며, 하드웨어에서 3상태(tri-state)를 갖는 점이 다름
trior wor와 동일하게 다중 구동자를 갖는 net이며 하드웨어에서 3상태(tri state)를 갖는 점이 다름
supply0 회로접지(circuit ground)에 연결되는 net , 전원 단자에서 끌어오는 선
supply1 전원(power supply) (power supply)에 연결되는 net , ground에서 끌어오는 선
tri0 저항성 pulldown (resistive pulldown)에 의해 접지로 연결되는 net
tri1 저항성 pullup (resistive pullup)에 의해 전원으로 연결되는 net
trireg 물리적인 net에 저장되는 전하를 모델링하는 net

 

net 자료형 선언의 예

wire w1, w2;              //  1bit wire 2개 선언
wire [7:0] bus;            // 8 bit 짜리 wire 인 bus 선언
wire enable=1'b0;       // 변수를 선언하면서  0으로 초기화
tri [15:0] busa;            // 16bit tri인 busa 선언

 

wire와 tri

  • 회로 구성요소들 사이의 연결에 사용
  • wire : 단일 게이트 또는 단일 연속 할당문에 의해 구동되는 net에 사용
  • tri : 3상태 net에 사용

wire, tri 진리표

wire / tri     0     1     x     z
    0     0     x     x     0
    1     x     1     x     1
    x     x     x     x     x
    z     0     1     x     z

 

wand, triand의 진리표는 위 표에서 0이 있는 부분만 다 0으로 변경

wor,     trior의 진리표는 위 표에서 1이 있는 부분만 다 1으로 변경

 

 


 

Variable 자료형 : 절차형 할당문 사이의 값의 임시 저장

  • 프로그래밍 언어의 variable과 유사한 개념
  • reg, integer, real, time, realtime
  • 절차적 할당문의 실행에 의해 그 값이 바뀌며, 할당에서부터 다음 할당까지 값을 유지
  • default 초기값 >> reg, time, integer 자료형 : x (unknown)                                                                                           >>       real, realtime 자료형 : 0.0
  • variable이 음의 값을 할당 받는 경우 >> signed reg, integer, real, realtime 자료형 : 부호를 유지                                                                       >> unsigned reg, time 자료형 : unsigned 값으로 취급

 

- reg

  • 절차적 할당문에 의해 값을 받는 객체의 자료형
  • 할당 사이의 값을 유지
  • 하드웨어 레지스터를 모델링하기 위해 사용될 수 있음                                                                                 >>  edge-sensitive (플립플롭 등)와 level-sensitive (래치 등)의 저장소자들을 모델링할 수 있음                       >>  reg는 조합논리회로의 모델링에도 사용되므로, reg가 항상 하드웨어적인 저장소자를 의미하지는 않음            

조립회로로 구현되는 경우 : 모든 경우에 대해 출력 정의되므로 저장 필요 없음

 

always @ (a or b or x) begin           괄호 안의 값에 변화가 있을 때  아래 할당문이 실행된다. 
  if(a==b) out = 1'b0;                    할당문에 a,b,x가 있기 때문에 위 괄호 안에도 있어야 한다. 
  else if (x) out = 1'b1;                   예를 들어 괄호 안에 x가 없으면 x가 변화한다 해도 할당문 실행x
  else       out = 1'b0;
end

 

 

래치로 구현되는 경우 : out 을 유지해야 하는 경우 있음

always @(a or b or x) begin
  if (a==b) out = 1'b0;
  else if (x) out = 1'b1;
End

 

플립플럽으로 구현되는 경우 :  클릭 발생시까지 a를 유지 해야 함

always @(posedge clk or negedge rst x) begin  // 클락이 positive edge거나 리셋이 negative enge이면 할당문 실행
  if (!rst_x)a = 1'b0;                        // '리셋이 0이면 (0인 순간에) 리셋 하라
  else a = in;                               // in이라는 값을 받아들여서 a를 결정, 값을 할당받으니 a는 variable형 reg 선언
end      
// a가 플립플럽의 출력 처럼 동작, 플립플럽의 출력은 한 메모리 단위, 그 메모리가 여러비트가 되면 register가 된다. 
// reg라는 변수 타입이 이런 경우에는 register 한 단위를 표현하기 위해 사용된 변수 타입인거처럼 보인다
 //  reg는 조합논리회로의 모델링에도 사용되므로, reg가 항상 하드웨어적인 저장소자를 의미하지는 않음(위 두경우가 이거)
플립플럽은 하나의 메모리 (register 단위)

 

 

unsigned reg, time 자료형 : unsigned 값으로 취급

 

 

reg 자료형 선언의 예

reg a;                                  // 1bit a
reg [3:0] v;                           // 4비트 (멀티비트,여기서는 벡터라고 부른다.)  reg 타입 v   ,  v[3] v[2] v[1] v[0]
                                            signed가 없으면 default값인 unsigned
reg signed [3:0] signed_reg;     // a 4-bit vector in range -8 to 7
reg [-1:4] b;                         // a 6-bit vector reg [4 0]  
reg [4:0] x, y, z;                    // declares three 5-bit regs
module dff (clk, d, q) ;       //(포트들)
    input d, clk;                 // d와 clk는 입력 q는 출력으로 선언
    output q;
    reg q;

    always @(posedge clk)   //행위적표현,   clk이라는 신호에 positive edge가 변할때 아래 할당문 실행
       q<=d;                      // 절차적할당(절차적 표현 안에서 일어나는 할당), d값을 q에 넣는다.

endmodule                                                                                                                                D 플립플롭
module mux21_if(a, b, sel, out);
    input [1:0] a, b;
    input sel;
    output [1:0] out;
    reg [1:0] out ;

    always @ (a or b or sel)
       if(sel == 1'b0)
           out = a;
       else
           out = b;
endmodule                                                                                                                          2:1 MUX

 

 

- integer

  • 정수형 값을 취급하며, 절차적 할당문에 의해 값이 변경됨
  • signed reg로 취급되며, 연산 결과는 2의 보수가 됨

- time

  • 시뮬레이션 시간을 처리하거나 저장하기 위해 사용됨
  • 64 bit의 reg와 동일하게 작용
  • unsigned 값이고 unsigend 연산이 이루어짐

- real, realtime 자료형

  • 실수형 값을 취급

 

variable 자료형 선언 예

integer a;
time last_chng;
real float;
realtime rtime;

 


 

net 자료형과 variable 자료형의 할당 모드

자료형 프리미티브 출력 연속 할당문 절차형 할당문
NET          o        o          x
Variable comb(x) seq(o)        x          o

벡터

  • 범위지정 [ b l b] [msb:lsb] 을 갖는 다중 비트의 net 또는 reg 자료형
  • signed로 선언되거나 signed로 선언된 포트에 연결되는 경우를 제외하고는 unsigned 로 취급
  • 단일 할당문으로 값을 받을 수 있음
형식 :  data_type  [ msb : lsb ]  identifier;

ex)
reg [7:0]  rega;       // 8-bit
wire [15:0] d_out    // 16-bit

배열

  • 별도의 자료형이 없으며, reg 또는 wire 선언을 이용하여 선언
  • 배열 전체 또는 일부분은 단일 할당문에 의해 값을 할당 받을 수 없으며, 또한 수식에 사용될 수 없음                   >> 배열을 구성하는 element만 단일 할당문으로 값을 할당 받을 수 있음
  • RAM, ROM, Register File 등의 메모리 모델링에 사용
형식
          2차원 배열 : data_type identifier [Uaddr:Laddr][Uaddr2:Laddr2];
벡터의 1차원 배열 :data _type [msb:lsb] identifier [Uaddr:Laddr][Uaddr2:Laddr2];

배열 선언

reg [7:0] mema[0:255];       // 8-bit registers 256개 배열
reg arrayb[7:0][0:255];        // 1-bit registers 2차원 배열 8*256
wire w_array[7:0][5:0];        // an array of wires
integer inta[1:64];             // an array of 64 integer values
time chng_hist[1:1000];     // an array of 1000 time values

배열요소에 대한 할당

mema = 0;                               // 잘못된 구문- Attempt to write to entire array arrayb[1]
arrayb[1] = 0;                           // 잘못된 구문 - Attempt to write to elements Attempt to write to elements
                                            // [1][0]..[1][255] 

arrayb[1][12:31] = 0;                 // 잘못된 구문 - Attempt to write to
                                           // elements [1][12]..[1][31]

mema[1] = 0;                         // Assigns 0 to the second element of mema 0
arrayb[1][0] = 0;                     // Assigns 0 to the bit referenced by indices [1][0]
inta[4] = 33559;                     // Assign decimal number to integer in array

chng_hist[t_index] = $time;      // Assign current simulation time to
                                        // element addressed by integer index

 

배열 - 메모리

  • reg형 요소를 갖는 1차원 배열
  • 메모리 전체가 단일 할당문으로 값을 할당 받을 수 없음                                                                           >> 인덱스로 지정되는 워드 단위로만 값을 할당하거나 수식에 사용될 수 있음

하나하나의 비트로 메모리의 역할을 하는 소자가 플립플롭

플립플롭을 몇개의 단위로 묶어낸 것이 register

하드웨어 상에서 사실상 register가 메모리 역할을 하는것

reg [1:n] rega;        // n-bit register
reg mema [1:n];     // 1bit register가 n개 있는 메모리



 

Verilog HDL 개요 , 회로설계 모델링, 어휘 규칙

Verilog HDL 구문 논리 합성용 구문 assign, if ~ else , case , for , always 대부분의 논리합성 툴에서 게이트 수준 합성을 지원하는 구문들이다. Simulation용 구문 initial , $finish , $fopen 시뮬레이션을 위한 테스

jjikky-code.tistory.com

 

Verilog 연산자

1100 && 0101 : 논리 and (이항 연산자) > 0,x,z가 아닌 정해진 값이면 1 , 1 and 1이 되서 값은 1 1100 & 0101 : 비트단위 and > 위치가 같은 비트 끼리 and 연산 , 결과는 0100 & 1100 : 축약 and (단항 연산자) > 모든

jjikky-code.tistory.com

 

Verilog 자료형

Verilog의 논리값 논리값 의미 0 logic zero , or false condition 1 logic one, or true condition x unknown logic value z high - impedance state Verilog HDL의 자료형 Net 자료형 : 소자간의 물리적인 연결을 추상화 논리 게이트나

jjikky-code.tistory.com

 

게이트 수준 Modeling

게이트 및 스위치 프리미티브 predefined 프리미티브 정의나 선언 없이 사용 가능 단일 출력을 가짐 모듈 내에서만 사용 가능 >> initial 과 always 구문 내부에서는 사용 불가 게이트 프리미티브 인스

jjikky-code.tistory.com

 

할당문

연속할당문 : net형 객체에 값을 할당 assign문 continous_assign :: = assign [driving_strength][delay] net_assignments; 절차형 할당문 : variable형 객체에 값을 할당 always 블록, initial 블록, task, function 내부의 할당문 b

jjikky-code.tistory.com

 

행위수준 모델링

행위수준 모델링 조합논리회로와 순차논리회로의 설계, 설계된 회로의 시뮬레이션을 위한 테스트벤치의 작성에 사용 always 구문, initial 구문, task, function 내부에 사용 always 구문 always [@(sensitivity_

jjikky-code.tistory.com

 

반응형

'study > Logic Circuit' 카테고리의 다른 글

할당문  (0) 2020.10.25
게이트 수준 Modeling  (0) 2020.10.10
Verilog 연산자  (0) 2020.10.10
Verilog HDL 개요 , 회로설계 모델링, 어휘 규칙  (0) 2020.10.07
기본  (0) 2020.10.07
'study/Logic Circuit' 카테고리의 다른 글
  • 게이트 수준 Modeling
  • Verilog 연산자
  • Verilog HDL 개요 , 회로설계 모델링, 어휘 규칙
  • 기본
jjikky
jjikky
  • jjikky
    jikky.env
    jjikky
  • 전체
    오늘
    어제
    • 분류 전체보기
      • React
      • Node.js
        • TDD
        • Node.js
        • mern
        • OAuth
        • js_facebook login
      • Coding Test
        • 백준 알고리즘
        • CodeUp
        • 코테 이론
      • Js
        • Javascript
      • study
        • python
        • android
        • Big data analysis
        • Logic Circuit
      • git
      • 개발일지
      • 게임기획
      • Docker
      • IPFS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    NFT IPFS
    파이썬 완전탐색
    ifps 네트워크 지연
    verilog할당문
    파이썬 딕셔너리
    ipfs add
    빅데이터
    Python
    NFT Marketplace
    UI
    범주형 자료
    파이썬
    nft
    안드로이드
    Ipfs
    git 유용한 명령어
    verilog
    그리디 알고리즘
    파이썬 그리디
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
jjikky
Verilog 자료형
상단으로

티스토리툴바