Evgenii2 0 1 декабря, 2008 Опубликовано 1 декабря, 2008 · Жалоба Уважаемые форумчане и мой постоянный собеседник oratie! :) Где бы найти информацию о сетапе на характеризацию цифровых селов хоть одного автоматического тула. Как правильно нагрузить экстрактнутый нетлист? Что я имею ввиду: Какой номинал сопротивление между генератором и гейтами входных транзисторов. А может это вовсе не сопротивление а единичный буффер. Вопрос остро стоит из-за возникновения набросов при вычислении внутренней энергии при переключении села. Кривая тока источника во времени на диапазоне переключения может иметь как отрицательные, так и положительные выбросы (зависит от внешней нагрузочной емкости) . Что учитывать, как учитывать? :05: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
oratie 0 2 декабря, 2008 Опубликовано 2 декабря, 2008 · Жалоба Use of the Synopsys Pre-Driver Waveform for Characterization OVERVIEW When obtaining timing characteristics for a standard cell from spice simulation data, the input waveform has a significant effect on the timing measurements. In Liberty NCX there are four methods of creating the input waveform. These are: 1) the 'ramp' method using a linear Hspice PWL source statement. 2) The 'active driver' method with 'active_drv_pwl=false', which uses the output of another cell. 3) a multi-point PWL representation of the active driver output, obtained by using the setting 'active_drv_pwl=true'. 4) the pre-driver method which is analogous to taking the output of a PWL source and passing it through a low-pass filter. The recommended method for best results in most cases is the pre-driver. THEORY OF THE PREDIVER METHOD In an actual design, waveforms seen at an input pin of a cell instance may come from any cell driver in the library and will be modified after passage through a wide range of RC networks. So in an actual design, not fabricated testcases (e.g. where all of the cells are characterized with similar input waveforms), 0% error for gate-level delay-calculation is unattainable. Almost all input waveforms along a design path will differ from any specific characterization stimulus waveform. So, what to do? Picking a specific active driver is bad for several reasons. The first is that in an actual design there are many different driver/load cell combinations; choosing a specific driver improves accuracy for cells driven by the choice at the expense of accuracy for cells driven otherwise. Second, there are many ways to use an active driver to elicit a desired output slew, for example: 1) sweep the output capacitance for fixed input slew, 2) sweep input slew for fixed output capacitance, and 3) a mix of these and/or other termination networks The shape of the output waveform (which is then used as the input waveform for characterization) in these three cases is different even when the slew values are exactly the same, and all three scenarios are possible in an actual design. Picking one scenario over another does not minimize the error introduced for all instances in a design. A third major reason an active driver is a bad choice is that it completely ignores the impact of a waveform propagating through an RC network, and this is typically MUCH more significant in an actual design than the variation in driver waveform shapes. This leads to the realization that the choice of pre-driver waveform that minimizes error for designs is empirical; it depends on so many different factors (e.g. technology, library, design), that the best thing to do is to use an abstract driver that mitigates error in an explicit, easy to understand way. This is what the pre-driver does; it splits the error between the two extremes of: 1) fast input slew with no RC network effect and 2) slow input slew with significant RC network effect. By using a pre-driver waveform, we strive to minimize the maximum error possible over all driver/load/net scenarios. For a fabricated testcase with homogeneous cells and/or networks, using a pre-driver specific to the testcase can give better results, but that approach is not of sign-off quality for an actual design. Is the pre-driver the best choice for a specific technology, library, and design combination? One cannot know this without performing detailed comparisons. This question is exactly like asking what is the best possible routing configuration, synthesized netlist, etc. ... the only way to know is to consider all possible characterization waveform shapes, which is impractical. What we can say is that in the ABSENCE of any analysis specific to the technology, library, and design used, the Synopsys pre-driver is a better choice than using a linear ramp or a specific active driver. DETAILS OF THE PREDRIVER IMPLEMENTATION The pre-driver used in Liberty NCX is a composite of a linear PWL (ramp) waveform and a single-pole step response. This is to split the error between the two cases of: 1) fast input slew with no RC network effect. 2) slow input slew with significant RC network effect. In Liberty NCX the ramp portion is just a common spice PWL waveform with a slope value specified by the user. The single-pole step-response is generated from the response of an RC network. To better understand how we mix the ramp and step-response, we first define two values, t_low and t_high. These are the time values derived from the low and high thresholds, or trip points used to define the output transition. Specifically, t_low is the time in the simulation when the low-threshold voltage is achieved and t_high is the corresponding time when the high-threshold voltage is achieved. For a rising output, the transition time can be calculated from the equations: vlow = Vdd * ( 1 - exp(-(t_low-tstart)/RC)) vhigh = Vdd * (1 - exp(-(t_low-tstart)/RC)) Solving the above two equations we can get tstart and RC time constant which yields the step-response: v_step(t) = Vdd * (1 - exp(-(t-tstart)/RC)) We can then write an equation to use in generating a new piece-wise linear source that is a composite of the original ramp waveform and the step response as: v_predriver(t) = 0.5 * (vramp(t) + v_step(t)) In NanoChar a sample at a step size of "0.1*slope" is used. This results in time points as follows: t0, t0+0.1*slope, t0+0.2*slope , ..., t0 + slope This yields the voltage time pairs needed in the Hspice PWL source statement. Below is a spice deck that shows how a pre-driver is used: * netlist to show the pre-driver * Get the pre-driver waveform for input slew = 1ns .param inslew=1n .param vdd = 1.0v, vlow=0.2, vhigh=0.8 .param tl=`1n+0.2n`, th=`1n+0.8n` .param pct_low=0.2, pct_high=0.8 * ramp input V1 1 0 PWL (1n 0, '1n + inslew' vdd) * step-response .param rc=`(th-tl)/log((1.0-pct_low)/(1.0-pct_high))` .param tx=`tl+rc*(log(1.0-pct_low))` V2 2 0 EXP ( 0 1 tx rc 20n rc) * mix of ramp and step-response * 0.5 * (v1 + v2) E3 3 0 poly(2) 2 0 1 0 0 0.5 0.5 .option post=1 .tran 1ps 20n .plot .end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Evgenii2 0 2 декабря, 2008 Опубликовано 2 декабря, 2008 · Жалоба Thanks! :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Самурай 12 5 декабря, 2008 Опубликовано 5 декабря, 2008 · Жалоба Уважаемые форумчане и мой постоянный собеседник oratie! :) Где бы найти информацию о сетапе на характеризацию цифровых селов хоть одного автоматического тула. Как правильно нагрузить экстрактнутый нетлист? Что я имею ввиду: Какой номинал сопротивление между генератором и гейтами входных транзисторов. А может это вовсе не сопротивление а единичный буффер. Вопрос остро стоит из-за возникновения набросов при вычислении внутренней энергии при переключении села. Кривая тока источника во времени на диапазоне переключения может иметь как отрицательные, так и положительные выбросы (зависит от внешней нагрузочной емкости) . Что учитывать, как учитывать? :05: Из своего опыта: вход - идеальный источник и linear PWL (по двум точкам), нагрузка - обычная емкость:). Очень неплохая корреляция по задержкам и выходным слопам с TSMC библиотекой (разница меньше 2% ). Для Internal Power погрешность больше, иногда до 10%. Что касается выбросов тока источника, то информации недостаточно: что за выбросы, тип ячейки, условия характеризации и т.д. Если это не очень секретная информация:). А вообще, как я понимаю, отрицательный выброс тока на шине питания очень даже возможен - за счет перезаряда емкости Gate-Source/Drain. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Evgenii2 0 6 декабря, 2008 Опубликовано 6 декабря, 2008 (изменено) · Жалоба Из своего опыта: вход - идеальный источник и linear PWL (по двум точкам), нагрузка - обычная емкость:). Очень неплохая корреляция по задержкам и выходным слопам с TSMC библиотекой (разница меньше 2% ). Для Internal Power погрешность больше, иногда до 10%. Что касается выбросов тока источника, то информации недостаточно: что за выбросы, тип ячейки, условия характеризации и т.д. Если это не очень секретная информация:). А вообще, как я понимаю, отрицательный выброс тока на шине питания очень даже возможен - за счет перезаряда емкости Gate-Source/Drain. Да действительно, со слопами и задержками корреляция хорошая и при идеальном источнике. И сравниваемся мы тоже c TSMC. :) C Internal Power теже проблемы, может чуть побольше в процентах ,чем в вашем случае. Во всем диапазоне templates разница между "эталонными" TSMC и нашими результатами неравномерна. При практически нулевых входных фронтах и нулевых нагрузочных емкостях имеем резулатат, меньший чем у TSMC. Скажем при подачи сигнала на простой сел, единичный инвертор, часть его (сигнала) попадает напрямую через емкости о которых вы писали на выход (g-d) и если у нас RС-распределенный нетлист - к источнику (g-s). Это ведь вклад входного источника в общее потребление, пусть и косвенный, раз снимаем ток с фиксированной ноды источника. Результат интегрирования i(t)- разность двух ~ равных по площади фигур :( . Возможно тулы как-то избавляются от вклада входного источника. Поправьте, если что не так, матчасть страдает....... :) Изменено 6 декабря, 2008 пользователем spectre Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sevrukov_Andrey 0 5 марта, 2009 Опубликовано 5 марта, 2009 · Жалоба Уважаемые форумчане и мой постоянный собеседник oratie! :) Где бы найти информацию о сетапе на характеризацию цифровых селов хоть одного автоматического тула. Как правильно нагрузить экстрактнутый нетлист? Что я имею ввиду: Какой номинал сопротивление между генератором и гейтами входных транзисторов. А может это вовсе не сопротивление а единичный буффер. Вопрос остро стоит из-за возникновения набросов при вычислении внутренней энергии при переключении села. Кривая тока источника во времени на диапазоне переключения может иметь как отрицательные, так и положительные выбросы (зависит от внешней нагрузочной емкости) . Что учитывать, как учитывать? :05: В SignalStorm есть пример в описании. Если кратко - на входе задаются разной длительности фронты. На выход вешаются различные емкости. Обычно группируются элементы и емкости соответсвуют именно их нагрузкам. что-то вроде: Index D1{ Slew = 0.0625n 0.15n 0.3125n 0.625n 1.375n 2.625n 5.375n; Load = 0.0005p 0.0065p 0.018p 0.04p 0.09p 0.18p 0.37p; }; Index D2{ Slew = 0.0625n 0.15n 0.3125n 0.625n 1.375n 2.625n 5.375n; Load = 0.001p 0.013p 0.036p 0.08p 0.018p 0.36p 0.74p; }; ............................................ Group D1{ CELL = *D1 *C1 *L1 *PN* ; }; Group D2{ CELL = *D2 *C2 *H2 *L2 *M? *M?? *D2_BS *EH2 ; }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Escorial 0 13 марта, 2009 Опубликовано 13 марта, 2009 · Жалоба Андрей, возможно у Вас ошибка (выделил жирным шрифтом). Извините за дотошность, но вдруг вы приведенные данные из исходных текстов у себя скопировали. В SignalStorm есть пример в описании. Если кратко - на входе задаются разной длительности фронты. На выход вешаются различные емкости. Обычно группируются элементы и емкости соответсвуют именно их нагрузкам. что-то вроде: Index D1{ Slew = 0.0625n 0.15n 0.3125n 0.625n 1.375n 2.625n 5.375n; Load = 0.0005p 0.0065p 0.018p 0.04p 0.09p 0.18p 0.37p; }; Index D2{ Slew = 0.0625n 0.15n 0.3125n 0.625n 1.375n 2.625n 5.375n; Load = 0.001p 0.013p 0.036p 0.08p 0.018p 0.36p 0.74p; }; ............................................ Group D1{ CELL = *D1 *C1 *L1 *PN* ; }; Group D2{ CELL = *D2 *C2 *H2 *L2 *M? *M?? *D2_BS *EH2 ; }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sevrukov_Andrey 0 29 апреля, 2009 Опубликовано 29 апреля, 2009 · Жалоба Андрей, возможно у Вас ошибка (выделил жирным шрифтом). Извините за дотошность, но вдруг вы приведенные данные из исходных текстов у себя скопировали. Да, Вы дважды правы: скопировал у себя и это неприятная опечатка. Сейчас буду смотреть, насколько критичная. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sevrukov_Andrey 0 30 апреля, 2009 Опубликовано 30 апреля, 2009 · Жалоба Андрей, возможно у Вас ошибка (выделил жирным шрифтом). Извините за дотошность, но вдруг вы приведенные данные из исходных текстов у себя скопировали. Оценил. В общем, криминала нет. Просто вместо ряда емкостей 0.001p 0.013p 0.036p 0.08p 0.018p 0.36p 0.74p; получил 0.001, 0.013, 0.018, 0.036, 0.08, 0.36, 0.74 соответственно нагрузки между 0.08 и 0.36 будут считаться с меньшей точностью по этим точкам. Но, конечно, надо пересчитывать. Да и группа элементов - самая большая. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться