Intel® Stratix® 10 Hard Processor System Technical Reference Manual

ID 683222
Date 11/28/2022
Public

A newer version of this document is available. Customers should click here to go to the newest version.

Document Table of Contents

4.7.4. Accessing and Testing the Coherency Directory RAM

You can test the RAM bits in the coherency directory or read coherency directory RAM data on an error condition through registers in the CCC.
By programming the CCC Directory RAM Indirect Access Control Register (agent_ccc0_ccc_indirect_access_trig), you can trigger reads or writes of the coherency directory RAM. The following fields in the CCC Directory RAM Indirect Access Control Register (agent_ccc0_ccc_indirect_access_trig) must be set correctly:
  • CMD: Indicates which kind of indirect access to perform.
  • WAY: Must always be clear because there is only one bank of RAM in the coherency directory.
  • INDEX: Specifies the entry to access within the RAM.

The RAM width is 133 bits with an ECC width of 8 bits. These ECC bits are concatenated on the most significant bits of the CCC Indirect RAM Content (agent_ccc0_ccc_indirect_ram_cont_*) registers as {agent_ccc0_ccc_indirect_ram_cont_2[4:0] and agent_ccc0_indirect_ram_cont_1[127:125]}.

Indirect access supports four operations.

  • Read Raw data: Use this command when you want to read coherency directory RAM data without ECC correction.
    1. In the agent_ccc0_ccc_indirect_access_trig register, clear the cmd bits and specify the RAM index value you want to read in the index field.
    2. Read the returned data from the CCC Indirect RAM Content (agent_ccc0_indirect_ram_cont_*) registers.
  • Write Raw Data: You can use this command to write data to the coherency directory. You can include an ECC value in this data. This command assumes the ECC logic is disabled. ECC logic can be enabled and disabled in the CCC ECC Disable (agent_ccc0_ccc_ecc_disable) register.
    1. Program the agent_ccc0_ccc_indirect_ram_cont_* registers with the data you want to write to the coherency directory. You can include ECC bits in this value.
    2. In the agent_ccc0_ccc_indirect_access_trig register, set the cmd bits to 0x1 and specify the RAM index value you want to write in the index field. When triggered the content register value is written into the directory RAM.
  • Write Data with generated ECC to coherency directory RAM: You can use this command to write data without calculating the ECC bits. This command assumes the ECC logic is enabled.
    1. Write data to the agent_ccc0_ccc_indirect_ram_cont_* registers.
    2. In the agent_ccc0_ccc_indirect_access_trig register, set the cmd bits to 0x2 and specify the RAM index value you want to write in the index field. When triggered the content register value is written into the directory RAM with a corresponding ECC value.
  • Read-Modify-Write: This command performs a specific kind of read-modify-write operation on a directory entry. The CCC reads the content of the directory, XORs that content with the data in the agent_ccc0_indirect_ram_cont_* register, and writes the combined value into the same directory entry. This command can be used to introduce single or double bit errors into the directory to test error detection and handling. The agent_ccc0_indirect_ram_cont_* registers are not modified during this operation, so they can be used to introduce errors into multiple lines.
    1. Write data to the agent_ccc0_ccc_indirect_ram_cont_* registers.
    2. In the agent_ccc0_ccc_indirect_access_trig register, set the cmd bits to 0x3 and specify the RAM index value you want to read in the index field.

You can issue indirect access commands during normal operation, but the write commands can have side-effects that break coherency functionality. The read raw command is not disruptive, and the read-modify-write can be performed atomically so single-bit errors can be introduced while maintaining functionality.