URL
https://opencores.org/ocsvn/openrisc/openrisc/trunk
Subversion Repositories openrisc
[/] [openrisc/] [trunk/] [orpsocv2/] [rtl/] [verilog/] [arbiter/] [README] - Rev 863
Go to most recent revision | Compare with Previous | Blame | View Log
Wishbone arbiter RTL sourceThe current implementation of these arbiters for the design is a hard-codedslightly configurable set up, rather than a configurable one-size-fits-allapproach. It is assumed a Harvard architecture is in use, and therefore thereare seperate busses for both instruction and data busses of the processor. Thedata bus arbiter also has a peripheral, or byte (wide) bus, attached to it.The busses have ports following the Wishbone B3 standard. They are a cross-barswitch setup, ie only one master can be controlling the bus at a time. A simplepriority-based arbitration system is used, however this only really matters forthe data bus, which has multiple masters.The addresses for each slave are configured through parameters. It is expectedthe instantiation of the arbiter will define these parameters also.The arbiters have the option of passing the signals through with or without anysequential logic (registering) however they _DO NOT_ yet support registeredbursting (ie, where wb_cti indicates anything other than a Wishbone classiccycle.) Do not enable registering, via the defines, and expect bursting to work!There is an optional watchdog counter which will assert wb_err if a request isnot serviced within the counting period of the clock. The width of the timeris defined.The arbiters depend on the design's top level define file. The options forregistering and the watchdog timer should be set there.arbiter_ibus.v:This has only one master input and two slaves - a ROM and a main memory.This is the simplest of the arbiters. It has 32-bit wide data ports.arbiter_dbus.v:This has two masters ports and several slave ports. It has 32-bit widedata ports. It has a default slave it selects if none of the otherslaves are selected, allowing daisy-chaining of another arbiter onto it(used for the peripheral byte-bus.)Increasing or reducing the slaves here requires:1. Altering the module() declaration, adding the required ports.2. Altering the input/output declaration, adding the required ports.3. Add/remove(comment-out) the appropriate line in the section under thecommend "Slave selects". Ensure to alter the final slave, or"default" slave's select logic to include/exclude the slave beingadded/removed.4. Alter the inputs from the master going to the slave5. Alter the inputs from the slave (wb_ack, wb_dat_i, etc.) going to themaster6. When instantiating, be sure that the address for the new slave isdefined.7. Be sure to update the appropriate parameters in design-params.v withthe correct total number of slaves, and the address of the new slave.For most of this slave configuration change, it should be as easy asfollowing the example of the structure already in the file, andpotentially just moving the open block-comment marker "/*" past thelines for the new slave.arbiter_bytebus.v:This is a single-master arbiter, connecting to multiple slaves. It hassingle byte-wide data ports. The data port back to the master maps readbytes to the correct position in a 32-bit wide word, consistent with abig-endian representation of data. There is no default slave. Theprocedure for adding new slaves is the same as for the main data-busarbiter, except for the default slave selection considerations.
Go to most recent revision | Compare with Previous | Blame | View Log
