Вы находитесь на странице: 1из 56

VC Verification IP Interlaken

Frequently Asked Questions (FAQ)


This document is protected by copyright.
To obtain support on Synopsys products, see http://www.synopsys.com/support.

1 0BGeneral ................................................................................................................................................. 3
1.1 How do I access the VIP documentation and example? ................................................................ 4
1.2 How do I write a basic sequence?.................................................................................................. 5
1.3 How do I write an error sequence? ................................................................................................ 6
1.4 How do I write a sequence for Interleaved data? ........................................................................... 7
1.5 How do I write a sequence for user-defined data?......................................................................... 8
1.6 How do I use callbacks for writing a sequence? ............................................................................ 9
1.7 What is variable burst size and how do I enable this feature of the BFM? .................................. 10
1.8 How do I enable the Big endian feature of the BFM? .................................................................. 11
1.9 How do I configure Burst Max? .................................................................................................... 12
1.10 How do I configure Burst Min? ..................................................................................................... 13
1.11 How do I configure Burst Short? .................................................................................................. 14
1.12 How do I configure the number of channels? ............................................................................... 15
1.13 How do I configure the number of channels to be interleaved in case of Interleaved data? ....... 16
1.14 How do I configure the number of lanes? .................................................................................... 17
1.15 How do I configure Gear-Box size?.............................................................................................. 18
2 Flow Control ...................................................................................................................................... 19
2.1 How do I change Channel status from XON to XOFF and vice versa? ....................................... 20
2.2 How do I enable OOB flow control? ............................................................................................. 21
2.3 What is the use of the Enable Ignore Update flow and how do I enable or disable this feature of
the BFM? ...................................................................................................................................... 22
3 Framing Layer ................................................................................................................................... 23
3.1 How do I corrupt Block type of a framing layer control word? ...................................................... 24
3.2 How do I corrupt the content of a framing layer word? ................................................................ 25
3.3 How do I corrupt the Framing or Inversion bit of a diagnostic word? ........................................... 26
3.4 How do I drop a framing layer skip word? .................................................................................... 27
3.5 How do I corrupt the Link status and the Lane status of a diagnostic control word? ................... 28
3.6 How do I corrupt CRC32 of a diagnostic control Word? .............................................................. 29
3.7 How do I change a protocol layer word to a framing layer word and vice versa? ........................ 30
3.8 How do I configure the length of a Metaframe? ........................................................................... 31
3.9 How do I configure the number of skip words in a Metaframe? ................................................... 32
3.10 How do I enable or disable scrambling? ...................................................................................... 33
3.11 How do I insert a skew between lanes of a link? ......................................................................... 34
3.12 How do I break a 64/67b word boundary lock? ............................................................................ 35
3.13 How do I break a scrambler state synchronization lock? ............................................................. 36
4 Protocol Layer ................................................................................................................................... 37
4.1 How do I configure the BFM to support more than 256 channels? .............................................. 38
4.2 How do I drop a protocol layer word?........................................................................................... 39
4.3 How do I configure the SOP bit of a protocol layer control word? ............................................... 40
4.4 How do I configure the EOP bit of a protocol layer control word? ............................................... 41

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 1 of 56
4.5 How do I configure the Reset Calendar bit of a protocol layer word? .......................................... 42
4.6 How do I change an idle control word to a burst control word and vice versa? ........................... 43
4.7 How do I corrupt CRC24 of a protocol layer control word? .......................................................... 44
4.8 How do I change a protocol layer control word to a data word and vice versa? .......................... 45
4.9 What is Idle between bursts of a packet and how do I enable this feature of the BFM? ............. 46
4.10 How do I enable or disable Disparity? .......................................................................................... 47
4.11 How do I enable or disable the PL Status bit? ............................................................................. 48
5 Look-Aside Mode .............................................................................................................................. 49
5.1 How do I enable the Look-Aside extension? ................................................................................ 50
5.2 How do I corrupt the Protocol Type bit of a Burst Control word in the Look-aside mode? .......... 51
5.3 How do I enable or disable multi-bursts sequence in the Look-aside mode? .............................. 52
6 Retransmission Mode ....................................................................................................................... 54
6.1 How do I enable the Retransmission extension? ......................................................................... 55

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 2 of 56
1 General
0B

