Skip to content

SimplifyingModuleInterfaces

Adam edited this page Feb 26, 2013 · 1 revision

Table of Contents

Simplifying Module interfaces

Simplifying interfaces

To encourage wider use, and make it easy for researchers and students to learn how to use the board, we need to implement a simple structure for the reference designs. One such structure is a pipeline with a FIFO pull interface. The design is described in the images below. Would it be possible to implement a FIFO interfaces on ALL modules we implement?

Packet Datapath

Check this link for the latest design document: [1]

Register Datapath

A central arbiter coordinates access to registers within individual modules

Modules that provide register access should be connected to a central arbiter, as shown in the accompanying diagram. All register accesses will be processed by the arbiter. The arbiter will decode the address to determine which module is being accessed. The arbiter will forward the access to the appropriate module and return any read data to the requester.

Module/arbiter interface

The interface between the modules and the arbiter is a simple request/reply interface. The signals are as follows:

Signal Direction Description
reg_req Arb -> Mod Register read/write action requested
reg_rd_wr_L Arb -> Mod Read (high) or Write (low)
reg_addr?:0 Arb -> Mod Register address.
Note: High order address bits are stripped off.
reg_wr_data[31:0] Arb -> Mod Write data
reg_rd_data[31:0] Mod -> Arb Read data
reg_ack Mod -> Arb Acknowledgement

Register read

The arbiter initiates a read on the rising edge of the clock by:

  • asserting reg_req
  • asserting reg_rd_wr_L
  • supplying the read address on reg_addr
The module should return the value of the register being read on reg_rd_data and assert reg_ack . The result can be returned during any cycle after the request is made, including returning the result immediately during the request cycle. The result and ack are read by the arbiter on rising clock edges.

Register write

The arbiter initiates a write on the rising edge of the clock by:

  • asserting reg_req
  • deasserting reg_rd_wr_L
  • supplying the write address on reg_addr
  • supplying the write data on reg_wr_data
The module should assert reg_ack once it has registered the write request. The module is free to delay the write until after it has acknowledged the request.

If a module does delay writes it must buffer the address and data internally as the arbiter may issue a new request any cycle after an ack.

Connecting modules to the arbiter

The central arbiter must be modified whenever a new module is added. Dedicated register access ports must be added to the arbiter for each module.

Note: It would be desirable to create a system to auto-generate the arbiter to avoid having to modify it by hand whenever a module is added.

Tasks

See Task list

Clone this wiki locally