QDR

Block: QDR (qdr)
Block Author: David George
Document Author: David George

Contents

Summary

This block interfaces to the QDR SRAM devices on ROACH boards. Commands are executed at the rate they are applied, with synchronous and fixed timing. Data is always presented 10 cycles after a read is issued. Read and write data ports have 100% duty cycles.

Mask Parameters

Parameter Variable Description
QDR Chip which_qdr Selects which physical QDR device to use (Two on ROACH V1).
Simulation QDR Address Width qdr_awidth Specifies the width of the address bus of the simulation model. (Limited to 18)
Use CPU Interface use_cpu Specify whether or not to include the QDR CPU interface, the removal of which may improve timing performance.

Ports

Port Dir Data Type Description
rd_en in boolean Asserting this signal issues a read command. See below for details on issuing commands.
wr_en in boolean Asserting this signal issues a write command. See below for details on issuing commands.
be in UFix_4 Selects bytes for writing (write byte enable). See below for behaviour relating to bursting and ECC bits.
address in UFix_32 Signal used as the QDR address. See below for behaviour relating to addressing.
wr_data out UFix_36 The data to written into the QDR. Bits 35:32 are ECC bits and are cleared when the processor writes to the corresponding byte. See below for behaviour relating to bursting and ECC bits.
data_valid out boolean An active high signal indicating that the read data is valid.
ack out boolean A signal indicating that the CPU interface is not accessing the memory.
phy_ready out boolean A signal indicating that the QDR PHY has completed calibration, which takes very roughly 100us.
cal_fail out boolean A signal indicating that the PHY calibration has failed.

Description

This document is a draft and requires verification.

Issuing Commands

There are two types of commands: reads and writes. They are issued by the rd_en and wr_en signals respectively. The QDR address is presented on the same cycle that the command is issues. One type of command cannot be issued in two consecutive cycles. When this happens, the second issue will be ignored. This is due to QDR supporting bursts to reduce data rates on the control signals. Further, if a read and write are issued at the same time the write will be ignored. However, if the previous command was a valid read, the current read will be ignored and the write will take preference.

Bursting

When issuing reads and writes, data is presented on the respective data ports for two cycles. When issuing a write command, the data_in and be ports must be set for both the issuing cycle and the following cycle. During a read response, data is issued on the same cycle that the data_valid is asserted and on the following cycle.

Addressing

The address presented when a command is issued addresses a full burst worth of memory i.e. 72 bits of data.

ECC Bits

In hardware the QDR word is composed of four 9 bit components which are masked by the byte_enable signal. Each of these component include 8 data bits and a single ECC bit. This clashes with the byte-enable on the processor, which mask only 8 bits. For this reason the ECC bit gets cleared when the CPU writes to a byte of QDR memory. With this yellow block, the QDR data_in and data_out ports have the ECC bits on lines 35:32. This allows the four processor bytes to cleanly map to bits 31:0 of the data_in and data_out ports. This leads to a side-effect in the byte-enable behaviour as follows: be[0] masks data_in bits [7:0] and [32], be[1] mask data_in bits[15:8] and [33] etcetera.