Languages

CommunityCategory: XMODELXMODEL은 feedback loop이 포함된 시스템을 어떻게 시뮬레이션하나요?

XMODEL

XMODEL은 feedback loop이 포함된 시스템을 어떻게 시뮬레이션하나요?

SA Support Team Staff 2019-03-15

제가 사용해본 behavioral simulator들은 feedback이 포함된 시스템들을 잘 못 다룹니다. 예를 들어, 아래처럼 feedback 증폭기를 단순한 Real-Number Verilog코드로 모델링한 경우, 시뮬레이션 중 event가 매우 자주 발생하여 속도가 과도하게 느리거나, 수치적인 불안정성으로 계산되는 출력값이 발산해버리는 문제들이 자주 발생합니다. XMODEL에는 이러한 문제가 없나요?

module invamp;

real Vin, Vout, Vx;

parameter real R1 = 1000.0;
parameter real R2 = 2000.0;
parameter real Av = 10.0;
parameter real Vos = 0.1;

initial begin
    Vin = 1.0;
    Vout = 0.0;
end

always begin
    #1;
    Vx = (R1 * Vout + R2 * Vin) / (R1 + R2);
    Vout = Av * (0 - Vx - Vos);
    $display("Vout = ", Vout);
end

endmodule
1 Answers
Best Answer
SA Support Team Staff 2019-03-15

말씀하신 문제는 사실 회로나 시스템을 forward Euler 방식으로 시뮬레이션하면 흔히 발생하는 문제입니다. 대상 시스템이 안정적이더라도, 각 신호의 값들을 전파되는 방향대로 순차적으로 계산하는 forward Euler 방식으로 시뮬레이션하면 불안정한 결과를 얻을 수 있습니다 (참고: https://en.wikipedia.org/wiki/Euler_method). 그래서 SPICE 시뮬레이터에서는 backward Euler 방식을 조합한 trapezoidal 방식을 기본적으로 사용합니다.

XMODEL에서 아날로그 시스템을 모델링하는 방법에는 크게 두가지가 있는데, 하나는 function primitive를 사용하여 각 신호가 한 방향으로만 전파되는 signal-flow 모델로 표현하는 방법이고, 다른 하나는 circuit primitive를 사용하여 각 전압과 전류들이 키르히호프 법칙을 만족하는 conservative system 모델로 표현하는 방법입니다. 전자의 경우에는 예시로 든 모델과 같이 forward Euler 방식으로 시스템이 시뮬레이션되기 때문에 같은 문제를 일으킬 수 있습니다. 그러나 후자의 경우에는 XMODEL이 feedback을 포함한 전체 회로를 하나의 시스템으로써 시뮬레이션하기 때문에, event-driven 방식의 빠르고 정확한 시뮬레이션이 가능합니다.

다시 말씀드려서, 예시와 같이 연속적인 feedback이 있는 회로의 경우에는 circuit primitive를 사용하여 모델링하면, 다른 behavioral simulator 보셨던 문제들 없이 빠르고 정확한 시뮬레이션을 수행할 수 있습니다. 참고로 XMODEL은 SystemVerilog상에서 circuit primitive를 제공하는 유일한 솔루션입니다.