-
Notifications
You must be signed in to change notification settings - Fork 140
SimplifyingModuleInterfaces
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?
Check this link for the latest design document: [1]
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.
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 |
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 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
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.
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.
See Task list