This section provides the following list of frequently asked general questions for VC VIP
Interlaken:
 How do I access the VIP documentation and example?
 How do I write a basic sequence?
 How do I write a sequence for Interleaved data?
 How do I write a sequence for user-defined data?
 How do I use callbacks for writing a sequence?
 How do I enable the Big endian feature of the BFM?
 How do I configure Burst Max?
 How do I configure Burst Min?
 How do I configure Burst Short?
 How do I configure the number of channels?
 How do I configure the number of channels to be interleaved in case of Interleaved data?
 How do I configure the number of lanes?
 How do I configure Gear-Box size?

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 3 of 56
1.1 How do I access the VIP documentation and example?
All PDF documents are available on SolvNet (click here).

Interlaken VIP Documentation Directory:


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc

VC VIP for Interlaken UVM User Guide (PDF):


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc/intlkn_nvs_uvm_user_guid
e.pdf

VC VIP for Interlaken OVM User Guide (PDF):


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc/intlkn_nvs_ovm_user_guid
e.pdf

VC VIP for Interlaken Getting Started Guide (PDF):


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc/intlkn_nvs_uvm_
getting_started.pdf

VC VIP for Interlaken Release Notes (PDF):


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc/intlkn_nvs_release_notes
.pdf

Directory that contains a list of an Interlaken VIP example:


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/sim

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 4 of 56
1.2 How do I write a basic sequence?
To write a basic sequence, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_config config;

