| Version 7 (modified by , 16 years ago) (diff) |
|---|
SocLib Components General Index
VciBlockDevice
1) Functional Description
This VCI component is both a target and an initiator.
- It is addressed as a target to be configured for a transfer.
- It is acting as an initiator to do the transfer
There is only one block device handled by this component, limited to 241 bytes. An IRQ is optionally asserted when transfer is finished.
This hardware component checks for segmentation violation, and can be used as a default target.
It contains the following memory-mapped registers:
BLOCK_DEVICE_BUFFERPhysical address of the buffer in SoC memory
BLOCK_DEVICE_COUNTCount of blocks to transfer
BLOCK_DEVICE_LBABase sector for transfer
BLOCK_DEVICE_OPType of operation, writing here initiates the operation.
This register goes back to BLOCK_DEVICE_NOOP when operation is finished. (write only)
BLOCK_DEVICE_STATUSState of the transfer. Reading this register while not busy resets its value to IDLE. Value may be one ofBLOCK_DEVICE_IDLEBLOCK_DEVICE_BUSYBLOCK_DEVICE_READ_SUCCESSBLOCK_DEVICE_WRITE_SUCCESSBLOCK_DEVICE_READ_ERRORBLOCK_DEVICE_WRITE_ERRORBLOCK_DEVICE_ERROR
BLOCK_DEVICE_IRQ_ENABLEBoolean enabling the IRQ line
BLOCK_DEVICE_SIZENumber of blocks addressable in the controller (read-only)
BLOCK_DEVICE_BLOCK_SIZEBlock size (in bytes) (read-only)
The following operations codes are defined:
BLOCK_DEVICE_NOOPNothing
BLOCK_DEVICE_READread()
BLOCK_DEVICE_WRITEwrite()
For extensibility issues, you should access this component using globally-defined offsets.
You should include file soclib/block_device.h from your software, it
defines BLOCK_DEVICE_COUNT, BLOCK_DEVICE_READ, ...
Sample code: Please see reference implementation in source:trunk/soclib/soclib/platform/topcells/caba-vgmn-block_device-mips32el
(add -I/path/to/soclib/include to your compilation command-line)
2) Component definition & usage
source:trunk/soclib/soclib/module/connectivity_component/vci_block_device/caba/metadata/vci_block_device.sd
Uses( 'vci_block_device', **vci_parameters )
3) CABA Implementation
CABA sources
- interface : source:trunk/soclib/soclib/module/connectivity_component/vci_block_device/caba/source/include/vci_block_device.h
- implementation : source:trunk/soclib/soclib/module/connectivity_component/vci_block_device/caba/source/src/vci_block_device.cpp
CABA Constructor parameters
VciBlockDevice(
sc_module_name name, // Component Name
const soclib::common::MappingTable &mt, // MappingTable
const soclib::common::IntTab &srcid, // Initiator index
const soclib::common::IntTab &tgtid, // Target index
const std::string &filename, // mapped file, may be a host block device
const uint32_t block_size = 512 ); // one-block size
CABA Ports
- sc_in<bool> p_resetn : Global system reset
- sc_in<bool> p_clk : Global system clock
- soclib::caba::VciTarget<vci_param> p_vci_target : The VCI target port
- soclib::caba::VciInitiator<vci_param> p_vci_initiator : The VCI initiator port
- sc_out<bool> p_irq : Interrupt port
4) TLM-T Implementation
The TLM-T implementation is not yet available.

