Идентификация параметров нелинейной модели УВХ на Verilog-A
Введение
В [1] рассмотрен процесс идентификации квазилинейной модели УВХ. Однако такая модель не учитывает нелинейности передаточной характеристики УВХ. Популярной универсальной моделью, учитывающей нелинейность, является модель Хаммерштайна [2] (рис. 1). Эта модель состоит из нелинейного блока без памяти, описывающего статическую нелинейность системы, и линейного блока с памятью, описывающего линейную динамику системы.
Данная модель хорошо подходит для описания устройств, которые не имеют нелинейной динамики, однако не могут быть описаны как полностью линейная система. Для идентификации нелинейного блока был разработан специальный Verilog-A модуль, позволяющий строить DC-характеристику системы, чьи параметры зависят от тактового сигнала. Линейный блок может быть идентифицирован на основе проведения AC-анализа, как описано в [1].
DC-характеристика тактируемого устройства
На рис. 2 показана схема измерения DC-характеристики УВХ. Verilog-A модуль выдает постоянный сигнал на вход УВХ в течение времени, достаточного для установки выходного сигнала (УВХ находится в режиме выборки). Затем Verilog-A модуль выдает перепад тактового сигнала, переводя УВХ в режим хранения. Установившееся значение на выходе УВХ записывается в выходной файл. После этого Verilog-A модуль переводит УВХ в режим выборки и переходит к следующему значению напряжения на входе УВХ.
Verilog-A модуль для DC-анализа тактируемых схем:
01 module DCTestGenerate (SHin, SHout, Sample); 02 output SHin, Sample; // Вход УВХ и тактовый сигнал 03 input Shout; // Выход УВХ 04 05 electrical SHin,Sample,SHout; 06 07 //Период тактового сигнала 08 parameter real T = 4u; 09 //Ширина импульса тактового сигнала, соответствует режиму УВХ «выборка» 10 parameter real PW = 1u; 11 //Шаг напряжения 09 parameter real SHoutStep = 0.00022; // Момент записи устоявшегося значения на выходе УВХ 10 parameter real m=0.9 from (0:1); 11 12 real Vout,Vs; // Численное значение выходного напряжения и напряжения тактового сигнала 13 integer out_file; // Дескриптор выходного файла 14 // Аналоговый процесс 15 analog begin 16 //Установка начальных значений 17 @(timer(0)) begin 18 Vout=0; 19 Vs=3.3; 20 out_file = $fopen(“LOG.DAT” ); 21 $fstrobe(out_file,“SH input, SH output”); 22 end 23 //Переход в режим хранения 24 @(timer(PW,T) Vs=0; 25 //Переход в режим выборки и изменение уровня выходного напряжения 23 @(timer(T,T)) begin 24 Vout=Vout+SHoutStep; 25 Vs=3.3 26 end 27 //Запись в файл значения напряжения на выходе УВХ 28 @(timer(PW+m*(T-PW),T)) $fstrobe(out_file,“%f, %f”, V(SHin),V(SHout)); 29 30 V(SHin)<+transition(Vout,0,10n); 31 V(Sample)<+transition(Vs,0,10n); 32 33 end 34 endmodule |
В результате выполнения временного анализа пользователь получает стандартный CSV (Comma Separated Values) файл, который может быть передан для обработки в MATLAB.
Аппроксимация DC-характеристики
Стандартным способом аппроксимации слабонелинейной функции является аппроксимация полиномом вида:
Подобная аппроксимация может быть выполнена в системе Mathworks MATLAB с использованием средства Curve Fitting Tool. На рис. 3 показана ошибка аппроксимации для схемы УВХ, выполненного по технологии 0,35 мкм, для 14-разрядного АЦП. DC-анализ проводился с шагом 200 мкВ, что соответствует значению младшего разряда АЦП. Ошибка не превышает значения 100 мкВ (половины младшего разряда АЦП), степень полинома N = 9.
Аппроксимация DC-характеристики может быть напрямую использована в Verilog-A описании нелинейного блока без памяти:
01 module NonlinearBlockNM (in,out); 02 input in; 03 output out; 04 electrical in,out; 05 06 real OUT; 07 parameter real a0=0 ; 08 ѕ 09 parameter real a9=0 ; 10 11 analog begin 12 // Уравнение аппроксимации 13 OUT=a0+a1*V(in)+a2*pow(V(in),2)+ѕ+a9*pow(V(in),9); 14 V(out)<transtion(OUT,0,1n); 15 end 16 17 endmodule |
Идентификация линейного блока
После выполнения AC-анализа и аппроксимации, как изложено в [1], мы получим передаточную функцию вида:
Однако, так как в данной модели линейный блок действует не непосредственно на входной сигнал s(t), а на выходной сигнал нелинейного блока x(t), передаточная функция (2) соотносится с изображением входного сигнала как:
где g0 — первая производная от полинома (1) при s(t) = const: постоянный уровень «большого» сигнала на входе, при котором снималась AC-характеристика. Таким образом, для того чтобы получить передаточную функцию линейного блока модели, необходимо выполнить:
После этого линейный блок может быть представлен в виде Verilog-A описания линейного фильтра, как в [1].
Результаты
В процессе проектирования 14-разрядного АЦП последовательных приближений по технологии фабрики AMS, Австрия, с нормами 0,35 мкм была построена модель блока УВХ. Для идентификации параметров использовалась схема, полученная с учетом экстракции паразитных параметров с помощью Mentor Graphics Calibre.
В качестве проверки модели применялся временной анализ полной модели с экстракцией топологических параметров и предложенной модели. В качестве входного сигнала использовался синусоидальный сигнал с амплитудой 80% от полной шкалы и частотой 10 кГц и случайным шумом амплитудой 10% от полной шкалы. Использование случайного шума позволяет оценить точность модели для широкого спектра входных сигналов. Схема моделирования в окне САПР Cadence Virtuoso показана на рис. 4.
Модуль генерации тестовых воздействий:
01 module TestGenerate (SHAin, SHAout, Sample); 02 output SHAin, Sample; 03 input SHAout; 04 05 electrical SHAin, SHAout, Sample; 06 07 parameter real SampleDuration=0.2u; 08 parameter real T=1u; 09 parameter real m=0.09 from (0:1); // Установка времени записи // выходного сигнала // тестируемой схемы 10 parameter real Fin=100K; // Частота входного сигнала 11 parameter real Ain=3; // Амплитуда входного сигнала 12 parameter real NoiseAmpl=0.01; // Амплитуда шума 13 parameter real Offset=1.65; // Смещение входного сигнала 14 15 integer randseed; // Инициализирующее значение // генератора случайных чисел 16 real randnum, noise,sample; 17 integer Outfile; 18 19 analog begin 21 // Установка начальных значений 22 @ (initial_step) begin 23 randseed = 123; 24 Outfile=$fopen(“OUT.DAT”); 25 sample=3.3; 26 end 27 // Тактовый генератор для тестируемой схемы (1) 28 @ (timer(SampleDuration,T)) begin 29 sample=0; 30 end 31 // Запись выходного сигнала тестируемой схемы 32 @(timer(SampleDuration+m*(T-SampleDuration),T)) begin 33 $fstrobe(Outfile,”%f”,3.3-V(SHAout)); 34 $strobe(“%f”,3.3-V(SHAout)); 35 end 36 // Тактовый генератор для тестируемой схемы (2) 37 @ (timer(T-SampleDuration,T)) begin 38 sample=3.3; 39 end 40 // Генерация нового случайного значения 41 randnum=($random(randseed) % 100); 42 // Установка уровня шума 43 noise=transition((randnum/100)*NoiseAmpl,0,10n,10n); 44 // Входной сигнал для тестируемой схемы 45 V(SHAin)<+ Offset + (Ain/2)*cos(`M_TWO_PI * (Fin)*($abstime)) + noise; 46 V(Sample)<+transition(sample,0,10n); 47 end 48 endmodule |
Этот модуль позволяет управлять параметрами сигнала, подаваемого на вход УВХ, а также сохранять значение выходного сигнала в задаваемый пользователем момент времени.
Сравнивалось устоявшееся значение на выходе УВХ для Verilog-A модели и полной модели с экстракцией топологии. Результат теста показан на рис. 5.

Рис. 5. Ошибка моделирования (разница выходных значений для Verilog-A модели и полной модели с экстракцией топологических параметров)
Время выполнения анализа работы 100 мкс устройства для предложенной модели — 20 c и 40 мин — для полной модели. Таким образом, обеспечивается существенное ускорение моделирования систем, содержащих данный блок в качестве СФ-блока, с сохранением точности.
Заключение
Рассмотрен процесс идентификации модели Хаммерштайна для схем выборки-хранения. Приведены необходимые Verilog-A модули для характеризации линейного и нелинейного блоков модели. Использование предложенной модели может существенно ускорить процесс моделирования системы, содержащей моделируемый блок.