-
[SystemVerilog] 데이터 타입 1개발/SystemVerilog 2022. 1. 10. 22:37
시스템베릴로그에서 추가된 타입인 logic에 대해 알아본다
logic은 베릴로그의 reg / wire 타입을 대체하는 키워드이다.
베릴로그에서 reg 타입은 레지스터로 고정된 것이 아니라 컨텍스트에 따라서 register 또는 wire로 합성이 될 수 있다.
다음과 같이 코딩을 하면 wire 타입으로 합성된다.
reg a, b; reg out; always @(a or b) begin out = a & b; end
a, b, out 모두 reg 타입으로 선언되었지만, 툴에선 combinational logic 으로 추론한다.
이렇듯, 기존의 reg 타입은 코딩하기에 따라서 혼동을 일으키기 쉽다.
logic clk; logic [3:0] bus; logic [31:0] mem [0:127]; // var is optional var logic a, b; // equivalent to logic a, b // net type wire logic c, d; // equivalent to wire c, d
logic 은 단독으로 쓸 수 있고 var 키워드를 같이 사용할 수 있다.
보통 var 키워드는 생략한다.
넷타입은 wire logic 으로 선언할 수 있다. 이땐 logic 을 생략하고 wire 만 써도 된다.
기존 베릴로그에선 모듈의 포트를 정의할 때 다음과 같은 규칙이 있다.
1. input port 정의할 때, net 타입만 허용됨
2. inout port 정의할 때, net 타입만 허용됨
3. output port 정의할 때, var / net 타입 허용됨
예를 들어 모듈 A, B가 있다고 하자. 모듈 A의 출력을 B의 입력으로 연결하는 상황이다.
A의 output은 var 타입으로 정의되어 있다. 그리고 B의 input은 net 타입으로 정의되어있다.
A, B를 연결하기 위해 net 타입의 wire 변수를 하나 만들어서 두 모듈을 연결한다.
그러면 A의 출력은 var 타입인데, 출력과 연결된 wire는 net타입이다. 따라서 데이터가 전달될 때 데이터타입의 변환을 해줘야한다.
시스템베릴로그에서는 포트를 선언하는 규칙을 완화했다.
간단하게 모든 input, output port를 logic으로 선언하면 된다.
기존 베릴로그에서는 연속할당문은 net 타입, 절차적 할당문에는 var 타입의 변수를 할당해야 했지만,
시스템베릴로그에선 연속할당문, 절차적 할당문 모두 logic으로 사용할 수 있다.
// continouos assignment module test1(input logic a, b, output logic c); assign c = a & b; endmodule // procedural block module test2(input logic a, b, output c); always @(a, b) c = a & b; endmodule
'개발 > SystemVerilog' 카테고리의 다른 글
[SystemVerilog] 연산자 (0) 2022.01.13 [SystemVerilog] 절차적 할당 2 (0) 2022.01.11 [SystemVerilog] 절차적 할당 1 (0) 2022.01.11 [SystemVerilog] 데이터 타입 2 (0) 2022.01.10 [SystemVerilog] 시스템베릴로그 개요 (0) 2022.01.10