# Bnx Core Abstraction Layer
**C**ore **A**bstraction library abstracts a core.
It provides interfaces to HAL layer above such that
HAL layer above is void of any core and system specific information and core and
system agnostic. However RISC-V standard specific core details that are common acrosss all RISC-V cores are part of **C**ommon **C**ore **A**bstraction **L**ayer.
System Abstraction Layer abstracts a system and Core Abstraction Layer abstracts a core.
# Example
**E31** - a core and its abstracted in Core Abstraction Layer.
**FE310** - a system with E31 core and peripherals is abstracted in System Abstraction Layer.
SAL dont cover that are abstracted in CAL instead might use them.
In software architecture, CAL & SAL are beside each other as below.
```
---------------- Hardware Abstraction Layer --------------------------
----------------------------------------------------------------------
| System Abstraction Layer | Core Abstraction Layer
----------------------------------------------------------------------
```
CAL abstracts:
> **C**ore Clock
> **C**ore Boot
whereas SAL abstracts:
> **G**pio
> **U**art
> **S**pi
> **I**2c