베릴로그-AMS

**베릴로그-AMS**(Verilog-AMS)는 아날로그 및 혼합 신호 시스템의 동작을 정의하기 위해 아날로그 및 혼합 신호 확장(AMS)을 포함하는 베릴로그 하드웨어 기술 언어의 파생 언어이다. 이는 베릴로그/시스템베릴로그/VHDL의 이벤트 기반 시뮬레이터 루프를 연속 시간 시뮬레이터로 확장하며, 이는 아날로그 도메인의 미분방정식을 해결한다. 두 도메인은 서로 연결되어 있어, 아날로그 이벤트가 디지털 동작을 유발할 수 있고 그 반대도 가능하다.

## 개요
베릴로그-AMS 표준은 아날로그 및 혼합 신호 시스템 및 집적 회로 설계자들이 시스템 및 구성 요소의 고수준 행동 설명뿐만 아니라 구조적 설명을 캡슐화하는 모듈을 생성하고 사용할 수 있도록 의도적으로 만들어졌다.

베릴로그-AMS는 혼합 신호 회로를 위한 산업 표준 모델링 언어이다. 이는 연속 시간 및 이벤트 기반 모델링 의미론을 모두 제공하므로 아날로그, 디지털 및 혼합 아날로그/디지털 회로에 적합하다. 특히 매우 복잡한 아날로그, 혼합 신호 및 RF 집적 회로의 검증에 적합하다.

베릴로그와 베릴로그/AMS는 절차적 프로그래밍 언어가 아니라 이벤트 기반 하드웨어 기술 언어(HDL)이다. 따라서 이들은 병렬 동작 및 이벤트의 정의 및 동기화를 위한 정교하고 강력한 언어 기능을 제공한다. 반면에 HDL 프로그램 문장에 정의된 많은 동작은 병렬로 실행될 수 있다 (절차적 언어의 스레드 및 태스크와 다소 유사하지만 훨씬 세분화되어 있다). 그러나 베릴로그/AMS는 시뮬레이터의 베릴로그 절차적 인터페이스를 사용하여 ANSI C 언어와 같은 절차적 언어와 연결될 수 있어 테스트 스위트 구현을 용이하게 하고 레거시 코드 또는 테스트벤치 장비와의 상호 작용을 허용한다.

베릴로그-AMS 위원회의 원래 의도는 아날로그 및 디지털 설계를 위한 단일 언어였지만, 통합 과정의 지연으로 인해 베릴로그는 시스템베릴로그로 발전하여 IEEE로 넘어갔고, 베릴로그-AMS는 Accellera에 남아있다.

## 코드 예시
베릴로그/AMS는 베릴로그 디지털 HDL의 상위 집합이므로 디지털 도메인의 모든 문은 베릴로그와 동일하게 작동한다(예시는 해당 문서를 참조). 모든 아날로그 부분은 베릴로그-A와 동일하게 작동한다.

다음 베릴로그-AMS 코드 예시는 디지털 신호에 의해 트리거되는 아날로그 처리의 예시인 DAC를 보여준다.

```verilog
`include "constants.vams"
`include "disciplines.vams"
// Simple DAC model
module dac_simple(aout, clk, din, vref);

	// Parameters
	parameter integer bits = 4 from [1:24];
	parameter integer td = 1n from[0:inf);  // Processing delay of the DAC

	// Define input/output
	input clk, vref;
	input [bits-1:0] din;
	output aout;

	//Define port types
	logic clk;
	logic [bits-1:0] din;
	electrical  aout, vref;

	// Internal variables
	real aout_new, ref;
	integer i;

	// Change signal in the analog part
	analog begin
		@(posedge clk) begin // Change output only for rising clock edge

			aout_new = 0;
			ref = V(vref);

			for(i=0; i<bits; i=i+1) begin
				ref = ref/2;
				aout_new = aout_new + ref * din[i];
			end
		end
		V(aout) <+ transition(aout_new, td, 5n); // Get a smoother transition when output level changes
	end
endmodule
```

ADC 모델은 디지털 블록에서 아날로그 신호를 읽는다.

```verilog
`include "constants.vams"
`include "disciplines.vams"
// Simple ADC model
module adc_simple(clk, dout, vref, vin);

	// Parameters
	parameter integer bits = 4 from[1:24]; // Number of bits
	parameter integer td = 1 from[0:inf);  // Processing delay of the ADC

	// Define input/output
	input clk, vin, vref;
	output [bits-1:0] dout;

	//Define port types
	electrical vref, vin;
	logic clk;
	reg [bits-1:0] dout;

	// Internal variables
	real ref, sample;
	integer i;

	initial begin
		dout = 0;
	end

	// Perform sampling in the digital blocks for rising clock edge
	always @(posedge clk) begin

		sample = V(vin);
		ref = V(vref);

		for(i=0; i<bits; i=i+1) begin

			ref = ref/2;

			if(sample > ref) begin
				dout[i] <= #(td) 1;
				sample = sample - ref;
			end
			else
				dout[i] <= #(td) 0;
		end
	end
endmodule
```


## 구현
이 언어는 초기에는 상업 회사에서만 지원되었지만, 행동 모델링 하위 집합인 "베릴로그-A"의 일부는 트랜지스터 모델링 커뮤니티에서 채택되었다. ADMS 변환기는 Xyce 및 ngSPICE와 같은 오픈 소스 시뮬레이터를 지원한다. 보다 완전한 구현은 이제 OpenVAF를 통해 사용할 수 있다. 포스트-SPICE 시뮬레이터 Gnucap은 표준 문서에 따라 설계되었으며, 시뮬레이터 수준과 행동 모델링 모두에 대한 베릴로그-AMS 지원이 증가하고 있다.

## 같이 보기
* VHDL-AMS

## 각주


## 외부 링크
* I. Miller and T. Cassagnes, "Verilog-AMS Eases Mixed Mode Signal Simulation," Technical Proceedings of the 2000 International Conference on Modeling and Simulation of Microsystems, pp.&nbsp;305–308, Available: https://web.archive.org/web/20070927051749/http://www.nsti.org/publ/MSM2000/T31.01.pdf

### 일반
* Accellera 베릴로그 아날로그 혼합 신호 그룹
* verilogams.com — 베릴로그-AMS 및 베릴로그-A 사용자 매뉴얼
* 디자이너 가이드 커뮤니티, 베릴로그-A/MS — 베릴로그-AMS로 작성된 모델 예시
* EDA.ORG AMS 위키 - 문제, 미래 개발, 시스템베릴로그 통합

### 오픈 소스 구현
* OpenVAMS, 내부 VPI 유사 표현을 가진 오픈 소스 베릴로그-AMS-1.3 파서
* V2000 프로젝트 - 베릴로그-AMS 파서 및 정밀화 도구
* OpenVAF 베릴로그-A 컴파일러
* Xyce
* Gnucap

분류:하드웨어 기술 언어