The present invention relates generally to data communications in a PCI bus system. More specifically the invention concerns a peripheral device for generating and verifying data read from an external source and data written to an external target. In other aspects it also concerns a method for verifying read cycles on a PCI bus, and a computer program.
Previous systems have used memory on a peripheral device to store data read from an external source and to store data to be written to an external target.
The system processor is required to initialize the entire buffer on the peripheral device before conducting an external read. The processor is also required to initialize the entire buffer and write the entire buffer before conducting an external write. Even though the peripheral device may read data rapidly, for example PCI bursting at 1 datum per clock, the processor is often very slow to read from the device, or write to the device, and uses non-burst transactions from the system's bridge device. This all tends to slow communications.
Further delays are introduced when it is necessary to verify the data written from an external source and read into the peripheral device. In this event the processor must read the entire buffer out of the peripheral device and then verify it against a test pattern. Since verification occurs after the peripheral device has completed transferring its entire buffer, a later trigger must be used to capture any verification failure making it difficult to retrace and find the actual error.
A peripheral device to generate read and write cycles on a PCI bus comprises a PCI bus interface, and a control unit. The control unit has a data pattern generator to source a data pattern to a target via the interface during a write operation, and to verify an incoming data pattern from the interface during a read operation.
Referring to
The board 100 can be configured as both a Master (initiator) and Slave (target) device. This is in order so that the board 100 can verify data that a peripheral device reads or to program the peripheral device with data to write to a PCI bus.
The Master cannot perform transfers to its own Slave. Therefore for Master to Slave transfers, two boards 100 will be required. However in all other tests, for example from the board 100 to or from a host CPU or through a bus bridge, will only require one board 100. In some cases more than one CPI slot will be required to fully test the system. Thus in particular the board 100 is designed primarily to test 64-bit PCI transfer modes running at 66 MHz.
The board 100 is a PCI66DG board and is a 64-bit version of the PCI Master/Slave Board (PCIMS) that is currently being used to test the PCI bus interface in peripheral devices of the applicant. The board 100 is intended to run at 66 MHz bus speed. The board 100 does however provide support for a 32-bit PCI data transfer as well. The main components of the board 100 are a control unit 110, a PCI bus 120 and a memory 130.
The control unit 110 includes an address decode logic unit, a command interpreter unit and a command memory as will be described in more detail with reference to
The memory unit 130 comprises 4 MB of storage and is used for emulating a Slave, or target, device. It consists of two blocks of SRAM 132 and 134 that each have 256K of memory space and as a 32-bit I/O the 256K of memory space is shared at the bottom of the same memory space. Thus a total of 4 MB memory can be used for access to the peripheral device as a PCI memory target.
The address decode logic unit 112 is used when the board 100 is addressed as the Slave. A memory base register is used to provide the base address for accessing the external memory units 132 and 134. The decoding logic also uses a configuration memory base register as the base address for programming the internal instruction queue and to provide an alternative channel for programming the configuration space through memory transaction. When the board's configuration space and the instruction queue is accessed, the decoding logic will only allow a single data phase for each transaction. When either external memory unit 132 or 134 is addressed, the board 100 can support burst transaction.
The command interpreter unit 114 is used for the operation of the PCI Master state machine. The interpreter 114 fetches commands from the command memory/instruction queue 116 and interprets each command. The command memory/instruction queue 116 is located within the control unit 110 internal SRAM. The command memory 116 includes memory of 256 192-bit instructions of commands and programmable parameters for all Master or initiator transactions. This is implemented using the embedded SRAM available within the control unit 110. Due to historical reasons, the 192-bit instruction is separated into three parts being the instruction queue, the extended instruction queue and the extended address queue. It takes three memory regions for programming. The extended address queue is only needed to specify addresses above 4 TB (42 bits).
A data generator engine 118 is shown as part of the control unit 110 and can act either as a state machine or a processor on the peripheral device to generate data or verify data dynamically as a transfer occurs. Software is used to program and verify the peripheral device. Using a data generator engine 118 on a peripheral device, that is in the control unit 110, reduces the amount of programming that needs to be done to the device and the number of cycles in order to verify transfers. Rather than program the device with 1 MB for every MB that it will transfer, the system only needs to program the device with the pattern type and seed values.
In acting as a data pattern generator, the data generator engine may verify incoming data transmitted on the system PCI bus 120 during the read operation. There are three data patterns being incremental pattern (repetitive addition), random pattern (pseudo-random) and a toggle pattern. In generating an incremental pattern, the generator bases this on continual increment to the base pattern register. The data generator operates in a purely sequential manner. Its operation is independent of the address or read/write transaction type. The first output from the generator is the base pattern.
In order to generate a random pattern, a random seed is required to be provided by software. The random seed is stored in the base register. The first output from the random generator is the seed itself and at the end of all the transactions the base register will latch the next out-going random number. The random pattern generator also operates in a purely sequential manner.
To generate a toggle pattern the generator utilizes the base register and the incremental register to provide the two toggling patterns. If a 32-bit Master is used, both the pattern A and B registers are needed to be set to the same value. If a 64-bit Master is chosen, then both the pattern A and B registers will be used. The generator operates in a sequential manner.
When the board is acting as the Master, via a Master state machine, a data verification and recording mechanism is enabled during the read transaction. Thus the incoming data will be compared to the pattern generated by the data pattern generator of the data generator engine. If the data is inconsistent and does not match, the offending address and the data will be recorded in the internal registers. Thus during the read transaction, the data generator provides reference data to compare with the incoming data. If a mismatch occurs then both the address and the data of the first occurrence of error will be logged and stored in the internal registers.
In order to support a O-wait state during the Master write/read burst transactions, the data pattern generators are designed to source the data to target during the write operation and verify the incoming data during the read operation.
The following description provides details on local address maps, local registers, the configuration space and command memory associated with the control unit 110.
The address map below shows the locations of the various memory and control buffers for the test board 100:
The PCI target data buffer has a 4 MB range starting from the address specified in a memory base address register which is a 64-bit address register.
The instruction queue, low and high, is 256 qwords deep and contains instructions used by the initiator when performing the test. The PCI instruction type and format are shown in the table below. The starting address is specified in the configuration memory base address register (BAR).
The bit field 63:32 is reserved for backward compatibility. It was previously the A(31:0) field during the address phase OR'ed with the extended address instruction queue to produce A(31:0). Bit field 31:28 is the PCI command type. The Device Type (1:0) and the Req 64_ena bit in the configuration register 0xA4 will qualify as either a 32 or a 64-bit mode in operation. Bit 27 is the terminate bit and is 0 for normal operation and a 1 for stop execution operation. When it is 1 the instruction containing the T bit will not be executed and INTA can be sent with appropriate set up by setting Intx_disable=0 and Inta_control=1.
Bit field 26:19 is byte enabled for transaction. It provides the BE pattern between the first and the last data phase. This field only applies when there are three or more data phases. The two sets of nibbles in this bit field need not be the same and for a 32-bit master, only bit field (22:19) is used. If the single data phase bit is enabled then this field will be ignored. Bit 18 is the dual address cycle and this is a qualified bit for the address bits (40:32) field. With the dual address cycle equal to 1 that particular cycle will run.
Bit field 17:14 is still to be determined and bit 13 relates to a single data phase. It is a modified bit for the length/iteration register. For MSI operation, the single data phase bit needs to be 0. When it is 0 the Master will perform a single burst transaction to the target. The length/iteration field will set the total number of quadword/dword (64/32 bit Master) transfer during the burst transfer. It will be set to 1 whereby the Master will perform a sequence of single 64/32 bit data transactions to the target with total number of single transactions set by the length/iteration register. The address of each single data transaction will be updated accordingly. When this bit is enabled, the single data phase transaction will only use the Start_BE (7:0) for each transaction.
Bit 12 is a pause bit. It will be set to 1 such that the Master will pause after the execution of the current instruction. The Master will wait for a memory read/write activity before proceeding to the next instruction.
Bit 11 is a loop bit and will be set to 1 such that the Master will loop back to the beginning of the instruction queue once it completes the current instruction. Bit 10 is the Pause2 bit and will be set to 1 whereby the Master will stay at the same instruction until the following condition is met: target abort, devsel_expiration, or AD(0) received is 0. Note this function can only be used on a read transaction with only one data phase.
Bit field 9:0 is reserved and previously was the A(41:32) field during the dual address phase which was OR'ed with the extended address instruction queue to produce the A(41:32). It is reserved for backward compatibility.
All of the bit fields 31 through to 10 are read/write bits.
With regard to the extended instruction queue, low and high in configuration memory base register (BAR2), it is 256 qwords deep and contains the extended instructions used by the initiator when performing the test. The PCI instruction type and the format are shown in the table below. The starting address is the configuration memory base address+x800.
The bit fields 63:32/47:32 are the length/iteration bits. This register is modified by the single data phase bit in the instruction. If the S bit is 0 then this register will indicate the following:
Bit field (61:32) indicates the length of transfer in DWORDS for 32 bit Master transfer. If a 0 value is in this field, it indicates 4 gigabytes of transfer;
Bit field (60:32) indicates the length of transfer in QUADWORDS for 64 bit Master transfers. If a 0 value is in this field in indicates 4 gigabytes of transfer.
If S bit is 1 this register field (47:32) alone will indicate the total number of the single data phase transfers for this current instruction. The value of 0 in the length means a real operational value of 4 gigabytes. For MSI operation this field needs to have a value of 1.
The bit field 31:15 is reserved and the bit 16 is the MSI bit that indicates the instruction as being an MSI transaction.
Bit field 15:8 is the End_BE(7:0) bit field. For 64-bit Master transfer, this is the ending BE pattern for the last data phase. For 32-bit Master transfer only bit (3:0) is used. This register applies if there are two or more data phases in the transaction. If a single data phase bit is set then this field will be ignored.
The bit field 7:0 is a Start_BE(7:0) bit field. For 64 bit Master transfer, this is the starting BE pattern for the first data phase. Start_BE will be used for the transfer. For 32 bit master transfer only the nibble (3:0) is used. This register applies if there is one or more data phases in the transaction.
All bit fields are read/write.
With regard to the extended address instruction queue, in the configuration memory base address register number 2 (BAR2) the extended address instruction queue is 256 qwords deep and contains the addresses used by the initiator when performing the test. The PCI instruction type and format will be hereinafter described. The starting address is the configuration memory base address+0x1000. This full 64-bit address is OR'ed with the instruction queue's bits (9:0) (63:32) to produce the address generated by the initiator for backward compatibility.
The bit field 63:0 is a read/write and relates to the PCI address (63:0). AD(63:32) is set the dual address cycle and AD (63:36) bits are static in nature. Only AD(35:2) is controlled internally by a counter. Also it will resynchronize to the correct address if the burst transaction is broken up in the middle or to generate the addresses on non-burst transactions.
Finally the configuration alias space referred to above provides a channel for the software to change the various configuration regeisters through the memory space.
The PCI command cycles that are supported as shown in the table below.
The following table contains the configuration register information for the test board 100. All specific registers of the board and essential PCI configuration registers are implemented.
The following comments are made in respect of some of the configuration register information.
The Vendor ID (OOH) identifies the Vendor and the device ID identifies the particular device also in location 00h.
Command Register (04h)
The command register controls the ability of the card or board 100 to generate and respond to different access cycles.
Bit field 15:11 is not used;
Bit number 10 represents INTx Disable whereby the value of 1 will disable the setting of the Inta_control in A4 register. It will override the auto INTA_generation;
Bit 9 represents the fast back to back disable represented by 0 and fast back to back enable represented by 1;
Bit 8 when set to one represents the enabling of the SERR# buffer otherwise 0 disables this buffer;
Bit 7 represents the stepping control and is a read only bit and when set to one enables the stepping control. All other bits from 15 down to 0 are read/write.
Bit 6 enables or disables the parity errors, a 0 represents the ignoring parity errors and a 1 represents taking normal action for parity errors;
Bit 5 represents the VGA pallet snoop and is disabled when 0;
Bit 4 when set to 0 creates a memory write instead of a memory write and invalidate and when set to 1 the initiator may generate memory write and invalidate commands. It has a value of 0 at reset;
Bit 3 is set to 0 to ignore special cycles and set to 0 to monitor special cycles;
Bit 2 specifies whether the card can act as an initiator, 0 is for disabling the initiator mode and 1 is for enabling the initiator mode;
Bit field 1 specifies whether the card responds to memory accesses and is set to 0 for disable memory space and set to 1 for enable memory space;
Bit field 0 specifies whether the card responds to I/O accesses (no response to I/O cycles). It is set to 0 to disable I/O space and set to 1 for enabling I/O space.
Bit fields 9, 5, 4 and 3 are all read/write enabled and signify that the logic is implemented but only a dummy write buffer is provided. Bit fields 10, 8, 6, 2, 1 and 0 are R/W and bit field 7 is read only.
The Status Register (06h)
This has 16 bits wherein bit 15 is a 1 to indicate parity error detected, bit 14 is set to 1 to indicate that SERR# is inserted, bit 13 is set to 1 to indicate that Master abort is received (not set by special cycles), bit 12 is set to 1 to indicate that target abort has been received and bit 11 is set to 1 to indicate that target abort has been signalled. All of the bits 15 to 11 are not implemented at this stage and are reset by writing a 1 to this bit position (0).
Bits 10 and 9 indicate the slowest DEVSEL# response which is set to 10. Settings of 00 indicate a fast DEVSEL# and its setting of 01 indicates a medium DEVSEL#.
Bit 8 is set to one to indicate that data parity is detected and is reset by writing 0 to this bit position. At this stage it has not been implemented.
Bit 7 indicates fast back to back capability and is set to 0.
Bit 6 and bit 2:0 are reserved bits. Bit 5 is set to 1 to indicate 66 MHz card on a 66 MHz bus. It is capable bit and gets the value from the board setting.
Bit 4 indicates a capabilities list and is set to 1 to do this and finally bit 3 is an interrupt status and is set to 1 if INTX is enabled or MIS cycle has been completed.
All of bits 15 down to 0 are read only bits.
Referring back to the configuration register information, the class code is set to FF0000h and the revision ID for the board 100 indicates the revision of various PCI test boards created.
At this stage the cache line size is not implemented, the latency timer register specifies the value of the latency timer in units of bus clocks. The header type register identifies the layout of bytes 010h to 3Fh in the PCI configuration header.
The memory base address register is used to assign the memory base address for the board 100. The address space assigned is a variable number of DWORDs. This base is compared when doing memory commands and if the base address matches then the board 100 will accept the memory transfer. The interrupt pin register tells whether or not the function uses the interrupt pin and is an 8 bit field. It is a dummy register defaulted to the value FF.
PCI Master/Slave Register (A4h)
Control Register (A8h)
The following table identifies the 32-bits in the bit field for this register.
Lower Base Data Pattern/Lower Random Seed/Lower Toggle Pattern A
This is located at B0h. All 32-bits are read/write and are defined as base data pattern/random seed/toggle A. This register is modified by the Select Data pattern bit in the A8h register. If the data pattern bit is 0, this register represents the base pattern that will be used from the internal incremental pattern generator. If it has a value of 1 this register becomes the seed for the Random Pattern generator. If the data pattern select has a value of 2, the register will become the first register for the toggling pattern generation. For toggle mode in a 32-bit Master, the Toggle Pattern A and the Toggle Pattern B need to be the same 64-bit value. Bit field (31:0) will come up as the first dword and bit field (63:32) will be the second dword. For the toggle mode in a 64-bit Master, the bit field (31:0) of the Pattern A is the first dword. The bit field (63:32) of Pattern A is the second dword, bit field (31:0) of Pattern B is the third dword and the bit field (63:32) of Pattern B is the fourth dword.
Upper Base Data Pattern/Upper Random Seed/Upper Toggle Pattern A (B4h)
This is a 32-bit field read/write capability and is by definition base data pattern/random seed/toggle A (63:32). The Select Data pattern bit in the A8h register is the modifier for this register. If the data pattern is 0 then the register represents the base pattern that will be used for the internal incremental pattern generator. If the data pattern is 1, this register will become the seed for the Random Pattern Generator. If the data pattern select has a value of 2, the register will become the first register for the toggling pattern generation. For toggle pattern, please refer to the earlier description in relation to the lower base data pattern/lower random seed/lower toggle pattern A register.
Lower Increment Pattern/Lower Toggle Pattern B (B8h)
This is also a 32-bit read/write field defined as Increment Pattern/toggle B (31:0). The Select Data pattern bits in the A8h register is the modifier for this register. If the data pattern has a value of 0 then this register will become the delta value for the incremental pattern generator. If the data pattern select has a value of 2 then the register will become the first register for the toggling pattern generation. For the toggle pattern please see the earlier description in relation to the register B0h.
Upper Increment Pattern/Upper Toggle B (BCh)
This is a 32-bit read/write field defined as Increment Pattern/Toggle B (63:32). The Select Data pattern bits in the A8h register is the modifier for this register. If the data pattern is equal to 0 then this register will be the upper delta value for the incremental pattern generator. If the data pattern select has a value of 2, the register will become the first register for the toggling pattern generation. For the toggle pattern please refer to the earlier description in relation to the register location B0h.
Error Target Address Register Low (C0h)
This is a 32-bit read only field defined as a Target Address Register (31:0). While the board 100 is doing a read transaction this register is used for error recording. This register stores the offending address AD(31:0) at the first occurrence of data inconsistency. It is reset by clearing the Data Error bit in the A8h register.
Error Target Address Register High (C4h)
Again this is a 32-bit read only field defined as Target Address Register (63:32). While the board 100 is doing a read transaction this is used for error recording. This register stores the offending address AD(63:32) at the first occurrence of data inconsistency. It is reset by clearing the Data Error bit in A8h register.
Error Target Data Register Low (C8h)
This is a 32-bit read only field defined as Target Data (31:0). Again while the board 100 is performing a read transaction this is used for error recording whereby the register stores the data AD(31:0) of the bus transaction at the first occurrence of data inconsistency. It is reset by clearing the Data Error bit A8h register.
Error Target Data Register High (CCh)
As with the previous register it is a 32-bit read only field defined as Target Data (63:32). Again it is for error recording and it stores the data AD (63:32) of the bus transaction at the first occurrence of data inconsistency. Again, it is reset as before.
Error Data Error Count (D0h)
This is a 30-bit read only field and by definition is Data Error Count (29:0). This counter measures the total number of inconsistent Dwords during the read transactions. It is reset by clearing the data error bit in A8h register.
Target Reference Data Low (D8h)
This is a 32-bit read only field and by definition is Target Reference Data (31:0). This register holds the expected value of the data phase when the first data phase error occurs.
Target Reference Data High (DCh)
This is also a 32-bit read only field and by definition is Target Reference Data (63:32). This register holds the expected value of the data phase when the first data phase error occurs.
Private Message Data (E4h)
This is a 32-bit read/write field defined as Private Message Data (63:32). This register holds the data for the MSI interrupt.
When the peripheral device detects a data error in the process of verifying the data dynamically as it reads the data, it generates a hardware trigger rather than waiting for the system to verify data later. The hardware can also store only the data errors instead of all the data in its internal buffers. Software using this device can then subsequently read these internal buffers to record any errors that the device has detected. The trigger which indicates the inconsistent data between the data generator and the incoming data is flagged using TRIGOUT which is on pin 5 of an E1 connector.
Other indicators provided by the system include CONFDONE which designates that the configuration of the FPGA is successful. There is the MASTER indicator which indicates that the board 100 is running as in initiator. There is the EM_SLAVE indicator which indicates that the board 100 is running as a target. The indicator POWER ACTIVE indicates that the power is on.
In order to support the 64-bit, 66 MHz data transfer capability, the PCI bus 120 implements 40 additional pins. One pin is directed to REQ64_ which is asserted by a 64-bit bus master to indicate that it would like to perform 64-bit data transfers. REQ64_ has the same timing and duration as the FRAME_signal. Another bit is designated ACK64_ which is asserted by a target in response to REQ64_ assertion by the Master, if the target supports the 64-bit data transfers. ACK64_ has the same timing and duration as DEVSEL_, but ACK64_ must not be asserted unless REQ64_ is asserted by the initiator.
32 bits are taken up by AD (63:32) which comprises the upper 4 address/data paths. A further four bits is taken by CBE (7:4) which comprises the upper four command/byte enable signals. A further bit is the parity bit PAR64 that provides even parity for the upper four AD paths and the upper four CBE signal lines. The last of the 40 bits goes to M66EN which is provided as an input to the PCI clock circuit on the system board. If M66EN is sampled as asserted by the clock circuit then it provides a 66 MHz PCI clock.
In order to determine the type of slot, the board 100 installed in 64 bit expansion slot samples REQ64_ asserted on the trailing edge of RST_. This informs that it is connected to the extension pull-ups on the system board and need take no special action to keep the extension from floating when not in use. When the board 100 is installed in a 32 bit card slot, however, it detects REQ64_ deasserted on the trailing edge of RS_. This informs it that it is not connected to the system board—resident pull-ups on the extension signals.
The 66 MHz PCI component or add-in card indicates its support of 66 MHz in two fashions, that is programmatically and electrically. The 66 MHz-CAPABLE bit has been added to the status register.
When the PCI initiator state machine of the data generator engine 118 is used, this occurs after programming the configuration registers. The enable of START bit in the A8h configuration register indicates the start of a PCI cycle. Before starting the test the software programs instructions in the instruction queue. The initiator then the reads the status of the START bit in configuration register A8h and if asserted, the initiator state machine will proceed with issuing a REQ_ or a REQ64_ (assuming the bus is idle) along with the FRAME_ depending on the type of transaction desired. Once the GNT_ and the ACK_/ACK64_ signals are obtained, the initiator reads and executes the instruction from the instruction queue one at a time. At the end of the transaction the card can issue interrupt or MSI to indicate the end of the test.
The data generator will generate data for the write transaction in a purely sequential manner. During the read transaction, the data generator provides reference data to compare to the incoming data. If a mismatch occurs, both the address and the data of the first occurrence of error will be logged and stored in local registers. The internal data generator and the data-pipe can provide O-wait state during burst assuming the target does not introduce a wait state. If wait-state is asserted at the current data phase by the target, the initiator will need to insert a wait-state right after the current data-phase is consumed. This action resynchronizes the internal data-pipe. The data generator can also be set to perform automatic copy-down functions when the 64-bit Master is transferring to a 32-bit target.
The PCI target state machine is activated on an address decode hit. The state machine will claim the transaction by asserting DEVSEL_. The target state machine is programmed to generate slow DEVSEL_. The address is loaded into the local memory address pointer DADDR(18:0) register during a slave cycle. The target state machine can be programmed to provide normal, retry, abort and disconnect functions. Regarding the software used by the system, which is stored in the command memory 116, the software caters for among other things power on self test (POST) requirements, initialisation requirements, and particular programming considerations. For the initialisation requirements, the PCI configuration header memory and base addresses will be initialised with default values from memory during power up. BIOS will change these particular registers to meet system needs and if more than one board 100 is used, it will need to modify the base addresses to unique address ranges. In order to prevent any adverse affects the memory should be initialised once after power up.
When programming the Master for 64-bit cycles, the card will need to be plugged in a 64-bit slot and bit 14 of the A4h control register should be set to 1 which indicates a 64-bit slot and thus permitting 64-bit cycles. When MSI instruction is used, the Single Data Phase bit needs to be disabled and the length/iteration needs to be set to 1.
The PCI data generator engine 118, via software, undertakes tests in the following manner. It exercises the PCI initiator reads and writes of the host memory, PCI memory and IO, E/ISA memory and IO sub-systems. As an initiator the data generator may initiate bursts or non-burst cycles. The thread requires at least one test board 100 however additional cards allow for greater utilisation of the system PCI bus 120. The sequence is as follows with reference to
Various test options are available to the data generator. This includes PCI initiator tests whereby it undertakes the PCI initiator reads and writes of host memory, PCI memory and IO, E/ISA memory and IO sub-systems. Again as an initiator the board 100 may initiate burst or non-burst cycles.
There is also PCI initiator commands such as dual address cycle, memory write and invalidate (MWI) and IRDY delay from FRAME. The dual address cycle forces cycles to addresses below 4 GB to be Dual Address Cycle to test the chipset support for DAC for systems that support more than 4 GB of memory without requiring the particular system to be equipped with more than 4 GB of memory. This provides some amount of test coverage but adequate verification requires systems to be fully equipped with memory.
The MWI command guarantees full cache line writes and allows a processor to invalidate the modified cache line without writing it back to host memory, since the peripheral device would overwrite the full cache line. The card or board 100 uses the cache line size register to ensure the transfers end on cache line boundaries even if the MLT has expired and the GNT is lost. This is while the boards test thread uses that value to force transfers to start on cache line boundaries and request burst lengths that are cache line multiples. The NT Meatgrinder 3.70 PCIDG driver reads the cache line size register from PCI configuration space so that if BIOS fails to set it correctly one must manually set the register before running Meatgrinder and preferably before the driver is even loaded. The NT Meatgrinder hardware configuration menu displays the cache line register value that Meatgrinder sees.
The IRDY delay from FRAME menus allow the data generator as an initiator to delay the assertion of IRDY from FRAME. The PCI 2.1 requires the assertion of FRAME within 8 clocks from IRDY. Some PCI targets function properly only when IRDY is asserted within that constraint.
The data generator or PCIDG can burst up to two GB, however typical bursts will be limited to one or more pages (4 KB on x86 and 8 KB on IA64) due to physical memory fragmentation.
The data generator can either abide by its Master Latency Timer (MLT) and surrender the PCI bus on the timer expiration during a burst if GNT has been removed. However the data generator can ignore its latency timer and impose long transfers, possibly at the expense of devices that have real-time latency requirements.
Another option is to generate and specify the number of SERR, PERR, address and data parity as part of the initiator error generation. With regard to PCI Target Responses, this allows the user to specify the assertion of STOP for the response type. This is regardless of whether a data generator card generates ACK64, the TRDY delay from FRAME and the retry counter for a data generator. PCI 2.1 requires a maximum target latency of 8 clocks after the initial data phase as mentioned previously.
There is an option to choose a transfer size available from sequential, random or fixed size transfers. There is also an option to align memory transfers on any Dword or quardword within a cache line.
The particular test cycle that the initiator uses is as follows:
PCIDG initiator: (Card card number, [DAC] command [Non-Burst|Burst] clockcount IRDY, [Fixed REQ|Toggling REQ], byte count Align, width-bit transfer size Bytes [Ignore MLT]->Target.
A special note for Windows 2000/XP users is that a large memory is required to test memory above 4 GB. For Windows 200/XP this may be Advanced Server up to 8 GB and Datacenter up to 64 GB. The data generator is not able to cross a 64 GB boundary with one instruction.
When the board is configured to respond as a Master or initiator device the particular initiator feature highlights include:
The initiator uses data pattern generators for both read/write data transactions. Three different generators may be used, random, incremental or toggle. There is support for very long burst transfer up to 4 GB. There is adjustable IRDY_wait states for each data phase during the transaction. The user can select to turn-on the automatic copy-down feature (64-bit initiator to 32-bit target mechanism). All byte enable combinations during the data transaction includes starting pattern, ending pattern and the main body pattern. All command combinations are supported. The initiator can assert PERR_at a specified data phase from the read transaction. The initiator can generate a PAR or PAR64 errors at specified data phase for the write transaction. The initiator can generate PAR or PAR64 error at the address phase. Data error detection logs the offending address, the faulty data and the expected data at the first occurrence of the error. A user can select different REQ_ termination schemes.
When the board 100 is configured to respond as a slave or target device the particular target features include:
The target contains 4 MB of memory space and 256 KB of I/O space. The target can be configured as either a 32 or 64-bit device. There are adjustable TRDY_wait states for each data phase in the transaction. There are adjustable DEVSEL_responses (medium). The target can be configured to respond in retry, abort or disconnect. The target can also assert PERR_or SERR_when the card is addressed as the target. It can assert PERR_or SERR_immediately through the configuration write. The target can generate PAR or PAR64 error at a specified data phase during the read cycle. The user can inject data error through the Test_in button.
It will be appreciated by persons skilled in the art that numerous variations and/or modifications may be made to the invention as shown in the specific embodiments without departing from the spirit or scope of the invention as broadly described. The present embodiments are, therefore, to be considered in all respects as illustrative and not restrictive.