OpenCores
URL https://opencores.org/ocsvn/neorv32/neorv32/trunk

Subversion Repositories neorv32

[/] [neorv32/] [trunk/] [docs/] [datasheet/] [soc_cfs.adoc] - Diff between revs 60 and 64

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 60 Rev 64
Line 22... Line 22...
The custom functions subsystem can be used to implement application-specific user-defined co-processors
The custom functions subsystem can be used to implement application-specific user-defined co-processors
(like encryption or arithmetic accelerators) or peripheral/communication interfaces. In contrast to connecting
(like encryption or arithmetic accelerators) or peripheral/communication interfaces. In contrast to connecting
custom hardware accelerators via the external memory interface, the CFS provide a convenient and low-latency
custom hardware accelerators via the external memory interface, the CFS provide a convenient and low-latency
extension and customization option.
extension and customization option.
 
 
The CFS provides up to 32x 32-bit memory-mapped registers (see register map table below). The actual
The CFS provides up to 32x 32-bit memory-mapped registers `REG` (see register map table below). The actual
functionality of these register has to be defined by the hardware designer.
functionality of these register has to be defined by the hardware designer.
 
 
[INFO]
[INFO]
Take a look at the template CFS VHDL source file (`rtl/core/neorv32_cfs.vhd`). The file is highly
Take a look at the template CFS VHDL source file (`rtl/core/neorv32_cfs.vhd`). The file is highly
commented to illustrate all aspects that are relevant for implementing custom CFS-based co-processor designs.
commented to illustrate all aspects that are relevant for implementing custom CFS-based co-processor designs.
Line 37... Line 37...
register map table below). Note that all interface registers provide 32-bit access data of type `uint32_t`.
register map table below). Note that all interface registers provide 32-bit access data of type `uint32_t`.
 
 
[source,c]
[source,c]
----
----
// C-code CFS usage example
// C-code CFS usage example
CFS_REG_0 = (uint32_t)some_data_array(i); // write to CFS register 0
NEORV32_CFS.REG[0] = (uint32_t)some_data_array(i); // write to CFS register 0
uint32_t temp = CFS_REG_20; // read from CFS register 20
uint32_t temp = NEORV32_CFS.REG[20]; // read from CFS register 20
----
----
 
 
**CFS Interrupt**
**CFS Interrupt**
 
 
The CFS provides a single one-shot interrupt request signal mapped to the CPU's fast interrupt channel 1.
The CFS provides a single one-shot interrupt request signal mapped to the CPU's fast interrupt channel 1.
Line 61... Line 61...
by the hardware designer. The size of the input signal conduit `cfs_in_i` is defined via the (top's) _IO_CFS_IN_SIZE_ configuration
by the hardware designer. The size of the input signal conduit `cfs_in_i` is defined via the (top's) _IO_CFS_IN_SIZE_ configuration
generic (default = 32-bit). The size of the output signal conduit `cfs_out_o` is defined via the (top's)
generic (default = 32-bit). The size of the output signal conduit `cfs_out_o` is defined via the (top's)
_IO_CFS_OUT_SIZE_ configuration generic (default = 32-bit). If the custom function subsystem is not implemented
_IO_CFS_OUT_SIZE_ configuration generic (default = 32-bit). If the custom function subsystem is not implemented
(_IO_CFS_EN_ = false) the `cfs_out_o` signal is tied to all-zero.
(_IO_CFS_EN_ = false) the `cfs_out_o` signal is tied to all-zero.
 
 
.CFS register map
.CFS register map (`struct NEORV32_CFS`)
[cols="^4,<5,^2,^3,<14"]
[cols="^4,<5,^2,^3,<14"]
[options="header",grid="all"]
[options="header",grid="all"]
|=======================
|=======================
| Address | Name [C] | Bit(s) | R/W | Function
| Address | Name [C] | Bit(s) | R/W | Function
| `0xfffffe00` | _CFS_REG_0_  |`31:0` | (r)/(w) | custom CFS interface register 0
| `0xfffffe00` | `NEORV32_CFS.REG[0]`  |`31:0` | (r)/(w) | custom CFS interface register 0
| `0xfffffe04` | _CFS_REG_1_  |`31:0` | (r)/(w) | custom CFS interface register 1
| `0xfffffe04` | `NEORV32_CFS.REG[1]`  |`31:0` | (r)/(w) | custom CFS interface register 1
| ...          | ...          |`31:0` | (r)/(w) | ...
| ...          | ...          |`31:0` | (r)/(w) | ...
| `0xfffffe78` | _CFS_REG_30_ |`31:0` | (r)/(w) | custom CFS interface register 30
| `0xfffffe78` | `NEORV32_CFS.REG[30]` |`31:0` | (r)/(w) | custom CFS interface register 30
| `0xfffffe7c` | _CFS_REG_31_ |`31:0` | (r)/(w) | custom CFS interface register 31
| `0xfffffe7c` | `NEORV32_CFS.REG[31]` |`31:0` | (r)/(w) | custom CFS interface register 31
|=======================
|=======================

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.