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 |