The TransistoriZed logo should be here! But... curses! Your browser does not support SVG!

homelist of postsdocs about & FAQ

Offset measurement of latched comparators.

During comparator design one is often (but not always) interested in the systematic and mismatch-related offset. When dealing with continuous-time open-loop comparators the offset measurement methodology is similar conventional OTA offset measurement e.g. DC sweep, while latched comparators require a somewhat more discrete-like manner of measuring offset.

One possible approach is to use a very precise (long sloped) linear ramp, and using massive oversampling and comparator decision storage. This approach seems to be a bit tedious as its precision is solely dependent on the ramp's slope.

A basic illustration of the linear ramp method.
A basic illustration of the linear ramp method.

An alternative method for measuring offset of latched comparators would be the binary search method. One can possibly use an ideal DAC to apply "search" voltages and depending on the comparator's decision reach a settling value with a constant binary-weighted precision. E.g. to achieve 16 bits of search accuracy only 16 cycles would be required. Here are some basic illustrative examples of the two methods.

An illustration of the binary search method.
An illustration of the binary search method.

The binary search method for measurement can be applied in various ways. One practical implementation was to implement the algorithm using Verilog-A and directly add a "search" instance where you can test your comparator directly in your existing SPICE simulation. Here is a very simple example of a possible implementation.

Code update guidelines after a reader's feedback. Thanks Stefi!

Hi, I changed some of your code because I found the array method quite confusing. What is the reason for using a large lookup table? This way, you are calculating all the values 2^16 values instead of just the 16 ones needed... I used something like: if (CompDecision > vTransComp) begin // Comparator output is high, inp>inn, ->make inp smaller iTop = iCompinp; iCompinp = iBot + (iTop-iBot)/2; end else begin // Comparator output is low, inp < inn, make inp larger iBot = iCompinp; iCompinp = iBot + (iTop-iBot)/2; end thus directly calculating the values if needed. The iteration stops after 16 cycles, which is the same as having a resolution of 16. So I just tried to keep it easy so I can understand it. Just my 2¢ regards, Stefi

Indeed there is no need to calculate all 2^N code steps and later on comare them in a look-up table fashion. This is some code inefficiency which has not been realized back in the day, my lord... Nevertheless, the code (either way) works and it is the concept that matters. For this reason I have left the old code untouched, as it has been tested. I am however encouraging you to explore and write your own implementaton. Nevertheless, here's the original version and an aka inefficient implementation:

// VerilogA for daisyCycAd, daisyCycAdBinSchSAR, veriloga
// A component handy in comparator offset measurement. Uses a binary search algorithm with a "dive" coefficient of 2. See comments for more information.
// Initial version P1A - Deyan Dimitrov

`include "constants.vams"
`include "disciplines.vams"

module daisyCycAdBinSchSAR(vCompIn, vCompOut, vClk, vdd, gnd, vCompRef);

input vCompIn, vClk;

output vCompOut, vCompRef;

inout vdd, gnd;

electrical vCompIn, vCompOut, vClk, vdd, gnd, vCompRef;

parameter real vTransClk = 1.65;
parameter real vTransComp = 1.65;
parameter real vSchTop = 3.3;
parameter real vSchBot = 0;
parameter real vCompReference = 1.5;
//parameter integer Resolution = 16;
parameter integer NrOfCodes = 65535;
//parameter real tCompSpeed = 100e-12;
real vRefInReal;
real vBinSch;
real vComp;
real scharray[0:NrOfCodes];
//real next;
integer imid;
integer imin;
integer imax;
integer i;
integer codes;

analog begin


       vBinSch = vSchBot + (vSchTop-vSchBot)/2;  // Mid point as a start of the search

       imin = 0;
       imax = NrOfCodes-2;
       imid = (NrOfCodes-2)/2;

       	   for (i = 0; i < NrOfCodes-1; i = i + 1) begin
       	     scharray[i] = (((vSchTop-vSchBot)/NrOfCodes)*i)+vSchBot;   // Creating reference array

	   $strobe("Array Max %g", scharray[imax]);
	   $strobe("Array Min %g", scharray[imin]);


       @(cross(V(vClk) - vTransClk, 1)) begin

