전자과 과목/디지털시스템설계

Verilog 기초 문법 #1

가은가은 2023. 3. 16. 17:08

1. Module

  • verilog에서 design과 programming의 기본단위 
  • 하나의 source(text) file로 주어짐
  • declarations and statemetns로 구성

module 선언 구조

 

 

2. Specification Models

1) behavior model

 : hardware의  logical procedure가 명시됨

-> 보통 if-else 구문 사용하여 구현

2) structural models

 :  여러개의 module을 interconnection한 것

 

3. Logic system

1) 1-bit 가 가질 수 있는 값

  • 0: Logical 0, false
  • 1 : Logical1, true
  • x : unknown logical value
  • z : high impedance

2) Boolean operators 

  • & : AND
  • | : OR
  • ^ : XOR
  • ~^, ^~ : NOR
  • ~ : NOT

 

4. Verilog Signals - Nets

  • Net type에는 여러가지가 있지만, default는 wire
  • wire 는 module 사이나 다른 요소 사이를 연결   (Wires in a physical circuit!)
wire id, id, id, ... id;
wire [msb:lsb] id, id, ;

 

5. Verilog Signals - Variables

  • verilog의 모델일 실행되는 동안에 저장됨 -> procedual code에서 사용
  • variable value는 module안의 procedual code에서만 바뀌고 외부에서는 안바뀐다.

 

  • 대부분 variable type은 reg(for a single bit) 또는 integer( for a signed vector value)
  • input/inout 포트는 무조건 wire (not a variable) type으로 선언
  • output 포트는 net(wire)또는 reg type 둘 다 가능

<syntax>

reg id, id, id, ...id;
wire [msb:lsb] id, id;

integer id, id, ...id;

 

6. Verilog Literals

 

7. parameters

: 변하지 않는 일정한 값임

<syntax>

//하나 지정
parameter id = value;
// 여러개 지정
parameter id1 = value1;
          id2 = value2;
          ...
          id3= value3;

<examples>

parameter BUS_SIZE = 32,               //width of bus
          MSB = BUS_SIZE - 1, LSB = 0; //range of indices
          
parameter ESC = 7'b0011011;            //ASCII esc character

 

8. Vector

1) Vector Declaration

  • 여러 개의 bit를 나타낼 때, nets, variable, constant 모두 아래와 같이 나타냄
reg [7:0] byte1, byte2, byte2; //[MSB:LSB] -> 비트 순서를 결정
reg [1:16] Zbus;               //[MSB:LSB] -> 비트 순서를 결정
  • vector에 접근할 때
byte1[7] : byte1의 가장 왼쪽 bit(1)
Zbus[16] :  Zbus의 가장 오른쪽 bit
Zbus[1:8] : Zbus의 왼편 bit들
byte1[5:2}: byte1의 가운데 bit들

* 만약에, 접근하려는 index가 vector의 범위를 넘어선다 -> return 'x' (x : unknown value)

 

 

2) Vector Operator

  • Concatenation {}
    • {2'b00, 2'b11} -> 4'b0011
    • {byte1, byte1, byte2, byte2} -> 32-bit vector
  • Replication: n{}
    • {2{byte}, 2{byte}} -> {byte1, byte1, byte2, byte2}
    • {N{1'b1}} -> {1.......1}
  • Bit-wise Boolean operators
    • &, |, ^,^~, ~

 

3) Vector alignments

  • assign 할 때
    • Is smaller? -> 왼쪽에 0으로 패딩 or 가장 왼쪽 bit가 x'나'z'일 경우 그걸로 패딩
    • Is wider? -> 가장 오른쪽 bits 사용
  • wide가 다른 두 vector를 operation 할 때
    • 짧은 vector의 왼쪽에 0으로 패딩
    • ex) 2b'11 & 4'b1101  -> 0011&1101

 

9. Arrays

  •  일차원 뿐만 아니라 다차원 array 할당 가능
  •  reg, integer,wire의 이름 앞에 열의 범위, 뒤에 행의 범위 쓰기

<Syntax>

// reg, integer, wire도 아래와 같은 형식으로
reg id [start:end];
reg [msb:lsb] id [start:end]
reg id [start:end][msb:lsb]

<Example>

reg [7:0] byte1, recent [1:5], mem1 [0:255], cache [0 :511];

 

10. Truth values

  • 1 bit
    • true : 1'b1
    • false : 1'b0 or unknown (x or z)
  • multi-bit known value
    • true : any nonzero values
    • false : else

'전자과 과목 > 디지털시스템설계' 카테고리의 다른 글

Verilog 기초 문법 #2  (0) 2023.03.24