For those who are unable to join the meeting via LiveMeeting, here is the latest version of the clock_times BIRD draft from Scott. This is the version we will discuss in today's IBIS-ATM teleconference. Arpad ================================================== ________________________________ From: Scott McMorrow [mailto:scott@xxxxxxxxxxxxx] Sent: Tuesday, April 13, 2010 11:21 AM To: Muranyi, Arpad Subject: Re: [ibis-macro] Re: The two BIRDs and the updated Task List are posted on the ATM web site sure, but 7 is the only one posted on the website Muranyi, Arpad wrote: Thanks, but this should be #9... Could you please rename it on your end, so we would be in synch? Thanks, Arpad ============================================= -----Original Message----- From: Scott McMorrow [mailto:scott@xxxxxxxxxxxxx] Sent: Tuesday, April 13, 2010 8:36 AM To: Muranyi, Arpad Subject: Re: [ibis-macro] Re: The two BIRDs and the updated Task List are posted on the ATM web site Arpad A newer edited version of the bird Muranyi, Arpad wrote: Ken, Thank you for your feedback on the "Flow BIRD". As I stated in the last ATM teleconference, I was debating the question myself whether "Init_Returns_Filter" is a new feature or a correction to the existing feature in the IBIS v5.0 spec. The position I took is that this is still a correction, because without it, deconvolution would be necessary to accomplish some of the calculations in the corrected flow, and as we all know, deconvolution is numerically unstable operation which may result in bad waveforms. Providing a numerically stable alternative is a correction in my mind. I agree, "Init_Returns_Filter" is a new keyword, but it doesn't accomplish anything new, it is only there to help accomplish what the intended flow was in the first place. However, your suggestion of further simplifying the flow in the spec seems to be more of a NEW FEATURE type change, since your suggestions are making significant changes to the existing flow. The reasons behind these changes seem to be different from making a correction to a flaw. Either way, we can certainly discuss this topic in the meeting tomorrow and see how everyone else feels about them, but I have to express my serious concern that by reopening this topic we are putting about three months worth of hard work in jeopardy. Everyone seemed to be in an agreement last fall, and I don't see any reason for having to go back and start the discussions on this topic all over again. My goal with this BIRD draft and the call for a vote on it tomorrow is to formalize what we have done last fall (so that we can claim the we have a process) and not to start everything all over again from scratch. Thanks, Arpad ================================================================== -----Original Message----- From: ibis-macro-bounce@xxxxxxxxxxxxx [mailto:ibis-macro-bounce@xxxxxxxxxxxxx] On Behalf Of Ken Willis Sent: Monday, April 12, 2010 10:28 AM To: 'IBIS-ATM' Subject: [ibis-macro] Re: The two BIRDs and the updated Task List are posted on the ATM web site Hello all, Some feedback on the provided documents; regarding the "Flow_BIRD", the clarification of the flow with respect to AMI_Getwave in the TX is an excellent addition. This was much needed. But Sigrity strongly disagrees with some other aspects of the "Flow_BIRD". Quoting Arpad's presentation from March 30th, "The process and goal of the AMI BIRD", the "Conclusion" slide states very clearly "Adopt a minimalistic approach" and "make a checklist with the absolutely necessary changes". This intimates: - Focus first on clean up and clarification of existing functionality - Focus second on new functionality, and put them in their own, subsequent BIRDs Unfortunately, this concept is violated with this "Init_Returns_Filter" addition. This is NEW functionality, and does NOT belong in a clarification BIRD. It should be in its own BIRD, once the clarification of the existing flow is in place. I thought that was the approach that was generally agreed upon by the group. Trying to add new functionality at the same time as clarifying the existing flow makes things much more complex. Looking at the multiple "If/Then" scenarios in Step 8 of the proposed reference flow illustrates this. "Init_Return_Filter" complicates the reference flow significantly. In fact, a counterproposal Sigrity would like the members to consider is that we further simplify the current 5.0 flow so that a given AMI model should be allowed to EITHER: - pass back a modified impulse response (Init_Returns_Impulse); or - pass back modified waveforms (Getwave_Exists) but NOT both. That would really make it much more straightforward, for both the model developer, and the EDA tools. The filtering functionality in a Serdes will either require detailed waveform processing or not. If it does, and AMI_Getwave is used, then in practicality it should not need to also return impulse responses, filters, or anything else. Thanks, Ken Willis Sigrity, Inc. 860-871-7070 kwillis@xxxxxxxxxxx -----Original Message----- From: ibis-macro-bounce@xxxxxxxxxxxxx [mailto:ibis-macro-bounce@xxxxxxxxxxxxx] On Behalf Of Muranyi, Arpad Sent: Friday, April 09, 2010 3:19 PM To: IBIS-ATM Subject: [ibis-macro] The two BIRDs and the updated Task List are posted on the ATM web site Hello everyone, Just in time for the weekend... The two BIRD drafts and the updated Task List we discussed in the last ATM teleconference are posted on the IBIS-ATM web site: http://www.vhdl.org/pub/ibis/macromodel_wip/archive/20100406/arpadmurany i/AMI_Flow_BIRD_draft.zip http://www.vhdl.org/pub/ibis/macromodel_wip/archive/20100406/scottmcmorr ow/clock_times_BIRD_draft.zip http://www.vhdl.org/pub/ibis/macromodel_wip/archive/20100406/arpadmurany i/IBIS%20AMI%20BIRD%20Task%20List/IBIS50AMI_TaskList_2010_04_06.pdf I am hoping to vote on the Flow BIRD in the upcoming meeting, since this is the flow we discussed in the fall of 2009 and we seemed to have an agreement on it then. I would like to have a meaningful discussion on the clock_times BIRD in the next meeting to address any questions and comments, and hope to put it up for vote for the following week's meeting. I would also like to spend a few minutes in each meeting on the Task List to make sure we don't miss anything, and to know what BIRDs we still need to write. The text of the two BIRDs are included in the body of this message and the PDF and TXT files are also attached with this message. Hopefully you will be able to read them one way or another... Thanks, and have a nice weekend. Arpad ************************************************************************ ***** ************************************************************************ ***** BIRD ID#: ISSUE TITLE: IBIS-AMI Flow Correction REQUESTER: Arpad Muranyi, Mentor Graphics, Inc. DATE SUBMITTED: DATE REVISED: DATE ACCEPTED BY IBIS OPEN FORUM: ************************************************************************ ***** ************************************************************************ ***** STATEMENT OF THE ISSUE: In Section 10, "NOTES ON ALGORITHMIC MODELING INTERFACE AND PROGRAMMING GUIDE", sub-section 2 describes a flawed reference flow. The intent was to make non-LTI simulations possible using the GetWave functions of AMI models, however the order of Step 4 and Step 5, as described in the IBIS v5.0 specification will only work properly with LTI GetWave functions. ************************************************************************ ***** Replace this text: | 2 APPLICATION SCENARIOS | ======================= | | | 2.1 Linear, Time-invariant Equalization Model | ============================================= | | 1. From the system netlist, the EDA platform determines that a given | [Model] is described by an IBIS file. | | 2. From the IBIS file, the EDA platform determines that the [Model] is | described at least in part by an algorithmic model, and that the | AMI_Init function of that model returns an impulse response for that | [Model]. | | 3. The EDA platform loads the shared library containing the algorithmic | model, and obtains the addresses of the AMI_Init, AMI_GetWave, and | AMI_Close functions. | | 4. The EDA platform assembles the arguments for AMI_Init. These arguments | include the impulse response of the channel driving the [Model], a | handle for the dynamic memory used by the [Model], the parameters for | configuring the [Model], and optionally the impulse responses of any | crosstalk interferers. | | 5. The EDA platform calls AMI_Init with the arguments previously prepared. | | 6. AMI_Init parses the configuration parameters, allocates dynamic | memory, places the address of the start of the dynamic memory in | the memory handle, computes the impulse response of the block and | passes the modified impulse response to the EDA tool. The new | impulse response is expected to represent the filtered response. | | 7. The EDA platform completes the rest of the simulation/analysis using | the impulse response from AMI_Init as a complete representation of the | behavior of the given [Model]. | | 8. Before exiting, the EDA platform calls AMI_Close, giving it the address | in the memory handle for the [Model]. | | 9. AMI_Close de-allocates the dynamic memory for the block and performs | whatever other clean-up actions are required. | | 10. The EDA platform terminates execution. | | | 2.2 Nonlinear, and / or Time-variant Equalization Model | ======================================================= | | 1. From the system netlist, the EDA platform determines that a given block | is described by an IBIS file. | | 2. From the IBIS file, the EDA platform determines that the block is | described at least in part by an algorithmic model. | | 3. The EDA platform loads the shared library or shared object file | containing the algorithmic model, and obtains the addresses of the | AMI_Init, AMI_GetWave, and AMI_Close functions. | | 4. The EDA platform assembles the arguments for AMI_Init. These arguments | include the impulse response of the channel driving the block, a handle | for the dynamic memory used by the block, the parameters for | configuring the block, and optionally the impulse responses of any | crosstalk interferers. | | 5. The EDA platform calls AMI_Init with the arguments previously prepared. | | 6. AMI_Init parses the configuration parameters, allocates dynamic | memory and places the address of the start of the dynamic memory in | the memory handle. AMI_Init may also compute the impulse response | of the block and pass the modified impulse response to the EDA tool. | The new impulse response is expected to represent the filtered | response. | | 7. A long time simulation may be broken up into multiple time segments. | For each time segment, the EDA platform computes the input waveform to | the [Model] for that time segment. For example, if a million bits are | to be run, there can be 1000 segments of 1000 bits each, i.e. one time | segment comprises 1000 bits. | | 8. For each time segment, the EDA platform calls the AMI_GetWave function, | giving it the input waveform and the address in the dynamic memory | handle for the block. | | 9. The AMI_GetWave function computes the output waveform for the block. In | the case of a transmitter, this is the Input voltage to the receiver. | In the case of the receiver, this is the voltage waveform at the | decision point of the receiver. | | 10. The EDA platform uses the output of the receiver AMI_GetWave function | to complete the simulation/analysis. | | 11. Before exiting, the EDA platform calls AMI_Close, giving it the address | in the memory handle for the block. | | 12. AMI_Close de-allocates the dynamic memory for the block and performs | whatever other clean-up actions are required. | | 13. The EDA platform terminates execution. | | | 2.3 Reference system analysis flow | ================================== | | System simulations will commonly involve both TX and RX algorithmic | models, each of which may perform filtering in the AMI_Init call, the | AMI_Getwave call, or both. Since both LTI and non-LTI behavior can be | modeled with algorithmic models, the manner in which models are | evaluated can affect simulation results. The following steps are | defined as the reference simulation flow. Other methods of calling | models and processing results may be employed, but the final simulation | waveforms are expected to match the waveforms produced by the reference | simulation flow. | | The steps in this flow are chained, with the input to each step being | the output of the step that preceded it. | | Step 1. The simulation platform obtains the impulse response for the | analog channel. This represents the combined impulse response | of the transmitter's analog output, the channel and the | receiver's analog front end. This impulse response represents | the transmitter's output characteristics without filtering, for | example, equalization. | | Step 2. The output of Step 1 is presented to the TX model's AMI_Init | call. If Use_Init_Output for the TX model is set to True, the | impulse response returned by the TX AMI_Init call is passed | onto Step 3. If Use_Init_Output for the TX model is set to | False, the same impulse response passed into Step 2 is passed | on to step 3. | | Step 3. The output of Step 2 is presented to the RX model's AMI_Init | call. If Use_Init_Output for the RX model is set to True, the | impulse response returned by the RX AMI_Init call is passed | onto Step 4. If Use_Init_Output for the RX model is set to | False, the same impulse response passed into Step 3 is passed | on to step 4. | | Step 4. The simulation platform takes the output of step 3 and combines | (for example by convolution) the input bitstream and a unit | pulse to produce an analog waveform. | | Step 5. The output of step 4 is presented to the TX model's AMI_Getwave | call. If the TX model does not include an AMI_Getwave call, | this step is a pass-through step, and the input to step 5 is | passed directly to step 6. | | Step 6. The output of step 5 is presented to the RX model's AMI_Getwave | call. If the RX model does not include an AMI_Getwave call, | this step is a pass-through step, and the input to step 6 is | passed directly to step 7. | | Step 7. The output of step 6 becomes the simulation waveform output at | the RX decision point, which may be post-processed by the | simulation tool. | | Steps 4 though 7 can be called once or can be called multiple times to | process the full analog waveform. Splitting up the full analog waveform | into mulitple calls minimized the memory requirement when doing long | simulations, and allows AMI_Getwave to return model status every so many | bits. Once all blocks of the input waveform have been processed, TX | AMI_Close and RX AMI_close are called to perform any final processing | and release allocated memory. ---------------------------------------- with the following text: (Due to the high percentage of modified or new text, the changes are not marked by the usual "*" characters at the beginning of each line). | 2 APPLICATION SCENARIOS | ======================= | | | 2.1 Linear, Time-invariant Equalization Model | ============================================= | | 1. From the system netlist, the EDA platform determines that a given | [Model] is described by an IBIS file. | | 2. From the IBIS file, the EDA platform determines that the [Model] is | described at least in part by an algorithmic model. | | 3. The EDA platform loads the shared library or shared object file | containing the algorithmic model, and obtains the addresses of the | AMI_Init, AMI_GetWave, and AMI_Close functions. | | 4. The EDA platform assembles the arguments for AMI_Init. These | arguments include the impulse response of the channel driving the | block, a handle for the dynamic memory used by the block, the | parameters for configuring the block, and optionally the impulse | responses of any crosstalk interferers. | | 5. The EDA platform calls AMI_Init with the arguments previously | prepared. | | 6. AMI_Init parses the configuration parameters, allocates dynamic | memory, places the address of the start of the dynamic memory in the | memory handle. Depending on the value of Init_Returns_Filter, it | either computes and returns the filter response of the block, or | computes the impulse response of the channel modified by the filter | response of the block. | | 7. The EDA platform completes the rest of the simulation/analysis using | the impulse response from AMI_Init as a complete representation of | the behavior of the given block combined with the channel, or makes | use of the filter response returned by AMI_Init to compute the | behavior of the given block combined with the channel. | | 8. Before exiting, the EDA platform calls AMI_Close, giving it the | address in the memory handle for the block. | | 9. AMI_Close de-allocates the dynamic memory for the block and performs | whatever other clean-up actions are required. | | 10. The EDA platform terminates execution. | | | 2.2 Nonlinear, and / or Time-variant Equalization Model | ======================================================= | | 1. From the system netlist, the EDA platform determines that a given | block is described by an IBIS file. | | 2. From the IBIS file, the EDA platform determines that the block is | described at least in part by an algorithmic model. | | 3. The EDA platform loads the shared library or shared object file | containing the algorithmic model, and obtains the addresses of the | AMI_Init, AMI_GetWave, and AMI_Close functions. | | 4. The EDA platform assembles the arguments for AMI_Init. These | arguments include the impulse response of the channel driving the | block, a handle for the dynamic memory used by the block, the | parameters for configuring the block, and optionally the impulse | responses of any crosstalk interferers. | | 5. The EDA platform calls AMI_Init with the arguments previously | prepared. | | 6. AMI_Init parses the configuration parameters, allocates dynamic | memory and places the address of the start of the dynamic memory in | the memory handle. Depending on the value of Init_Returns_Filter, | it either computes and returns the filter response of the block, or | computes the impulse response of the channel modified by the filter | response of the block. The EDA platform may make use of the | impulse response or the filter response returned by AMI_Init in its | further analysis if needed. | | 7. The EDA platform generates a time domain input waveform (stimulus) | bit pattern. A long simulation may be broken up into multiple time | segments by the EDA platform. For example, if a million bits are | to be simulated, there can be 1000 segments of 1000 bits each, i.e. | one time segment comprises 1000 bits. | | 8. For each time segment, the EDA platform calls the transmitter | AMI_GetWave function, giving it the input waveform and the address | in the dynamic memory handle for the block. | | 9. Depending on the value stored in the Use_Init_Output parameters, | the EDA platform combines the output of the transmitter AMI_GetWave | function with the output(s) of the AMI_Init function(s) with the | impulse response of the channel and passes this result to the | receiver AMI_GetWave function for each time segment of the | simulation. | | 10. The output waveform of the receiver GetWave function represents the | voltage waveform at the decision point of the receiver. The EDA | platform uses this waveform to complete the simulation/analysis. | | 11. Before exiting, the EDA platform calls AMI_Close, giving it the | address in the memory handle for the block. | | 12. AMI_Close de-allocates the dynamic memory for the block and performs | whatever other clean-up actions are required. | | 13. The EDA platform terminates execution. | | | 2.3 Reference system analysis flow | ================================== | | System simulations will commonly involve both TX and RX algorithmic | models, each of which may perform filtering in the AMI_Init call, the | AMI_Getwave call, or both. Since both LTI and non-LTI behavior can be | modeled with algorithmic models, the manner in which models are evaluated | can affect simulation results. The following steps are defined as the | reference simulation flow. Other methods of calling models and | processing results may be employed, but the final simulation waveforms | are expected to match the waveforms produced by the reference simulation | flow. | | | Step 1. The simulation platform obtains the impulse response for the | analog channel. This represents the combined impulse response | of the transmitter's analog output, the channel and the | receiver's analog front end. This impulse response represents | the transmitter's output characteristics without filtering, for | example, equalization. | | Step 2. The output of Step 1 is presented to the TX model's AMI_Init | call. If Init_Returns_Filter for the TX model is set to True, | the model returns the impulse response of the TX filter. If it | is set to False, the TX AMI_Init call returns the modified | impulse response of the channel. The output of TX AMI_Init is | returned to the EDA tool which decides how to make use of it | depending on the transmitter's Init_Returns_Filter and | Use_Init_Output parameters. | | Step 3. If the transmitter's Init_Returns_Filter parameter is set to | False, the output of Step 2 is presented to the RX model's | AMI_Init call. If the Init_Returns_Filter is set to True, the | EDA tool will combine the output of Step 2 with the output of | Step 1 (for example by convolution) before presenting it to the | RX model's AMI_Init call. | | Step 4. The output of Step 3 is presented to the RX model's AMI_Init | call. If Init_Returns_Filter for the RX model is set to True, | the model returns the impulse response of the RX filter. If it | is set to False, the RX AMI_Init call returns the filtered | response of the channel. The output of RX AMI_Init is returned | to the EDA tool which decides how to make use of it depending | on the receiver's Init_Returns_Filter and Use_Init_Output | parameters. | | Step 5. If the receiver's Init_Returns_Filter parameter is set to | False, the output of Step 4 may be presented to the user of the | EDA tool, or the EDA tool can further process the results using | statistical algorithms. If the Init_Returns_Filter is set to | True, the EDA tool will combine the output of Step 4 with the | output of Step 3 (for example by convolution) before presenting | it to the user of the EDA tool, or before continuing with the | statistical processing of these results. | | Step 6. The simulation platform produces a digital stimulus waveform. A | digital stimulus waveform is 0.5 when the stimulus is "high", | -0.5 when the stimulus is "low", and may have a value between | -0.5 and 0.5 such that transitions occur when the stimulus | crosses 0. | | Step 7. The output of step 6 is presented to the TX model's AMI_Getwave | call. If the TX model does not include an AMI_Getwave call, | this step is a pass-through step, and the input to step 7 is | passed directly to step 8. | | Step 8. The EDA simulation platform combines (for example by | convolution) the output of step 7 with the output of several | different previous steps depending on the value of the | transmitter's and receiver's Init_Returns_Filter and | Use_Init_Output settings as follows: | | If TX Use_Init_Output = False, combine the outputs of Step 7 | and Step 1. | | If TX Use_Init_Output = True and TX Retuns_Filter = False, | combine the outputs of Step 7 and Step 2. | | If TX Use_Init_Output = True and TX Retuns_Filter = True, | combine the outputs of Step 7, Step 1 and Step 2. | | In addition, the EDA simulation platform will also combine the | output of Step 4 with the above if RX Use_Init_Output = True. | When RX Init_Returns_Filter = True, this is a relatively straight | forward operation, but when RX Init_Returns_Filter = False, the | EDA simulation platform will have to take additional steps to | prevent the duplication of the content that is present in the | output of Steps 2 and/or 3 (for example by deconvolution). This | is why RX Init_Returns_Filter = True is preferred when RX | Use_Init_Output = True. | | Step 9. The output of step 8 is presented to the RX model's AMI_Getwave | call. If the RX model does not include an AMI_Getwave call, | this step is a pass-through step, and the input to step 9 is | passed directly to step 10. | | Step 10. The output of step 9 becomes the simulation waveform output at | the RX decision point, which may be post-processed by the | simulation tool or presented to the user as is. | | Steps 6 though 9 can be called once or can be called multiple times to | process the full analog waveform. Splitting up the full analog waveform | into multiple calls reduces the memory requirements when doing long | simulations, and allows AMI_Getwave to return model status every so many | bits. Once all blocks of the input waveform have been processed, TX | AMI_Close and RX AMI_close are called to perform any final processing and | release allocated memory. ************************************************************************ ***** ANALYSIS PATH/DATA THAT LED TO SPECIFICATION The IBIS-ATM Task Group spent several meetings to discuss the AMI flow problem and the best solution for it in the months of September, October and November of 2009. The IBIS-ATM Task Group arrived to the final version of the proposed flow on November 17, 2009. A graphical representation of the flow that is in described in the IBIS v5.0 specification can be found on the first page of the following presentation: http://www.vhdl.org/pub/ibis/macromodel_wip/archive/20090921/arpadmurany i/AMI%20flows:%20IBIS%205.0%20and%202009%20Sept%208,15%20proposals/AMI_F lows.pdf The yellow highligted symbols on the second page indicate what the order should have been to achieve the goal of simulating non-LTI sysmtems with the GetWave functions. The ATM Task Group also discovered during the discussions that certain conditions would require a deconvolution operation which is known to be a challange due to its numerical instability. To remedy this oversight, a new Boolean parameter "Init_Returns_Filter" was also introduced in the proposed flow to provide a mechanizm to eliminate the need for using deconvolution in the flow. The graphical representation of the new proposed flow can be found in the following presentation: http://www.vhdl.org/pub/ibis/macromodel_wip/archive/20091118/arpadmurany i/Final%20AMI%20flow%20for%20IBIS%205.1/AMI_Flows_5_final.pdf ************************************************************************ ***** ANY OTHER BACKGROUND INFORMATION: ************************************************************************ ***** ************************************************************************ ***** ************************************************************************ ***** BIRD ID#: ISSUE TITLE: IBIS-AMI clock_times Clarification REQUESTER: Scott McMorrow, Teraspeed Consulting Group DATE SUBMITTED: DATE REVISED: DATE ACCEPTED BY IBIS OPEN FORUM: ************************************************************************ ***** ************************************************************************ ***** STATEMENT OF THE ISSUE: In the Section, "NOTES ON ALGORITHMIC MODELING INTERFACE AND PROGRAMMING GUIDE", the paragraph describing clock_times has led to inconsistent and incorrect model implementation. The suggestion is to clarify usage of the parameter consistent with the original intent. ************************************************************************ ***** Replace this text: | | 3.2.2.3 clock_times | =================== | | Vector to return clock times. The clock times are referenced to the start | of the simulation (the first AMI_GetWave call). The time is always | greater or equal to zero. The last clock is indicated by putting a value | of -1 at the end of clocks for the current wave sample. The clock_time | vector is allocated by the EDA platform and is guaranteed to be greater | than the number of clocks expected during the AMI_GetWave call. The clock | times are the times at which clock signal at the output of the clock | recovery loop crosses the logic threshold. It is to be assumed that the | input data signal is sampled at exactly one half clock period after a | clock time. | -------------- With the following text with changes noted by "|*" lines: | | 3.2.2.3 clock_times | =================== | | Vector to return clock times. The clock times are referenced to the start | of the simulation (the first AMI_GetWave call). The time is always |* greater or equal to zero. The clock_time |* vector is allocated by the EDA platform and is guaranteed to be greater |* than the number of clocks expected during the AMI_GetWave call. The clock |* times are the times at which the clock signal at the output of the clock |* recovery loop crosses the logic threshold in a full data rate CDR clocking |* system (i.e clock period equals UI). The effective receiver sampling |* point is equal to the clock_times plus 1/2 the nominal UI period. The last |* valid clock of the current GetWave call is indicated |* by placing -1 after the last valid clock in the clock_time vector. |* |* The clock ticks represented by clock times should be strictly monotonic, |* both within the clock_times array returned from a single call to GetWave |* and between successive calls to GetWave. That is, within a given clock_times |* array each successive valid value is greater than the value that preceded it, |* and the first valid value from a given call to GetWave must be greater than |* the last valid value from the preceding call to GetWave.Any non-strict-monotonic |* behavior of clock times (including two identical values) should be considered |* by EDA platform as a DLL failure and should lead to simulation termination |* with respective message. |* |* Each valid pair of values in the clock_times array shall be used to sample the output |* waveform as previously described, regardless whether that waveform sample occurs |* in the waveform segment being returned by the current call to GetWave, or the |* waveform segment to be returned by the next GetWave call. |* |* Although clock_times will generally be related to the UI interval for the |* primary SerDes channel being simulated, there is no requirement that there is |* any relationship between the clock ticks generated by clock_times and the actual |* waveform returned in the primary channel. It is possible for the CDR to go out |* of lock, resulting in clock_ticks that have no definite relationship to the output |* wave. |* |* There is no requirement that clock times should be integer multiples of the |* sample interval (or time step used to represent the waveforms).There is also |* no requirement that there be a relationship between clock_times in the |* primary channel, and any additional waveform components in the wave vector, such |* as crosstalk. Crosstalk channels shall not be constrained to any timing |* relationship to the primary channel, or to the clock_times vector. | ************************************************************************ ***** ANALYSIS PATH/DATA THAT LED TO SPECIFICATION Additional notes regarding correct clock_times usage have been included as part of this BIRD, distilled from discussions on the ibis-macro reflector. Additional notes regarding clock_times * Internal to a device, the sampling time tick "sees" the part of the waveform that immediately precedes and follows that tick, within some sampling uncertainty window. * That point, is the true center of the eye for that interval. * The AMI spec requires the clock tick to be placed 1/2 UI before the actual sample point, essentially at the differential crossing. * Then it requires the EDA tool to shift the tick by 1/2 UI. o the assumption here is that there is always a fixed relationship to the UI. o Thus the DLL must calculate the sampling point, then move it back by 1/2 UI to create a clock tick that can then be moved back by the EDA platform to the same sampling point that it first calculated. * It is therefore a requirement that the DLL move the sample point back by 1/2 the nominal UI, and not the instantaneous UI, otherwise there will be inadvertent jitter in the clock_times. * Clock_times + 1/2 nominal UI is always the center of every eye interval. ************************************************************************ ***** ANY OTHER BACKGROUND INFORMATION: This is an editorial correction to clarify the usage of clock_times. ************************************************************************ ***** --------------------------------------------------------------------- IBIS Macro website : http://www.eda.org/pub/ibis/macromodel_wip/ IBIS Macro reflector: //www.freelists.org/list/ibis-macro To unsubscribe send an email: To: ibis-macro-request@xxxxxxxxxxxxx Subject: unsubscribe --------------------------------------------------------------------- IBIS Macro website : http://www.eda.org/pub/ibis/macromodel_wip/ IBIS Macro reflector: //www.freelists.org/list/ibis-macro To unsubscribe send an email: To: ibis-macro-request@xxxxxxxxxxxxx Subject: unsubscribe -- Scott McMorrow Teraspeed Consulting Group LLC 121 North River Drive Narragansett, RI 02882 (401) 284-1827 Business (401) 284-1840 Fax http://www.teraspeed.com Teraspeed(r) is the registered service mark of Teraspeed Consulting Group LLC
**************************************************************************** ***************************************************************************** BIRD ID#: ISSUE TITLE: IBIS-AMI clock_times Clarification REQUESTER: Scott McMorrow, Teraspeed Consulting Group DATE SUBMITTED: DATE REVISED: DATE ACCEPTED BY IBIS OPEN FORUM: ***************************************************************************** ***************************************************************************** STATEMENT OF THE ISSUE: In the Section, "NOTES ON ALGORITHMIC MODELING INTERFACE AND PROGRAMMING GUIDE", the paragraph describing clock_times has led to inconsistent and incorrect model implementation. The suggestion is to clarify usage of the parameter consistent with the original intent. ***************************************************************************** Replace this text: | | 3.2.2.3 clock_times | =================== | | Vector to return clock times. The clock times are referenced to the start | of the simulation (the first AMI_GetWave call). The time is always | greater or equal to zero. The last clock is indicated by putting a value | of -1 at the end of clocks for the current wave sample. The clock_time | vector is allocated by the EDA platform and is guaranteed to be greater | than the number of clocks expected during the AMI_GetWave call. The clock | times are the times at which clock signal at the output of the clock | recovery loop crosses the logic threshold. It is to be assumed that the | input data signal is sampled at exactly one half clock period after a | clock time. | -------------- With the following text with changes noted by "|*" lines: | | 3.2.2.3 clock_times | =================== | | Vector to return clock times. The clock times are referenced to the start | of the simulation (the first AMI_GetWave call). The time is always |* greater or equal to zero. The clock_time |* vector is allocated by the EDA platform and is guaranteed to be greater |* than the number of clocks expected during the AMI_GetWave call. The clock |* times are the times at which the clock signal at the output of the clock |* recovery loop crosses the logic threshold in a full data rate CDR clocking |* system (i.e clock period equals UI). The effective receiver sampling |* point is equal to the clock_times plus 1/2 the instantaneous UI period, |* which is the midpoint of two adjacent clock ticks. The last |* valid clock of the current GetWave call is indicated |* by placing -1 after the last valid clock in the clock_time vector. |* |* The clock ticks represented by clock times should be strictly monotonic, |* both within the clock_times array returned from a single call to GetWave |* and between successive calls to GetWave. That is, within a given clock_times |* array each successive valid value is greater than the value that preceded it, |* and the first valid value from a given call to GetWave must be greater than |* the last valid value from the preceding call to GetWave.Any non-strict-monotonic |* behavior of clock times (including two identical values) should be considered |* by EDA platform as a DLL failure and should lead to simulation termination |* with respective message. |* |* Each valid pair of values in the clock_times array shall be used to sample the output |* waveform as previously described, regardless whether that waveform sample occurs |* in the waveform segment being returned by the current call to GetWave, or the |* waveform segment to be returned by the next GetWave call. Care should be taken |* in implementation of clock_times to insure that the calculations used always maintain |* full double-precision floating point accuracy across multi-million bit simulations. |* |* Although clock_times will generally be related to the UI interval for the |* primary SerDes channel being simulated, there is no requirement that there is |* any relationship between the clock ticks generated by clock_times and the actual |* waveform returned in the primary channel. It is possible for the CDR to go out |* of lock, resulting in clock_ticks that have no definite relationship to the output |* wave. |* |* There is no requirement that clock times should be integer multiples of the |* sample interval (or time step used to represent the waveforms).There is also |* no requirement that there be a relationship between clock_times in the |* primary channel, and any additional waveform components in the wave vector, such |* as crosstalk. Crosstalk channels shall not be constrained to any timing |* relationship to the primary channel, or to the clock_times vector. | ***************************************************************************** ANALYSIS PATH/DATA THAT LED TO SPECIFICATION Additional notes regarding correct clock_times usage have been included as part of this BIRD, distilled from discussions on the ibis-macro reflector. Additional notes regarding clock_times * The previous specification was vague with respect to the meaning of one half clock period. As a result, implementations have interpreted this as being one half of a Unit Interval (UI), which is erronious.In reality, the CDR clock is generally used to recover a stable clock from the data stream and use that as the basis for sampling (latching) the incoming waveform. Since the CDR locks on differential crossings at the edge of an eye, the sampler in a full rate CDR architecture uses the opposite edge of the recovered clock to generate the sample point. In a locked system under steady state conditions, the mean of the clock period is also the nominal period (UI) of the data stream. However, even under steady state conditions, random fluctuations in the CDR loop will cause clock deviation that can be seen as jitter, along with a subsequent shift in sample point. Under these conditions, the clock period (and sample point) will vary over time. The instantaneous clock period can be significantly less than or greater than the nominal period. * The current specification of clock times, and any implementations flowing from this, are technically wrong, resulting in a difference between the actual sample point in a receiver, and the calculated sample point. Our first order calculations at Teraspeed consulting indicate that this is at the minimum an error of ± 5% of a nominal UI. Depending on the CDR, and the way it responds to stressful data patterns, this can be larger. For any particular time slice, this means that the center of the eye for a given single bit of data can be incorrect if the nominal UI is used for calculation of the receiver sample point, causing a skew in any derived statistics. ***************************************************************************** ANY OTHER BACKGROUND INFORMATION: This is an editorial correction to clarify the usage of clock_times. *****************************************************************************