//       next = $abstime + tCompSpeed;    // Possible internal compensation for comparator's delay
//       end
//       @(timer(next)) begin
//       $strobe("Imax: %d", imax);
//       $strobe("Imid: %d", imid);
//       $strobe("Imin: %d", imin);

       vComp = V(vCompIn);   // Strobe comparator decision
//       vRefInReal = V(vRefIn, gnd);

       if (imax >= imin) begin	// Continue searching if imax >= imin

       	  if (V(vCompIn) > vTransComp) begin      // Find-out which sub-array to search
//       	  vBinSch = vBinSch + (vSchTop-vBinSch)/2;
		  imin = imid + 1;	          // Change min index for the upper sub-array
		  imid = imin + ((imax-imin)/2);  // Update imid to be used for strobing-out
//       	  vBinSch = vBinSch - (vBinSch-vSchBot)/2;
		  imax = imid - 1;		  // Change max index for the upper sub-array
		  imid = imin + ((imax-imin)/2);  // Update imid to be used for strobing-out


       vBinSch = scharray[imid];		  // Look-up at the reference array and assign to vBinSch (Votage to be strobed-out)

       V(vCompOut) <+ vBinSch;			  // Update search voltage
       V(vCompRef) <+ vCompReference; 		  // Update comparator reference



The whole principle is simple and self-explanatory. Some delay between the latch clock and S/H clock of the search component is required to compensate for the comparator's speed. Here are some practical usage illustrations.

A primitive testbench proposal.
A primitive testbench proposal.
Component settings.
Component settings.
Offset search progress.
Offset search progress.

If you find this useful the component's symbol for Virtuoso 6 as well as the *.va code can be found here.

Date:Sun Mar 11 12:46:50 CEST 2014


08 Jul 2017, 02:19

Thank you very much for sharing such a fantastic experience.

Would you please share ADE too? or give more details on the parameters? I want to resimulate the test bench with Verilog-A comparator and check with the result you showed to make sure that I am in aright path.

Many Thanks
Deyan Levski
10 Jul 2017, 13:28
Hi Emi,

This block basically forms an ideal successive approximation DAC with one sample delay. Here's a brief info on the parameters and their use:

vTransClk - threshold for the clcok
vTransComp - threshold for the comparator transition
vSchTop - high output voltage level
vSchBot - low output voltage level
vCompReference - reference voltage for the comparator
NrOfCodes - number of sar search codes this determines the iterations

I think you can try pasting this veriloga module into an indivisual block and play around with the testbench. I am not sure if I keep all ADE simulation states for this module, but it really is straight forward and nothing complicated.

Thanks and let me know if you haven't wrapped it around.
29 Oct 2018, 07:58
I am facing prob with `include "constants.vams" `include "disciplines.vams"
29 Oct 2018, 09:03
Hmmm, that's odd. What SPICE engine are you using?
16 Jan 2019, 15:38
Visitors to room can find many questionnaires girl of any age and nationality performing Happy ending massage in the city Uptown.

Masseuses are able not only to give pleasure in this way, but also to demonstrate their other abilities to men of the stronger sex. Girls perform japanese a massage that will produce a male a vivid impression.
Prices for japanese massage depends on qualification Specialist and the skills that she possesses. Before making a choice, carefully study the prices for services and customer feedback about the work of one or another masseur specialist. We are sure that the search for a real professional masseur will be crowned with success and you will be satisfied with the quality of our services. Women are skilled workers in their field and they will help you relax after a hard day.

