1. Module
- verilog에서 design과 programming의 기본단위
- 하나의 source(text) file로 주어짐
- declarations and statemetns로 구성
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 |
---|