베릴로그
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
베릴로그는 1980년대 초에 개발된 하드웨어 기술 언어(HDL)로, 디지털 시스템을 모델링하고 시뮬레이션하는 데 사용된다. 1995년 IEEE 1364-1995 표준으로 제정되었으며, 이후 여러 차례 개정을 거쳐 2009년에는 SystemVerilog와 통합되었다. C 언어와 유사한 문법 구조를 가지며, 모듈 기반 설계를 통해 계층적인 설계를 지원한다. 주요 특징으로는 4가지 값 논리, 다양한 연산자, 시스템 태스크, PLI(Program Language Interface) 등이 있다. Verilog-A와 Verilog-AMS는 아날로그 및 혼합 신호 회로 설계를 위한 확장이며, SystemVerilog는 검증 기능을 강화한 확장판이다.
더 읽어볼만한 페이지
- 구조적 프로그래밍 언어 - CPL (프로그래밍 언어)
CPL은 1960년대에 개발된 프로그래밍 언어로, ALGOL 60의 영향을 받아 과학 및 상업 프로그래밍을 아우르는 넓은 응용 분야를 지향했으나 복잡성으로 인해 널리 보급되지는 못했고, BCPL, B, C 언어에 영향을 주어 현대 프로그래밍 언어 발전에 기여했다. - 구조적 프로그래밍 언어 - 알골 (프로그래밍 언어)
알골은 1950년대 후반 유럽 학자들이 개발한 명령형 프로그래밍 언어로서, BNF 표기법으로 문법이 기술되고 구조화된 프로그래밍 형태를 갖추어 이후 여러 언어에 영향을 주었으며, 특히 알골 60은 재귀 호출 지원으로 소프트웨어 모듈화와 컴퓨터 범용화에 기여하고 프로그래밍 개념 표준 용어 제공에 중요한 역할을 했다. - 하드웨어 기술 언어 - 아벨 (프로그래밍 언어)
아벨은 고급 프로그래밍 언어의 한 종류이다. - 하드웨어 기술 언어 - VHDL
VHDL은 디지털 회로의 설계, 검증, 구현에 사용되는 하드웨어 설명 언어(HDL)로, 에이다를 기반으로 하며, 병렬 시스템 설명, 데이터 타입 지원, 코드 재사용 및 이식성을 제공한다. - 코드 예시에 관한 문서 - 순서도
순서도는 컴퓨터 알고리즘이나 프로세스를 시각적으로 표현하는 도구로, 흐름 공정 차트에서 기원하여 컴퓨터 프로그래밍 분야에서 알고리즘을 설명하는 데 사용되며, 다양한 종류와 소프트웨어 도구가 존재한다. - 코드 예시에 관한 문서 - 람다 대수
람다 대수는 알론조 처치가 수학기초론 연구를 위해 도입한 형식 체계로, 초기 체계의 모순 수정 후 유형 없는 람다 대수와 단순 유형 람다 대수가 발표되었으며, 프로그래밍 언어와의 관계가 명확해지면서 컴퓨터 과학과 언어학에서 중요한 위치를 차지하며 함수형 프로그래밍 언어의 기반이 되었고, 튜링 완전성을 가지는 등 다양한 분야에 응용된다.
베릴로그 - [IT 관련 정보]에 관한 문서 | |
---|---|
개요 | |
유형 | 하드웨어 기술 언어 |
패러다임 | 구조적 |
설계자 | 프라부 고엘, 필 무어비, 치-라이 황 |
개발자 | IEEE |
영향 받은 언어 | 파스칼, 에이다, C, 포트란 |
영향 준 언어 | SystemVerilog |
파일 확장자 | .v, .vh |
자료형 | 정적, 약한 |
역사 | |
발표일 | 1984년 |
단종 | SystemVerilog에 병합됨 |
최신 버전 정보 | |
최신 안정화 버전 | IEEE 1800-2023 |
최신 릴리스 날짜 | 2023년 12월 6일 |
기타 | |
방언 | Verilog-AMS |
웹사이트 | Verilog IEEE |
2. 역사
1984년경 게이트웨이 디자인 오토메이션(Gateway Design Automation)사의 필 무어비가 하드웨어 모델링 언어와 시뮬레이터로 베릴로그를 개발했다.[2] 1990년 이 회사는 케이던스 디자인 시스템즈에 인수되었다.[2] 케이던스는 오리지널 게이트웨이 Verilog 및 Verilog-XL 논리 시뮬레이터의 판권을 현재도 가지고 있다.
VHDL의 부상에 대응하여, 케이던스는 Verilog의 규격을 공개하고 표준화하기로 결정했고, OVI(Open Verilog International)에 판권의 일부를 이양했다. OVI는 그 후 Accellera로 개편되었다. 이후 Verilog는 IEEE에 제출되어 IEEE 1364-1995[16]로 표준화되었다. (Verilog-1995)
표준화에 따라, 케이던스사 이외의 회사나 프리 소프트웨어 베릴로그 시뮬레이터가 등장했다.
Verilog-1995에 대한 확장이 이루어져 Verilog 2001 (IEEE 1364-2001[17])이 되었다. VHDL에 있던 generate 문이 추가되어 대규모 설계가 용이해졌다.
이후, 더 높은 수준의 검증 언어가 등장했고, 이는 코디자인 오토메이션(Co-Design Automation)의 Superlog 개발을 촉진했다. 코디자인 오토메이션은 이후 시놉시스에 인수되었다. Superlog와 Vera는 Accellera에 기증되어, SystemVerilog와 Verilog로 나뉘었다.
최신 버전은 Verilog-A를 포함하며, 아날로그/디지털 혼합 신호 모델도 지원하여 Verilog-AMS라고 한다.
IEEE 1364-2005[18]로 표준화되었다. 이때, SystemVerilog IEEE 1800-2005도 함께 만들어졌다.
IEEE/IEC 62530-2011 - SystemVerilog – 통합 하드웨어 설계, 명세 및 검증 언어[19]로, Verilog HDL과 SystemVerilog의 문서를 통합했다.
2. 1. 시작
1983년 말부터 1984년 초 사이에 프라부 고엘, 필 무어비, 치라이 황이 베릴로그를 개발했다.[2] 당시 이들은 게이트웨이 디자인 오토메이션(Gateway Design Automation) 소속이었으며,[2] 이 회사는 1990년 케이던스 디자인 시스템즈에 인수되었다.[2] 초기 베릴로그는 회로 설계자들이 그래픽 회로도 캡처 소프트웨어와 특수하게 작성된 소프트웨어 프로그램을 사용하여 전자 회로 시뮬레이션을 수행하던 시기에 생산성을 크게 향상시켰다.2. 2. 표준화
VHDL의 부상에 대응하여, 케이던스는 베릴로그를 공개하고 표준화하기로 결정했다. 1990년, 케이던스는 베릴로그를 [http://www.ovi.org/ Open Verilog International] (OVI) (현재의 Accellera)에 이관했다.[16] OVI는 베릴로그를 IEEE에 제출했고, 1995년에 IEEE 1364-1995 표준(Verilog-95)이 되었다. OVI는 이후 Accellera로 개편되었다.표준화에 따라, 케이던스사 이외의 회사나 프리 소프트웨어 베릴로그 시뮬레이터가 등장하게 되었다.
2. 3. Verilog 2001
베릴로그-2001은 베릴로그-95를 크게 개선한 버전이다. 2의 보수를 사용하는 부호 있는 네트와 변수를 명시적으로 지원한다. 이전에는 코드 작성자가 비트 수준으로 조작하여 부호 있는 연산을 수행해야 했지만, 베릴로그-2001에서는 `+`, `-`, `/`, `*`, `>>>` 같은 내장 연산자를 사용하여 더 간결하게 표현할 수 있다.`generate–endgenerate` 구문(VHDL의 `generate–endgenerate`와 유사)을 통해 일반적인 결정 연산자(`case–if–else`)를 사용하여 인스턴스 및 문 인스턴스화를 제어할 수 있다. `generate–endgenerate`를 사용하면 개별 인스턴스의 연결성을 제어하면서 인스턴스 배열을 인스턴스화할 수 있다.
파일 I/O는 몇 가지 새로운 시스템 태스크를 통해 개선되었다. 코드 가독성을 높이기 위해 `always`, `@*`, 명명된 매개변수 재정의, C 스타일 함수/태스크/모듈 헤더 선언 등 몇 가지 구문도 추가되었다.
베릴로그-2001은 대부분의 상용 EDA 소프트웨어 패키지에서 지원하는 베릴로그 버전이다.[17]
2. 4. Verilog 2005
Verilog 2005 (IEEE 표준 1364-2005)는 Verilog 2001의 사소한 수정, 명세 명확화 및 몇 가지 새로운 언어 기능 (예: `uwire` 키워드)으로 구성된다. SystemVerilog와 혼동하지 않도록 주의해야 한다.Verilog 표준의 별도 부분인 Verilog-AMS는 기존 Verilog와 아날로그 및 혼합 신호 모델링을 통합하려고 시도한다.
2. 5. SystemVerilog
하드웨어 검증 언어인 OpenVera와 Verisity의 e 언어의 출현은 Co-Design Automation Inc.(이후 시놉시스에 인수됨)에 의한 Superlog의 개발을 장려했다.[1] Superlog와 Vera의 기초는 Accellera에 기증되었고, 이는 나중에 IEEE 표준 P1800-2005: SystemVerilog가 되었다.[1]SystemVerilog는 Verilog-2005의 상위 집합으로, 설계 검증 및 설계 모델링을 지원하는 많은 새로운 기능과 기능을 갖추고 있다.[1] 2009년, SystemVerilog 및 Verilog 언어 표준은 SystemVerilog 2009 (IEEE 표준 1800-2009)로 통합되었다.[1]
2. 6. Verilog-AMS
Verilog-AMS는 아날로그 및 혼합 신호 모델링을 위한 확장 기능을 제공한다. Verilog-A를 포함하여 아날로그 회로의 기능 기술을 지원한다.[1]2. 7. 2009년 이후 업데이트
SystemVerilog 표준은 2012년,[5] 2017년,[6] 그리고 가장 최근인 2023년 12월에 업데이트되었다.[7]3. 주요 특징
베릴로그(Verilog)는 하드웨어 기술 언어(HDL)의 일종으로, 디지털 회로를 설계하고 검증하는 데 사용된다. C 언어와 유사한 문법 구조를 가지고 있어 소프트웨어 개발자들에게 친숙하다.
베릴로그는 모듈 기반 설계 방식을 채택하여 계층적 설계가 가능하다. 이는 복잡한 시스템을 여러 개의 작은 모듈로 나누어 설계하고, 이들을 조합하여 전체 시스템을 구축하는 방식이다. 각 모듈은 독립적으로 설계 및 검증될 수 있으며, 재사용성이 높다는 장점이 있다.
병렬 처리 및 시간 개념을 지원하여 하드웨어의 동작을 정확하게 기술할 수 있다. 하드웨어는 여러 동작이 동시에 병렬적으로 처리되는 특성을 가지는데, 베릴로그는 이러한 병렬성을 모델링할 수 있는 기능을 제공한다. 또한, 시간 지연과 같은 시간 개념을 명시적으로 표현할 수 있어 실제 하드웨어의 동작을 시뮬레이션하고 검증하는 데 용이하다.
블로킹 할당(`=`)과 논블로킹 할당(`<=`)을 구분하여 사용한다. 블로킹 할당은 할당 연산자 오른쪽의 표현식을 평가하고, 그 결과를 즉시 왼쪽 변수에 할당한다. 반면, 논블로킹 할당은 할당 시점을 현재 시뮬레이션 시간의 끝으로 지연시킨다. 이는 하드웨어의 동시성을 모델링하는 데 중요한 역할을 한다.
4가지 값(`0`, `1`, `X`, `Z`)을 가지는 4치 논리를 사용한다. `0`과 `1`은 각각 논리적 거짓과 참을 나타내며, `X`는 알 수 없는 값(unknown), `Z`는 높은 임피던스(high impedance) 상태를 의미한다. `X`와 `Z`는 회로의 초기 상태나 충돌(contention)과 같은 상황을 표현하는 데 사용된다.
C 프로그래밍 언어와 유사한 구문을 가지도록 설계되었다. C와 마찬가지로 베릴로그는 대소문자 구분하며, 기본적인 전처리기를 가지고 있다. 제어 흐름 키워드 (if/else, for, while, case 등)는 동일하며, 연산자 우선순위는 C와 호환된다. 구문상의 차이점으로는 변수 선언에 필요한 비트 폭, 프로시저 블록의 구분(베릴로그는 중괄호 {} 대신 begin/end 사용) 및 기타 여러 사소한 차이점이 있다.
3. 1. 기본 문법
모듈은 `module` 키워드로 시작하고 `endmodule` 키워드로 끝난다. 모듈 내부에는 파라미터 선언, 포트 선언, 레지스터 선언, 이벤트 선언, 넷(net) 선언, 문(statement) 등을 기술한다.- 포트 선언: `input`, `output`, `inout` 키워드를 사용하여 모듈의 입출력 신호를 정의한다.
- 변수 선언: `wire`, `reg`, `integer` 등의 키워드를 사용하여 신호 및 변수를 선언한다.
- 할당문:
- 제어문: `if-else`, `case`, `for`, `while` 등의 제어문을 사용하여 조건부 실행 및 반복 실행을 구현한다.
- 시스템 태스크: `$`로 시작하는 시스템 태스크를 사용하여 시뮬레이션 중 입출력, 디버깅 등의 기능을 수행한다.
다음은 플립플롭을 이용한 예제이다.:
```verilog
module toplevel(clock,reset);
input clock;
input reset;
reg flop1;
reg flop2;
always @ (posedge reset or posedge clock)
if (reset)
begin
flop1 <= 0;
flop2 <= 1;
end
else
begin
flop1 <= flop2;
flop2 <= flop1;
end
endmodule
```
베릴로그에서 할당 연산자 "<="는 ‘논블로킹’(non-blocking)으로 불리며, 클럭(clock)이 발생할 때, 병렬로 동시에 실행된다는 것을 의미한다. 따라서 이 예제에서 flop1과 flop2는 다음의 ‘클록 주기’(clock cycle) 마다 동시에 서로 바뀌게 될 것이다.
또 다른 할당 연산자 "="는 ‘블로킹’(blocking)이라 불리며, ‘클럭’(clock)이 발생할 때, 순차적으로 대입되며 위의 할당이 아래의 할당에 영향을 순차적으로 주게 된다는 것을 의미한다. 만일 위 예에서, "<=" 이 "=" 로 바뀌어 진다면, flop1과 flop2는 서로 변경되지 않고 그 값을 유지하게 될 것이다.
다음은 카운터 예제이다.:
```verilog
module Div20x (rst, clk, cet, cep, count, tc);
// TITLE 'Divide-by-20 Counter with enables'
// enable CEP is a clock enable only
// enable CET is a clock enable and
// enables the TC output
// a counter using the Verilog language
parameter size = 5;
parameter length = 20;
input rst; // These inputs/outputs represent
input clk; // connections to the module.
input cet;
input cep;
output [size-1:0] count;
output tc;
reg [size-1:0] count; // Signals assigned
// within an always
// (or initial)block
// must be of type reg
wire tc; // Other signals are of type wire
// The always statement below is a parallel
// execution statement that
// executes any time the signals
// rst or clk transition from low to high
always @ (posedge clk or posedge rst)
if (rst) // This causes reset of the cntr
count <= {size{1'b0}};
else
if (cet && cep) // Enables both true
begin
if (count == length-1)
count <= {size{1'b0}};
else
count <= count + 1'b1;
end
// the value of tc is continuously assigned
// the value of the expression
assign tc = (cet && (count == length-1));
endmodule
```
다음은 지연(delay) 예제이다.:
```verilog
...
reg a, b, c, d;
wire e;
...
always @(b or e)
begin
a = b & e;
b = a | b;
#5 c = b;
d = #6 c ^ e;
end
```
베릴로그에서 상수의 정의는 폭 매개변수의 추가를 지원한다. 기본 구문은 다음과 같다.
<''비트 단위의 폭''>'<''기수 문자''><''숫자''>
예시:
- 12'h123 – 16진수 123 (12비트 사용)
- 20'd44 – 10진수 44 (20비트 사용 – 0 확장 자동)
- 4'b1010 – 2진수 1010 (4비트 사용)
- 6'o77 – 8진수 77 (6비트 사용)
3. 2. 합성 가능한 구문
베릴로그 코드 중 일부는 논리 합성 도구를 통해 실제 하드웨어(게이트 수준 넷리스트)로 변환될 수 있다. 합성 가능한 코드는 일반적으로 레지스터 전송 레벨(RTL) 스타일로 작성된다.기본적인 합성 가능 구문:
- 플립플롭 (Flip-Flop):
```verilog
module toplevel(clock,reset);
input clock;
input reset;
reg flop1;
reg flop2;
always @ (posedge reset or posedge clock)
if (reset)
begin
flop1 <= 0;
flop2 <= 1;
end
else
begin
flop1 <= flop2;
flop2 <= flop1;
end
endmodule
```
- `<=` 연산자는 "논블로킹(non-blocking)" 할당으로, 클럭 발생 시 병렬로 동시에 실행된다. `=` 연산자는 "블로킹(blocking)" 할당으로, 순차적으로 실행된다.
- 위 예제에서 `<=` 대신 `=`를 사용하면 `flop1`과 `flop2`는 값을 교환하지 않고 유지한다.
- 카운터 (Counter):
```verilog
module Div20x (rst, clk, cet, cep, count, tc);
parameter size = 5;
parameter length = 20;
input rst;
input clk;
input cet;
input cep;
output [size-1:0] count;
output tc;
reg [size-1:0] count;
wire tc;
always @ (posedge clk or posedge rst)
if (rst)
count <= {size{1'b0}};
else
if (cet && cep)
begin
if (count == length-1)
count <= {size{1'b0}};
else
count <= count + 1'b1;
end
assign tc = (cet && (count == length-1));
endmodule
```
- 지연 (Delay):
```verilog
reg a, b, c, d;
wire e;
always @(b or e)
begin
a = b & e;
b = a | b;
#5 c = b;
d = #6 c ^ e;
end
```
- `always @(b or e)`는 `b` 또는 `e`가 변경될 때마다 블록이 실행됨을 의미한다.
- `#5`는 5 시간 단위 지연을, `#6`는 6 시간 단위 지연을 나타낸다.
- MUX (Multiplexer):
```verilog
// 연속 할당 사용
wire out;
assign out = sel ? a : b;
// 절차적 표현 사용
reg out;
always @(a or b or sel)
begin
case(sel)
1'b0: out = b;
1'b1: out = a;
endcase
end
// if/else 사용
reg out;
always @(a or b or sel)
if (sel)
out = a;
else
out = b;
```
- 투명 래치 (Transparent Latch):
```verilog
reg latch_out;
always @(gate or din)
if(gate)
latch_out = din; // 통과 상태
```
- `gate`가 1이면 `din`이 `latch_out`으로 전달되고, `gate`가 0이면 `latch_out`은 이전 값을 유지한다.
- D 플립플롭:
```verilog
reg q;
always @(posedge clk)
q <= d;
```
- `posedge clk`는 클럭의 상승 에지에서 동작이 실행됨을 의미한다.
- always 절 내에서 `posedge` 또는 `negedge`를 사용할 때는 `<=` 를 사용하는 것이 일반적이다.
- 비동기 리셋을 포함한 D플립플롭:
```verilog
reg q;
always @(posedge clk or posedge reset)
if(reset)
q <= 0;
else
q <= d;
```
- `reset`이 활성화되면(1이 되면) `q`는 0으로 초기화된다.
- 프로세스 선언:
- `always`: 지정된 조건 변화 발생시 또는 영구적으로 반복 실행되는 프로세스를 나타낸다.
- `initial`: 한 번만 실행되는 프로세스를 나타낸다.
- `always` 블록의 추가적 용법
```verilog
always
begin //항상 0시간에 실행을 시작하고 멈추지 않는다.
clk = 0; //clk를 0으로 둔다.
#1; //1시간 대기
clk = 1;//clk를 1로 둔다.
#1;//1시간 대기
end //계속 실행된다. 따라서 begin의 맨 위로 계속 진행한다.
```
- `always`키워드는 C언어의 `while(1){...}`과 같이 영원히 실행된다.
```verilog
initial forever
begin
clk = 0;
#1;
clk = 1;
#1;
end
```
- initial에 `forever`를 추가하여 `always`와 동일하게 작동하도록 한다.
일반 규칙:
- 프로세스 (initial 또는 always 블록) 내부에서 구동되는 신호는 `reg` 타입이어야 한다.
- 프로세스 외부에서 구동되는 신호는 `wire` 타입이어야 한다.
- `reg` 키워드가 반드시 하드웨어 레지스터를 의미하는 것은 아니다.
4. 데이터 타입
베릴로그에서 사용되는 주요 데이터 타입은 다음과 같다.
- `wire`: 회로 내의 연결(선)을 나타낸다.
- `reg`: 값을 저장할 수 있는 변수를 나타낸다. `reg` 타입이라고 해서 반드시 하드웨어 레지스터를 의미하는 것은 아니다.[10]
- `integer`: 정수형 변수이다.
- `parameter`: 상수를 정의할 때 사용한다.
베릴로그는 0, 1, Z (하이 임피던스), X (알 수 없는 논리 값)의 네 가지 값을 가지는 4값 논리를 사용한다.[10]
상수는 다음과 같은 형식으로 표현한다.
`<비트 단위의 폭>'<기수 문자><숫자>`
예시 | 설명 |
---|---|
`12'h123` | 16진수 123 (12비트 사용) |
`20'd44` | 10진수 44 (20비트 사용 – 0 확장 자동) |
`4'b1010` | 2진수 1010 (4비트 사용) |
`6'o77` | 8진수 77 (6비트 사용) |
5. 연산자
베릴로그는 하드웨어 동작을 기술하기 위해 다양한 연산자를 제공한다. 다음은 베릴로그에서 사용되는 주요 연산자들을 표로 정리한 것이다.
연산자 유형 | 연산자 기호 | 수행되는 연산 |
---|---|---|
비트 단위 | ~ | 비트 NOT (1의 보수) |
& | 비트 AND | |
> | 비트 OR | |
^ | 비트 XOR | |
~^ 또는 ^~ | 비트 XNOR | |
논리 | ! | 논리 NOT |
&& | 논리 AND | |
논리 OR | ||
축소 | & | 축소 AND |
~& | 축소 NAND | |
> | 축소 OR | |
~> | 축소 NOR | |
^ | 축소 XOR | |
~^ 또는 ^~ | 축소 XNOR | |
산술 | + | 덧셈 |
- | 뺄셈 | |
- | 2의 보수 (음수) | |
* | 곱셈 | |
/ | 나눗셈 | |
** | 거듭제곱 (Verilog-2001) | |
관계 | > | 보다 큼 |
< | 보다 작음 | |
>= | 크거나 같음 | |
<= | 작거나 같음 | |
== | 논리적 같음 (X, Z 값은 비교에서 제외) | |
!= | 논리적 같지 않음 (X, Z 값은 비교에서 제외) | |
=== | 4상태 논리적 같음 (X, Z 값을 문맥 그대로 비교) | |
!== | 4상태 논리적 같지 않음 (X, Z 값을 문맥 그대로 비교) | |
시프트 | >> | 논리적 우측 시프트 |
<< | 논리적 좌측 시프트 | |
>>> | 산술적 우측 시프트 (Verilog-2001) | |
<<< | 산술적 좌측 시프트 (Verilog-2001) | |
연결 | { , } | 여러 신호를 묶어 하나의 신호로 만듦 |
복제 | {n{m}} | 신호 m을 n번 반복 |
조건 | ? : | 조건에 따라 값을 선택 (C 언어의 삼항 연산자와 유사) |
6. 시스템 태스크
베릴로그의 시스템 태스크는 시뮬레이션 중 입출력 및 설계 측정 기능을 수행하는 데 사용된다. 시스템 태스크는 사용자 정의 태스크 및 함수와 구별하기 위해 `$` 접두사를 사용한다. 주요 시스템 태스크는 다음과 같다.[1]
- 화면 출력:
- `$display`: 자동으로 줄 바꿈을 추가하여 화면에 내용을 출력한다.
- `$write`: 줄 바꿈 없이 화면에 내용을 출력한다.
- 파일 입출력:
- `$fopen`: 파일을 연다.
- `$fdisplay`: 파일에 내용을 쓰고 줄 바꿈을 추가한다.
- `$fwrite`: 파일에 내용을 쓰지만 줄 바꿈은 추가하지 않는다.
- `$fclose`: 파일을 닫는다.
- 메모리 초기화:
- `$readmemh`: 16진수 파일 내용을 메모리 배열로 읽는다.
- `$readmemb`: 이진 파일 내용을 메모리 배열로 읽는다.
- 기타:
- `$monitor`: 신호 값이 변경될 때마다 지정된 변수 값을 출력한다.
- `$time`: 현재 시뮬레이션 시간을 반환한다.
- `$dumpfile`, `$dumpvars`, `$dumpports`: VCD (Value Change Dump) 파일을 생성한다. `$dumpfile`은 VCD 파일 이름을, `$dumpvars`는 변수를 VCD 파일에, `$dumpports`는 확장 VCD 형식으로 변수를 기록한다.
- `$random`: 난수를 생성한다.
7. 프로그램 언어 인터페이스 (PLI)
PLI는 프로그래머에게 베릴로그에서 C 언어로 작성된 프로그램 함수로 제어를 전송하는 메커니즘을 제공한다.[11] 이는 IEEE Std 1364-2005에서 최신 베릴로그 절차 인터페이스(VPI)를 선호하여 공식적으로 더 이상 사용되지 않음으로 지정되었으며, PLI를 완전히 대체한다.
PLI(현재 VPI)는 베릴로그가 테스트 하네스, 명령어 집합 시뮬레이터, 마이크로컨트롤러, 디버거 등 C 언어로 작성된 다른 프로그램과 협력할 수 있게 한다. 예를 들어, C 함수 `tf_putlongp()`[11] 및 `tf_getlongp()`[12]는 각각 현재 베릴로그 태스크 또는 함수의 64비트 정수 인수를 쓰고 읽는 데 사용된다. 32비트 정수의 경우 `tf_putp()`[13] 및 `tf_getp()`[14]가 사용된다.
8. 관련 언어
참조
[1]
간행물
Genetic circuit design automation
[2]
간행물
Verilog's inventor nabs EDA's Kaufman award
http://www.eetimes.c[...]
2005-11-07
[3]
서적
Proceedings of International Computer Symposium 1980, Taipei, Taiwan, December 1980
[4]
웹사이트
Oral History of Philip Raymond "Phil" Moorby
http://archive.compu[...]
Computer History Museum
2013-04-22
[5]
IEEE
IEEE 1800-2012
https://standards.ie[...]
IEEE
[6]
IEEE
IEEE 1800-2017
https://standards.ie[...]
IEEE
[7]
IEEE
IEEE 1800-2023, IEEE Approved Draft Standard for SystemVerilog--Unified Hardware Design, Specification, and Verification Language
https://standards.ie[...]
IEEE
[8]
웹사이트
SystemVerilog – Is This The Merging of Verilog & VHDL?
http://www.sunburst-[...]
SNUG Boston 2003
[9]
서적
Verilog — 2001
Springer US
2002
[10]
서적
Multiple valued logic: concepts and representations
Morgan & Claypool
[11]
웹사이트
IEEE Standard Verilog® Hardware Description Language
https://perso.teleco[...]
2023-11-12
[12]
웹사이트
IEEE Standard Verilog® Hardware Description Language
https://perso.teleco[...]
2023-11-12
[13]
웹사이트
IEEE Standard Verilog® Hardware Description Language
https://perso.teleco[...]
2023-11-25
[14]
웹사이트
IEEE Standard Verilog® Hardware Description Language
https://perso.teleco[...]
2023-11-25
[15]
간행물
Genetic circuit design automation
http://science.scien[...]
[16]
IEEE
1364-1995 IEEE Standard Hardware Description Language Based on the Verilog(R) Hardware Description Language
http://ieeexplore.ie[...]
[17]
IEEE
1364-2001 IEEE Standard Verilog Hardware Description Language
http://ieeexplore.ie[...]
[18]
IEEE
1364-2005 IEEE Standard for Verilog Hardware Description Language
http://ieeexplore.ie[...]
[19]
웹사이트
http://standards.iee[...]
[20]
웹사이트
SystemVerilog — Is This The Merging of Verilog & VHDL?
http://www.sunburst-[...]
SNUG Boston 2003
2003
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com