Languages

CommunityCategory: XMODELModeling a buffer with arbitrary rising/falling transition waveforms

XMODEL

Modeling a buffer with arbitrary rising/falling transition waveforms

SA Support Team Staff 2024-01-31

I know the 'transition' primitive of XMODEL can convert a digital input to an analog output with finite rise and fall times. But its transition waveform is a simple linear ramp. Is it possible to model a digital-input, analog-output buffer with arbitrary rising and falling transition waveforms, e.g. described in a piecewise-linear (PWL) format?

1 Answers
SA Support Team Staff 2024-01-31

There is an easy way of modeling a digital-input, analog-output buffer with arbitrary rising and falling transition waveforms. That is, you can first convert the digital input to an analog signal with finite rise/fall times using a 'transition' primitive, and then shape its transition waveforms using an additional primitive representing a nonlinear function. For instance, if you want to define the transition waveforms in a PWL format, you can use a 'pwl_func' primitive to do so. The figure below shows the sandbox.trans_pwl:schematic cellview included in the attached package, the schematic view of such a buffer model.

In this model, the buffer is modeled using two primitives connected in series: 'transition' and 'pwl_func'. First, the 'transition' primitive converts the digital input 'in' to an analog signal 'ramp'. This 'ramp' signal will transition between the values 0.0 and 1.0 with the finite rise and fall times defined by the parameters 't_rise' and 't_fall', respectively. When this signal is fed into the 'pwl_func' primitive, the primitive will produce the output 'out' of which transition waveform is shaped by its PWL function, described by the parameter 'f_tran'. In other words, the parameter 'f_tran' can define the transition waveform using a list of (time, value) pairs, of which time span is normalized to a range of 0~1.

In our example, the parameters 't_rise', 't_fall', and 'f_tran' have the values shown below:

And the cellview sandbox.tb_trans_pwl:schematic is a simple testbench feeding a 100MHz clock into the buffer model.

And here are the simulated waveforms. You can see that the 'out' signal has the transition waveforms of which shapes are identical to the PWL function defined by the 'f_tran' parameter. But note that the rising and falling transition waveforms of this buffer model can be only symmetric, since we are using one PWL function to define both the rising and falling transitions.

To define the rising and falling transition waveforms individually, you can use two 'pwl_func' primitives as shown below. In the sandbox.trans_pwl2:schematic cellview, the 'ramp' signal from the 'transition' primitive drives the inputs of two 'pwl_func' primitives in parallel, but only one of their outputs gets selected as the final output, 'out' by the 'select' primitive. This selection is done based on the polarity of the digital input 'in'. That is, when 'in' is 1, the output of the upper 'pwl_func' primitive is selected, and when 'in' is 0, the output of the lower 'pwl_func' primitive is selected. Therefore, the upper 'pwl_func' primitive with the parameter 'f_rise' defines the rising transition waveform of the output whereas the lower one with the parameter 'f_fall' defines the falling transition waveform.

The cellview sandbox.tb_trans_pwl2:schematic is a testbench feeding a 100MHz clock into this trans_pwl2 buffer model with the following parameter values.

And the simulated waveforms shown below confirm that we can indeed define the rising and falling transition waveforms individually using the parameters 'f_rise' and 'f_fall', respectively.

Attachment: trans_pwl_20240130.tar.gz

XMODEL

임의의 rising/falling 파형의 버퍼 모델링하기

SA Support Team Staff 2024-01-31

XMODEL의 'transition' primitive를 사용하면 디지털 입력을 유한한 상승 및 하강시간을 가진 아날로그 출력을 바꿀 수 있다는 것을 압니다. 하지만, 그 상승 및 하강 파형은 단순한 직선 파형입니다. 임의의 상승 및 하강 파형을 가진 디지털 입력, 아날로그 출력을 가진 버퍼를 모델링하는 방법이 있을까요? 예를 들면, 그 상승 및 하강 파형을 PWL 형식으로 정의할 수 있을까요?

1 Answers
SA Support Team Staff 2024-01-31

There is an easy way of modeling a digital-input, analog-output buffer with arbitrary rising and falling transition waveforms. That is, you can first convert the digital input to an analog signal with finite rise/fall times using a 'transition' primitive, and then shape its transition waveforms using an additional primitive representing a nonlinear function. For instance, if you want to define the transition waveforms in a PWL format, you can use a 'pwl_func' primitive to do so. The figure below shows the sandbox.trans_pwl:schematic cellview included in the attached package, the schematic view of such a buffer model.

In this model, the buffer is modeled using two primitives connected in series: 'transition' and 'pwl_func'. First, the 'transition' primitive converts the digital input 'in' to an analog signal 'ramp'. This 'ramp' signal will transition between the values 0.0 and 1.0 with the finite rise and fall times defined by the parameters 't_rise' and 't_fall', respectively. When this signal is fed into the 'pwl_func' primitive, the primitive will produce the output 'out' of which transition waveform is shaped by its PWL function, described by the parameter 'f_tran'. In other words, the parameter 'f_tran' can define the transition waveform using a list of (time, value) pairs, of which time span is normalized to a range of 0~1.

In our example, the parameters 't_rise', 't_fall', and 'f_tran' have the values shown below:

And the cellview sandbox.tb_trans_pwl:schematic is a simple testbench feeding a 100MHz clock into the buffer model.

And here are the simulated waveforms. You can see that the 'out' signal has the transition waveforms of which shapes are identical to the PWL function defined by the 'f_tran' parameter. But note that the rising and falling transition waveforms of this buffer model can be only symmetric, since we are using one PWL function to define both the rising and falling transitions.

To define the rising and falling transition waveforms individually, you can use two 'pwl_func' primitives as shown below. In the sandbox.trans_pwl2:schematic cellview, the 'ramp' signal from the 'transition' primitive drives the inputs of two 'pwl_func' primitives in parallel, but only one of their outputs gets selected as the final output, 'out' by the 'select' primitive. This selection is done based on the polarity of the digital input 'in'. That is, when 'in' is 1, the output of the upper 'pwl_func' primitive is selected, and when 'in' is 0, the output of the lower 'pwl_func' primitive is selected. Therefore, the upper 'pwl_func' primitive with the parameter 'f_rise' defines the rising transition waveform of the output whereas the lower one with the parameter 'f_fall' defines the falling transition waveform.

The cellview sandbox.tb_trans_pwl2:schematic is a testbench feeding a 100MHz clock into this trans_pwl2 buffer model with the following parameter values.

And the simulated waveforms shown below confirm that we can indeed define the rising and falling transition waveforms individually using the parameters 'f_rise' and 'f_fall', respectively.

Attachment: trans_pwl_20240130.tar.gz