Massage room Manhattan. - <a href=>Intimate massage in nyc</a>
28 Mar 2019, 20:58
У нас имеется к продаже БИОЛОГИЧЕСКАЯ ЗАГРУЗКА, Резервуары и емкости прямоугольные, Тихоходные мешалки, Мешочные фильтры, Технические колодцы, Плавающая загрузка (ПЗ), Комплексы реагентного хозяйства (КРХ), ОДЪЕМНЫЕ УСТРОЙСТВА И МЕТАЛЛОКОНСТРУКЦИИ Ангары, Павильоны, ВОДООЧИСТНОЕ ОБОРУДОВАНИЕ Флотационные системы (Флотаторы), ПОДЪЕМНЫЕ УСТРОЙСТВА И МЕТАЛЛОКОНСТРУКЦИИ Шнеки из конструкционной и нержавеющей стали, ОЧИСТКА ЛИВНЕВЫХ СТОЧНЫХ ВОД Пескоотделители, НАСОСНОЕ И КОМПРЕССОРНОЕ ОБОРУДОВАНИЕ (Грунфос, КСБ, Вило, КИТ, Взлёт, ТВП) Эрлифты, ВОДОПОДГОТОВКУ Угольный сорбент, а также все для автомойки Автомойки на базе песчанно-гравийной фильтрации.

У нас вы найдете Ремонт очистных сооружений, а также блоки биологической загрузки ббз, мы можем произвести Насосы для скважин. Бурение артезианских скважин, Инженерные изыскания, Ремонт систем водоснабжения.

В нашей фирме диагностирует скважины, производит Анализ воды из скважины.

флокулянт для обезвоживания осадка и блок биологической загрузки ббз 65 <a href=>биозагрузка купить</a>
04 May 2019, 01:03
Агрегатор Яндекс такси-это отличная возможность произвести заказ авто в любое время, куда угодно. Произвести заказ машины можно по телефону, через сайт, набрав оператора и сделать заказ авто.. Вам требуется указать время когда требуется машина, личный номер мобильного, местонахождение.

Можно заказать такси с детским авто креслом для перевозки деток, вечером после посиделок лучше воспользоваться такси, чем сесть в машину нетрезвым, в аэропорт или на вокзал удобнее воспользоваться такси ненужно искать где разместить свою автомашину. Плата выполняется наличным или безналичным переводом. Время подъезда Я. такси составляет от 3 до 5 мин. примерно.

Преимущества работы в Я. такси: Моментальная регистрация в приложение, Небольшая комиссия, Оплата мгновенная, Постоянный поток заказов, Оператор круглые сутки на связи.

Для работы в такси владельцу автомобиля следует оформиться лично и транспортное средство, это займёт не более пяти минут. Процент агрегатора будет составлять не свыше 20 % отдохода. Возможно получить оплату за работу в любое время. У вас всегда будут заказы. В случае вопросов сможете соединиться с постоянно работающей службой сопровождения. Яндекс такси даёт возможность людям очень быстро добраться до места назначения. Заказывая данное Яндекс такси вы получаете наилучший сервис в нашем городе.

работа в такси на арендованной машине = <a href=>яндекс такси как устроиться на работу</a>
04 May 2019, 16:23
Агрегатор Я. такси Самара даёт возможность вам вызвать машинув нужное место и в любое время дня и ночи. Сделать заказ авто вы можете 3 способами: на сайте Яндекс такси, через оператора позвонив нам или воспользовавшись мобильным приложением. Требуется написать время когда нужна машина, свой номер телефона, адрес.

Заказывают Я. такси вместе с детским креслом для перевозки деток, в вечернее время после посиделок лучше всего воспользоваться такси, чем садиться в транспортное средство нетрезвым, на вокзал или в аэропорт спокойнее воспользоваться Yandex такси и даже не думать где разместить свою автомашину. Расчёт происходит безналичным или наличным платежом. Время подъезда Я. такси составляет от пяти до 10 мин. примерно.

Преимущества работы в Я. такси: Моментальная регистрация в приложение, Небольшая комиссия, Оплата мгновенная, Постоянный поток заказов, Оператор круглые сутки на связи.

Для работы в Я. такси водителю необходимо зарегистрироваться самому и автомашину, все это займёт пять мин. Наша комиссия будет составлять не более 15 % отдохода. Можно получить заработную плату в любое время. У вас всегда обязательно будут заказы. В случае вопросов можно соединиться с постоянно работающей службой поддержки. Я. такси даёт возможность гражданам быстро добраться до нужного места. Заказывая данное Yandex такси вы приобретаете шикарный сервис в городе.

работа водителем такси : <a href=>работа такси без личного</a>
Notify me about new comments on this page
Hide my email