3. Register the sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert (req.randomize() with {
//For specifying data type, we use data_type
//variable, which is the intlkn_trans class variable.
//(Example shows data type of the decrement data type)
req.data_type==INTLKN_DEC_DATA;
//For specifying data_length, we use the data_len variable,
//which is the intlkn_trans class variable. (Example shows
//data length of 512 bytes)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (Example specifies
//channel number 0)
req.channel==0 ;});
//This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 5 of 56
1.3 How do I write an error sequence?
Perform the following steps to write an error sequence:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register the sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type variable,
//which is the intlkn_trans class variable. (Example shows
//the data type of the decrement data type)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable.
//(Example shows the data length of 512 bytes)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (Example
//specifies channel number as 0)
req.channel==0 ;});
//This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error. The following example shows that FL
payload word is configured with value as 67'h3_0011_0011_0011_0011:
err_config.set_fl_payload_word(67'h3_0011_0011_0011_0011);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 6 of 56
1.4 How do I write a sequence for Interleaved data?
For writing interleaved sequences, set the req variable of the intlkn_trans class,
interleave_data = 1, and make sure that at least two channels are XON.

To write a sequence for interleaved data, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from ovm_sequence, and
pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_config config;

3. Register the sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of the sequence is as follows:


`ovm_create(req)
assert (req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel, which
//is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
//Enables the interleaving of data within the specified
//numbers of channels.
req. interleave_data = 1
//This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 7 of 56
1.5 How do I write a sequence for user-defined data?
To provide a specific value to a sequence, use the data[] variable from the intlkn_trans
class. For example, req.data [15:0] =16’h4455 gives 16-bit value, that is 4455, from the
sequence.

To write a sequence for user-defined data, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and the handle for the class to use in a sequence as follows:
nvs_intlkn_config config;

3. Register the sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert (req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_USER_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies the channel number as 0.)
req.channel==0 ;});
//For specifying the user data, use the following:
req.data [15:0] =16’h4455
//This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 8 of 56
1.6 How do I use callbacks for writing a sequence?
Perform the following steps to use callbacks for writing a sequence:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and the handle for the class to use in a sequence. For
example:
nvs_intlkn_err_config err_config;

3. Register the sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = “sequence name”);
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying the data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
// This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_pl_la_icw_protocol_type(0);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 9 of 56
1.7 What is variable burst size and how do I enable this feature of the
BFM?
In a basic model, packet size is distributed into a burst by using a fixed algorithm. However, you
can modify this burst size by using a feature of the BFM known as variable burst size. In this
feature, a packet is distributed into random size bursts.

To enable variable-sized bursts from the BFM, use any of the following way:
 Enable or disable from the set_enable_variable_burst_size testbench
(1:enable or 0: disable)
 Specify +INTLKN_ENABLE_VARIABLE_BURST_SIZE = 1 or 0 at runtime (Default
value: +INTLKN_ENABLE_VARIABLE_BURST_SIZE = 0)

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 10 of 56
1.8 How do I enable the Big endian feature of the BFM?
This feature allows you to enable-1 or disable-0 big endian for data word before sending it to an
analysis port.

To enable or disable the feature, use the system configuration function,


set_enable_big_endian(<1 or 0>) from testbench or specify
+INTLKN_ENABLE_BIG_ENDIAN valueplusarg at runtime.
(Default value: +INTLKN_ENABLE_BIG_ENDIAN=0)

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 11 of 56
1.9 How do I configure Burst Max?
To configure Burst Max, specify the system configuration function,
set_tx_burst_max_size(<value>), from testbench. Also, you can configure it at runtime by
using the +INTLKN_BURST_MAX_SIZE=<value> valueplusarg.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 12 of 56
1.10 How do I configure Burst Min?
To configure Burst Min, specify the system configuration function,
set_tx_burst_min_size(<value>), from testbench. Also, you can configure it at runtime by
using the +INTLKN_BURST_MIN_SIZE=<value> valueplusarg.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 13 of 56
1.11 How do I configure Burst Short?
To configure Burst Short, specify the system configuration function,
set_tx_burst_short_size(<value>), from testbench. Also, you can configure it at runtime
by using the +INTLKN_BURST_SHORT_SIZE=<value> valueplusarg.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 14 of 56
1.12 How do I configure the number of channels?
Use the system configuration function, set_tx_num_of_channels(<value>), from testbench
to set Tx number of channels and set_rx_num_of_channels(<value>) to set Rx number of
channels. You can also provide their values at runtime using the
+INTLKN_NUM_OF_CHANNELS=<value> valueplusarg. Here, the argument sets equal number
of <value> for Tx and Rx channels.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 15 of 56
1.13 How do I configure the number of channels to be interleaved in
case of Interleaved data?
To configure the number of channels to be interleaved, use the system configuration function,
set_num_of_channels_interleave(<value>), from testbench.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 16 of 56
1.14 How do I configure the number of lanes?
To configure the number of lanes, use the system configuration function,
set_tx_num_of_lanes(<value>), from testbench to set Tx number of lanes and
set_rx_num_of_lanes(<value>) to set Rx number of lanes. You can also provide their
values at runtime using the +INTLKN_NUM_OF_LANES=<value> valueplusarg. Here, the
argument sets equal number of <value> for Tx and Rx lanes.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 17 of 56
1.15 How do I configure Gear-Box size?
To configure gear-box size, use the +define+INTLKN_GB_SIZE=<value> define at compile
time.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 18 of 56
2 Flow Control
This section provides the following list of frequently-asked Flow control questions for VC VIP
Interlaken:
 How do I change Channel status from XON to XOFF and vice versa?
 How do I enable OOB flow control?
 What is the use of the Enable Ignore Update flow and how do I enable or disable this
feature of the BFM?

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 19 of 56
2.1 How do I change Channel status from XON to XOFF and vice
versa?
For changing channel status from XON to XOFF, use err_no and err_val variables of the
intlkn_trans class. The err_no variable indicates channel status to be provided, that is 1 is
to XOFF and 2 is to XON. The err_val variable indicates channel number whose status is to be
set. For example, err_val=5 and err_no=1 set channel number 5 to XOFF status.

To change channel status from XON to XOFF and vice versa, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and the handle for the class to use in a sequence. For
example:
nvs_intlkn_err_config err_config;

3. Register the sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The //example
shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The //example
shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example //specifies
channel number as 0.)
req.channel==0 ;});

6. Use err_val and err_no as follows:


req.err_no=1;
req.err_val=5;
//This sends a transaction to the driver using the //`ovm_send(req)
method.
`ovm_send(req)

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 20 of 56
2.2 How do I enable OOB flow control?
To enable Out of Band (OOB) flow control, enable the system configuration function,
set_oob_fc(1), from testbench or specify the +INTLKN_USE_OOB_FC=1 valueplusarg at
runtime.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 21 of 56
2.3 What is the use of the Enable Ignore Update flow and how do I
enable or disable this feature of the BFM?
This feature enables the BFM to ignore channel status of the DUT. To enable this feature, set
set_enable_ignore_update_fc(1:enable or 0:disable) or specify
+INTLKN_ENABLE_IGNORE_UPDATE_FC = 1 or 0 at runtime. (Default value:
+INTLKN_ENABLE_IGNORE_UPDATE_FC = 0)

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 22 of 56
3 Framing Layer
This section provides the following list of frequently-asked Framing layer questions for VC VIP
Interlaken:
 How do I corrupt Block type of a framing layer control word?
 How do I corrupt the content of a framing layer word?
 How do I corrupt the Framing or Inversion bit of a diagnostic word?
 How do I drop a framing layer skip word?
 How do I corrupt the Link status and the Lane status of a diagnostic control word?
 How do I corrupt CRC32 of a diagnostic control Word?
 How do I change a protocol layer word to a framing layer word and vice versa?
 How do I configure the length of a Metaframe?
 How do I configure the number of skip words in a Metaframe?
 How do I enable or disable scrambling?
 How do I insert a skew between lanes of a link?
 How do I break a 64/67b word boundary lock?
 How do I break a scrambler state synchronization lock?

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 23 of 56
3.1 How do I corrupt Block type of a framing layer control word?
Use the callback specified for each Framing Layer word. For example, to corrupt a
synchronization word, use the set_fl_sync_block_type(6'b010001) callback. Similarly,
you can corrupt all Framing Layer words using their corresponding callbacks.

To corrupt Block type of a framing layer control word, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
//This sends a transaction to driver using the
//`ovm_send(req) method.
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config.set_fl_sync_block_type(6'b010001);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 24 of 56
3.2 How do I corrupt the content of a framing layer word?
Use the callback specified for each Framing Layer word. To corrupt a framing layer word, use the
set_fl_skip_content(64'h145454545454545) callback. Similarly, to corrupt other
Framing Layer words, use their corresponding callbacks.

To corrupt the content of a framing layer word, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
//This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_fl_skip_content(64'h4145_4545_4545_4545);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 25 of 56
3.3 How do I corrupt the Framing or Inversion bit of a diagnostic
word?
Use the callback specified for the framing or inversion bit of a diagnostic word. To corrupt the bit
of the diagnostic word, use set_fl_diag_framing(3’b011).

To corrupt the Framing or Inversion bit of a diagnostic word, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
//This sends a transaction to driver using the
//`ovm_send(req) method.
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_fl_diag_framing(3’b011);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 26 of 56
3.4 How do I drop a framing layer skip word?
Use the specified callback to drop a framing layer skip word. The drop_fl_skip_word=1 callback
drops one framing layer skip word. Similarly, drop other framing layer words using their
corresponding callbacks.

To drop a framing layer skip word, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
// This sends a transaction to the driver using the
//`ovm_send(req) method.
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. drop_fl_skip_word=1;

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 27 of 56
3.5 How do I corrupt the Link status and the Lane status of a
diagnostic control word?
For the Lane status, use the set_fl_diag_status_bit_1 (1'b0) callback to change the status of a
lane in a diagnostic word to Zero.
For the Link status: Use callback set_fl_diag_status_bit_0 (1'b0), this will change the status of link
in diagnostic word to Zero.

To corrupt the Link status and the Lane status of a diagnostic control word, perform the following
steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The //example
shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying the data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The //example
shows data length of 512 bytes.)
req.data_len==512;
//For specifying the channel number, we use channel,
//which is the intlkn_trans class variable. (The example //specifies
channel number as 0.)
req.channel==0 ;});
//This sends a transaction to the driver using the //`ovm_send(req)
method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_fl_diag_status_bit_1 (1'b0);
err_config. set_fl_diag_status_bit_0 (1'b0);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 28 of 56
3.6 How do I corrupt CRC32 of a diagnostic control Word?
Use the specified callback to corrupt CRC32 of a diagnostic control word. The
set_fl_diag_crc(32'h1251_3621) callback corrupts CRC32 bits of a diagnostic control word.

To corrupt CRC32 of a diagnostic control word, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
// This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_fl_diag_crc(32'h1251_3621);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 29 of 56
3.7 How do I change a protocol layer word to a framing layer word
and vice versa?
To change a protocol layer word to a framing layer word, use the set_pl_icw_control(1'b0)
callback. This makes an error for an invalid block type. Also, to change a framing layer word to a
protocol layer word, use the set_pl_icw_control(1'b1) callback. To corrupt Burst Control Word
(BCW) control bit, use the set_pl_bcw_control(1'b0) callback.

To change a protocol layer word to a framing layer word, and vice versa, perform the following
steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as shown here:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = "sequence name");
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The //example
shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying the data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The //example
shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example //specifies
channel number as 0.)
req.channel==0 ;});
//This sends a transaction to the driver using the //`ovm_send(req)
method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_pl_icw_control(1'b0);
err_config. set_pl_bcw_control(1'b0);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 30 of 56
3.8 How do I configure the length of a Metaframe?
Use the system configuration function, set_tx_metaframe_size(<value>), from testbench
to set Tx Metaframe size and set_rx_metaframe_size(<value>) to set Rx Metaframe size.
You can also provide the value at runtime using +INTLKN_METAFRAME_LENGTH=<value>.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 31 of 56
3.9 How do I configure the number of skip words in a Metaframe?
Use the system configuration function, set_tx_num_of_skips(<value>), from testbench to
set the number of skip in a metaframe from Tx and set_rx_num_of_skips(<value>)
function to set the number of skip in a metaframe from Rx. You can also provide the value at
runtime using the +INTLKN_NUM_OF_SKIPS=<value> valueplusarg. Here, the argument sets
equal number of <value> for Tx and Rx.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 32 of 56
3.10 How do I enable or disable scrambling?
Use the system configuration function, set_enable_scrambling(<value>), from testbench
to enable(1) or disable(0) scrambling. You can also use +INTLKN_ENABLE_SCRAMBLING=1 or
+INTLKN_ENABLE_SCRAMBLING=0 to enable or disable scrambling at runtime.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 33 of 56
3.11 How do I insert a skew between lanes of a link?
Use the system configuration function, set_skew_btw_lanes(<value>), from testbench to
insert a skew between lanes. You can also use +INTLKN_SKEW_BTW_LANES=<value> to set a
skew between lanes at runtime.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 34 of 56
3.12 How do I break a 64/67b word boundary lock?
To break a word boundary lock, pass 16 invalid framing bits within a frame of 64 words. The
callback for corrupting framing bits is set_pl_icw_inversion_framing(3’b111).
To corrupt a framing bit, see the nvs_intlkn_err_fl_16_sync_err_test test from the
following location:
$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/test/nvs_intlkn_err_fl_16_sy
nc_err_tb.sv

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 35 of 56
3.13 How do I break a scrambler state synchronization lock?
To break a scrambler synchronization lock, use either of the following two techniques:
 Fire four consecutive bad synchronization words. For this, see the
nvs_intlkn_err_fl_4_consecutive_sync_blk_typ_test test from the following
location:
$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/test/nvs_intlkn_err_fl
_4_consecutive_sync_blk_typ_tb.sv
 Fire three consecutive bad scrambler state words. For this, see the
nvs_intlkn_err_fl_3_consecutive_ss_blk_typ_test test from the following
location:
$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/test/nvs_intlkn_err_fl
_3_consecutive_ss_blk_typ_tb.sv

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 36 of 56
4 Protocol Layer
This section provides the following list of frequently-asked Protocol Layer questions for VC VIP
Interlaken:
 How do I configure the BFM to support more than 256 channels?
 How do I drop a protocol layer word?
 How do I configure the SOP bit of a protocol layer control word?
 How do I configure the EOP bit of a protocol layer control word?
 How do I configure the Reset Calendar bit of a protocol layer word?
 How do I change an idle control word to a burst control word and vice versa?
 How do I corrupt CRC24 of a protocol layer control word?
 How do I change a protocol layer control word to a data word and vice versa?
 What is Idle between bursts of a packet and how do I enable this feature of the BFM?
 How do I enable or disable Disparity?
 How do I enable or disable the PL Status bit?

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 37 of 56
4.1 How do I configure the BFM to support more than 256 channels?
To configure the BFM to support more than 256 channels, use the
set_multi_use_bits(1’b1) function from the system configuration class, namely,
nvs_intlkn_config or provide the +INTLKN_MULTI_USE_BITS=1 valueplusarg at runtime.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 38 of 56
4.2 How do I drop a protocol layer word?
Use the specified callback to drop a protocol layer control word. The drop_pl_data_word=1
callback drops one protocol layer data word. Similarly, to drop other protocol layer words, use
their corresponding callbacks.

To drop a protocol layer word, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as shown here:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and the handle for the class to use in a sequence. For
example:
nvs_intlkn_err_config err_config;

3. Register the Sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = “sequence name”);
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying the data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
//This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. drop_pl_data_word=1;

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 39 of 56
4.3 How do I configure the SOP bit of a protocol layer control word?
Use the set_pl_icw_sop(1'b1) callback to configure the Start of Packet (SOP) bit of an Idle
Control Word (ICW) to 1. Similarly, use set_pl_bcw_sop(1’b1) to set the SOP bit of Burst Control
Word (BCW).

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 40 of 56
4.4 How do I configure the EOP bit of a protocol layer control word?
Use the set_pl_bcw_eop_format(4'b0011) callback to configure the End of Packet (EOP) bit. This
callback sets the EOP bit in a BCW to 4’b0011. Similarly, use set_pl_icw_eop_format(4'b0011) to
set an ICW EOP bit.

To configure the EOP bit of a Protocol Layer Control word, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = “sequence name”);
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
//This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_pl_bcw_eop_format(4'b0011);
err_config. set_pl_icw_eop_format(4'b0011);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 41 of 56
4.5 How do I configure the Reset Calendar bit of a protocol layer
word?
Use the set_pl_bcw_reset_cal(1'b0) callback to configure the Reset Calendar bit. This callback
sets reset calendar bit in BCW to 1’b0. Similarly, use set_pl_icw_reset_cal(1'b0) to set ICW reset
calendar bit.

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = “sequence name”);
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
//This sends a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_pl_bcw_reset_cal(1'b0);
err_config. set_pl_icw_reset_cal(1'b0);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 42 of 56
4.6 How do I change an idle control word to a burst control word and
vice versa?
Use the set_pl_icw_type(1'b1) callback to configure Idle Control Word (ICW) in Protocol layer.
The callback changes Idle Control Word (ICW) type to Burst Control Word (BCW). Similarly, use
a callback to change BCW to ICW.

To change ICW to BCW, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = “sequence name”);
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
// This send a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_pl_icw_type(1'b1);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 43 of 56
4.7 How do I corrupt CRC24 of a protocol layer control word?
Use the set_pl_bcw_crc(24'h0000_2) callback to corrupt the CRC24 bit in Burst Control Word
(BCW) of Protocol layer. Similarly, if you want to corrupt CRC24 in Idle Control Word (ICW), use
the set_pl_icw_crc(24'h0000_2) callback.

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = “sequence name”);
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;

//For specifying data length, we use the data_len


//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
// This send a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_pl_bcw_crc(24'h0000_2);
err_config. set_pl_icw_crc(24'h0000_2);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 44 of 56
4.8 How do I change a protocol layer control word to a data word and
vice versa?
Use the specified callback for inversion and framing layer bit. To change a control word to a data
word, use the set_fl_diag_framing(3’b001) callback. This shows that a diagnostic word framing
bit is corrupted and is changed to a data word.

To change a protocol layer control word to a data word, perform the following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence class,
and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name , nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = “sequence name”);
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The
//example shows data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable. (The
//example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example
//specifies channel number as 0.)
req.channel==0 ;});
//This send a transaction to the driver using the
//`ovm_send(req) method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_fl_diag_framing(3’b001);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 45 of 56
4.9 What is Idle between bursts of a packet and how do I enable this
feature of the BFM?
As per your requirement, you can configure the number of Idle Control Word (ICW) between
bursts either from testbench or by giving values to the following valueplusargs at runtime:

To enable or disable this feature use function, set_enable_idle_btw_bursts(<1-enable


or 0-disable>), from the testbench or by specifying
+INTLKN_ENABLE_IDLE_BTW_BURSTS=1 or 0 at runtime.
Also, to specify the number of ICWs b/w bursts, you have to set the set_idle_min(<value>)
and set_idle_max(<value>) functions from the testbench or can specify
+INTLKN_IDLE_MIN = <value> and +INTLKN_IDLE_MAX= <value> at runtime. BFM will
take random values b/w idle_min and idle_max values supplied by a user.
Default Values are as follows:
+INTLKN_ENABLE_IDLE_BTW_BURSTS = 0
+INTLKN_IDLE_MIN = 0
+INTLKN_IDLE_MAX = 10

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 46 of 56
4.10 How do I enable or disable Disparity?
Use the system configuration function, set_enable_disparity(<value>), from testbench to
enable (1) or disable (0) disparity. You can also provide the value at runtime using
+INTLKN_INITIAL_DISPARITY= 1 to enable disparity.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 47 of 56
4.11 How do I enable or disable the PL Status bit?
Use the system configuration function, set_use_pl_status_bit0 (<value>), from
testbench to enable (1) or disable (0) the use of the PL Status bit. You can also use
+INTLKN_USE_PL_STATUS_BIT0=1 to enable the PL Status bit at runtime.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 48 of 56
5 Look-Aside Mode
This section provides the following list of frequently-asked Look-Aside mode questions for VC VIP
Interlaken:
 How do I enable the Look-Aside extension?
 How do I corrupt the Protocol Type bit of a Burst Control word in the Look-aside mode?
 How do I enable or disable multi-bursts sequence in the Look-aside mode?

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 49 of 56
5.1 How do I enable the Look-Aside extension?
To enable the Look-Aside extension, call the system configuration function, namely,
set_la_mode(1) from testbench or by specifying the +INTLKN_LA_MODE=1 valueplusarg at
runtime.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 50 of 56
5.2 How do I corrupt the Protocol Type bit of a Burst Control word in
the Look-aside mode?
Use the set_pl_la_icw_protocol_type(0)callback to corrupt the Protocol Type bit in the
Look-aside mode extension. Similarly, use set_pl_la_bcw_protocol_type(0) to corrupt the
Protocol Type bit in a Burst Control Word.

To corrupt the Protocol Type bit of a Burst Control word in the Look-aside mode, perform the
following steps:

1. Declare a class for the corresponding sequence, extend it from the ovm_sequence
class, and pass the transaction class as a parameter as follows:
class sequence_name extend ovm_sequence (#intlkn_trans)

2. Declare all local variables and handle for the class to use in a sequence. For example:
nvs_intlkn_err_config err_config;

3. Register a sequence with the relevant sequencer as follows:


`ovm_sequence_utils(sequence_name, nvs_intlkn_sequencer)

4. Call a new constructor as follows:


function new(string name = “sequence name”);
super.new(name);
endfunction: new

5. The main body of a sequence is as follows:


`ovm_create(req)
assert(req.randomize() with {
//For specifying data type, we use the data_type
//variable, which is the intlkn_trans class variable. (The //example
shows the data type of the decrement data type.)
req.data_type==INTLKN_DEC_DATA;
//For specifying data length, we use the data_len
//variable, which is the intlkn_trans class variable.
//(The example shows data length of 512 bytes.)
req.data_len==512;
//For specifying channel number, we use channel,
//which is the intlkn_trans class variable. (The example //specifies
channel number as 0.)
req.channel==0 ;});
// This send a transaction to the driver using the //`ovm_send(req)
method
`ovm_send(req)

6. Use the specific callback for a desired error as follows:


err_config. set_pl_la_icw_protocol_type(0);
err_config. set_pl_la_bcw_protocol_type(0);

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 51 of 56
5.3 How do I enable or disable multi-bursts sequence in the Look-
aside mode?
Enable the Look-aside mode by giving the valueplusargs, namely, +INTLKN_LA_MODE=1,
+INTLKN_TX_LA_MULTI_BURST=1, and +INTLKN_RX_LA_MULTI_BURST=1 at runtime. You
can also use the system configuration functions, namely, set_la_mode(1),
set_tx_la_multi_burst(1), and set_rx_la_multi_burst (1) from testbench to
enable all these features. Finally, you have to fire a transaction with a burst size greater than
Burst Max.

Note: To write a sequence, see FAQ: How do I access the VIP documentation and example?
All PDF documents are available on SolvNet (click here).

Interlaken VIP Documentation Directory:


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc

VC VIP for Interlaken UVM User Guide (PDF):


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc/intlkn_nvs_uvm_user_guid
e.pdf

VC VIP for Interlaken OVM User Guide (PDF):


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc/intlkn_nvs_ovm_user_guid
e.pdf

VC VIP for Interlaken Getting Started Guide (PDF):


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc/intlkn_nvs_uvm_
getting_started.pdf

VC VIP for Interlaken Release Notes (PDF):


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/doc/intlkn_nvs_release_notes
.pdf

Directory that contains a list of an Interlaken VIP example:


$DESIGNWARE_HOME/vip/nvs/intlkn_nvs/latest/sim

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 52 of 56
How do I write a basic sequence?

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 53 of 56
6 Retransmission Mode
This section provides the following list of frequently-asked retransmission mode question for VC
VIP Interlaken:
 How do I enable the Retransmission extension?

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 54 of 56
6.1 How do I enable the Retransmission extension?
To enable the retransmission extension, call the system configuration function, namely,
set_retrans_enable(1) from testbench or by specifying the
+INTLKN_RETRANS_ENABLE=1 valueplusarg at runtime.

[Back to top] [Go to General] [Go to Flow Control] [Go to Framing Layer]
[Go to Protocol Layer] [Go to Look-Aside Mode] [Go to Retransmission Mode]

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 55 of 56
Copyright Notice and Proprietary Information
 2017 Synopsys, Inc. All rights reserved. This software and documentation contain confidential and proprietary information that is
the property of Synopsys, Inc. The software and documentation are furnished under a license agreement and may be used or
copied only in accordance with the terms of the license agreement. No part of the software and documentation may be
reproduced, transmitted, or translated, in any form or by any means, electronic, mechanical, manual, optical, or otherwise, without
prior written permission of Synopsys, Inc., or as expressly provided by the license agreement.
Destination Control Statement
All technical data contained in this publication is subject to the export control laws of the United States of America.
Disclosure to nationals of other countries contrary to United States law is prohibited. It is the reader's responsibility to
determine the applicable regulations and to comply with them.
Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH
REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
Trademarks
Synopsys and certain Synopsys product names are trademarks of Synopsys, as set forth at
http://www.synopsys.com/Company/Pages/Trademarks.aspx.
All other product or company names may be trademarks of their respective owners.
Third-Party Links
Any links to third-party websites included in this document are for your convenience only. Synopsys does not endorse
and is not responsible for such websites and their practices, including privacy practices, availability, and content.

Synopsys, Inc.
690 E. Middlefield Road
Mountain View, CA 94043
www.synopsys.com

VC VIP Interlaken FAQ Version M-2017.03 – March 2017


Page 56 of 56

Вам также может понравиться