Verilog 논리값
verilog에서는 0,1,z(high impedence),x(unkown) 4가지 논리값이 존재합니다. 여기서 어떤 경우에 Unkonwon x값이 발생하는지 알아봅시다.
1. 0과 1이 동시에 들어가는 경우
- 0과1이 동시에 들어가면 출력이 0인지 1인지 알 수 없습니다.
2. high impedence z가 들어가는 경우
- open되어 있어 high impedence가 발생합니다. 이경우 역시 출력이 0인지 1인지 알 수 없습니다.
3. clk가 0일 경우
- 클럭이 뛰기 시작 전 0을 유지하는 상황에서 출력값을 결정할 수 없습니다.
Unkown(x)의 해결
pull-up and pull-down
pull-up : 전원 쪽으로 연결할때,
pull-down : 접지 쪽으로 연결할때,
위 그림에서 처럼 입력의 한가지 값을 unused한다고 생각합시다. 사용하지 않는 값을 그대로 두면 출력에 영향을 끼치기 위해 조치를 취해야 합니다. 만약, 오른쪽 위에서 처럼 unused 선을 접지에 연결한다면, 이값은 0을 내포하고 있으므로 NAND게이트 통과후 출력이 무조건 1이되므로, 출력에 영향을 계속 미쳐 이렇게 접지에 연결하면 안됩니다. 즉, NAND게이트의 출력에 아무런 영향을 주지 않기위해 unused를 Vcc에 연결시켜 사용합니다. 이를 pull up이라 합니다.
Verilog 자료형
연산자의 종류
- 단항(unary), 이항(binary), 삼항(ternary)연산자
상수(constant)의 표현
비트 수가 표시된 상수의 예
- 표시 방법 : <비트수>'<진수><표현값> 으로 표현합니다.
비트수 : 값의 비트 크기를 나타냄(생략이 가능하며 이경우 32비트로 표현합니다.)
진수 : 진수(base)를 지정하는 문자. d(decimal), h(hexadecimal), b(binary), s(signed) 대문자 가능
표현값 : 상수값을 나타낸다. Most significant digit가 x또는 z인 경우 비트수 만큼 확장된다. , 숫자인 경우 bit extension
ex) 16'bx == 16'b xxxx xxxx xxxx xxxx (쓰기 귀찮)
4’b0101 // 4비트 binary 값 0101 표현
12’H3aD // 12비트 hexadecimal 값 3aD (16진수는 한 숫자당 4비트를 차지한다.)
16’d255 // 16비트 decimal값 255
8’Df2 // decimal에서 f는 허용되지 않습니다. (f느 16진수에서의 기호)
2’H7 // 7은 2비트로 구현 될 수 없습니다.
비트 수가 없는 상수의 예
- 비트수가 없는 수는 32비트로 처리
- 비트수와 진수가 없으면 32비트의 10진수로 처리
22 : 32비트 10진수
’hc0 : 32비트 16진수
’d3 // 32비트 10진수
’b1001 : 32비트 2진수
’Df2 : f는 10진수에서 허용되지 않습니다.
자동확장과 밑줄문자의 예
- 0, x, z가 맨 앞의 숫자(most significant digit)일 경우 비트수에 맞추어0, x, z가 왼쪽으로 자동 확장.
- 밑줄문자 _ 는 숫자를 끊어 읽기 편하도록 숫자에 포함되어도 무방합니다.
16’hxz0z // 16’bxxxx_zzzz_0000_zzzz
7‘hx // 7’bxxx_xxxx
32’b0xz // 32’b0000_0000_0000_0000_0000_0000_0000_00xz
12’hz8 // 12’bzzzz_zzzz_1000
6’b10xz // 6’b00_10xz
39_000_000
부호있는 정수 표현의 예
- s를 사용하면 부호있는 signed 상수를 의미합니다.
8'd-3 // - 기호가 앞이 아닌 경우는 허용되지 않습니다.
-8’d3 // 8비트 -3
-8'd6 // 8비트 -6
8’h-c // illegal
4'shf // 4-bit signed ‘1111’, -4’h1, -1
-4’sb1111// 2’s complement of ‘1111’ is 0001. -(-4'd1), or '0001'
-'sd12 // -12
문자열(string)의 표현
- 이중 인용 부호 "" 사이에 있는 일련의 문자들
- 문자열 변수는 reg형의 변수
- 비트수는 문자수 x 8 // 예를들어 "ABC"일 경우 24비트를 차지합니다.
- 8비트 ASCII값으로 저장됨.
reg [8*12:1] string_var;
initial begin
string_var = "Hello world!"; // 공백까지 포함하여 12글자. 즉 96비트 차지.
end
식별자(identifier)
- 키워드(keyword) // Verilog문법을 위한 예약어, module, input, for, always
- 시스템 태스크(system task) // $로 시작되는 예약어, 시뮬레이터를 위한 명령어이다. $display, $stop
- 컴파일러지시자(compiler directive) // '(back-tick)으로 시작하는 예약어, 컴파일러를 위한 명령어, 'define, 'ifdef, 'endif
- 사용자 정의 변수(user variable)
- 예약어를 사용하면 안됨
- 대소문자 구분함
- 문자,숫자,$,_ 사용가능
- 시작은 문자나 _ 로 시작, 숫자 또는 $로 시작 불가능.
Verilog 자료형
- Net 자료형
- 소자간의 물리적인 연결을 위해 사용
- wire etc
- Variable 자료형
- 값을 저장하기 위해 사용
- 값을 저장하기 위해 사용
- reg, integer etc
Net 자료형 (wire)
Wire
- 연속 할당문(continuous assignment)를 사용
reg
- 절차적 할당문(procedural assignment)에 의해 값을 받는 자료형
- 저장 소자를 모델링하기 위해 사용 (F/F, Latch, register, memory)
- 조합논리회로를 모델링하기 위해 사용 (각종 gate등의 로직을 위해 사용)
- 따라서 reg가 항상 하드웨어적인 저장소자를 의미하지는 않음
integer 자료형
- 32비트 정수형 값을 취급하며, 절차적 할당문에 의해 값이 변경된다.
- signed reg로 취급되며, 연산 결과는 2의 보수가 된다.
time 자료형
- 시뮬레이션 시간을 처리하거나저장하기 위해 사용된다.
- 64비트의 reg를 선언한 것과 동일함
- $time의 값을 저장하거나 연산하기 위해 사용된다.
- unsigned값이고 unsigned연산이 이루어진다.
real, reatime자료형
- 실수형 값을 취급
Vector
- 여러 비트를 표현하기 위해 []를 사용
메모리
- reg형의 1차원 배열
- 메모리 전체가 단일 할당문으로 값을 할당 받을 수 없다.
- 워드 단위로만 값을 할당허거나 수식에 사용된다.
- 비트 단위로는 조작이 불가능하다.
예를들어 memory a = 0 // 이게 허용되지 않는다. memory a[0] = 0 이런식으로 써야 됩니다. (word 단위)
메모리 사용 예
'UVM & RTL > Verilog HDL' 카테고리의 다른 글
[7] Verilog HDL D Filp-Flop 실습 (0) | 2022.01.20 |
---|---|
[6] Verilog HDL clock 실습 (0) | 2022.01.20 |
[5] Verilog HDL 모듈, 테스트 벤치 (0) | 2022.01.15 |
[4] Verilog HDL 순차 회로 기술 (0) | 2022.01.15 |
[3] Verilog HDL 조합 회로 기술 (0) | 2022.01.15 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!