wiki:Component/VciBlockDevice

Version 9 (modified by alain, 14 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. It can be seen as one single file, that has a storage capacity 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_BUFFER (read/write)

Physical address of the source (or destination) buffer in SoC memory.

  • BLOCK_DEVICE_COUNT (read/write)

Number of blocks to be transfered.

  • BLOCK_DEVICE_LBA (read/write)

Logical Base Address (index of the first block in the block device)

  • BLOCK_DEVICE_OP (write only)

Type of operation, writing here initiates the operation.This register goes back to BLOCK_DEVICE_NOOP when operation is finished.

  • BLOCK_DEVICE_STATUS (read only)

State of the transfer. Reading this register while not busy resets its value to IDLE, and acknowledge the IRQ. Value may be one of :

  • BLOCK_DEVICE_IDLE
  • BLOCK_DEVICE_BUSY
  • BLOCK_DEVICE_READ_SUCCESS
  • BLOCK_DEVICE_WRITE_SUCCESS
  • BLOCK_DEVICE_READ_ERROR
  • BLOCK_DEVICE_WRITE_ERROR
  • BLOCK_DEVICE_ERROR
  • BLOCK_DEVICE_IRQ_ENABLE (read/write)

Boolean enabling the IRQ line

  • BLOCK_DEVICE_SIZE (read only)

Number of blocks addressable in the block device

  • BLOCK_DEVICE_BLOCK_SIZE (read only)

Block size (in bytes)

The following operations codes are defined:

  • BLOCK_DEVICE_NOOP Nothing
  • BLOCK_DEVICE_READ from flock device to memory
  • BLOCK_DEVICE_WRITE from memory to block device

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

See SoclibCc/VciParameters

Uses( 'vci_block_device', **vci_parameters )

3) CABA Implementation

CABA sources

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-DT Implementation

The TLM-DT implementation is not yet available.