1 |
11 |
rafaelcalc |
# I/O signals
|
2 |
|
|
|
3 |
|
|
Steel has 4 communication interfaces, shown in the figure below:
|
4 |
|
|
|
5 |
|
|
![Steel IO](images/steel-interface.png)
|
6 |
|
|
|
7 |
|
|
The core was designed to be connected to a memory with one clock cycle read/write latency, which means that the memory should take one clock cycle to complete both read and write operations.
|
8 |
|
|
|
9 |
|
|
The interrupt request interface has signals to request for external, timer and software interrupts, respectively. They can be connected to a single device or to an interrupt controller managing interrupt requests from several devices. If your system does not need interrupts you should hardwire these signals to zero.
|
10 |
|
|
|
11 |
|
|
The real-time counter interface provides a 64-bit bus to read the value from a real-time counter and update the time register. If your system does not need hardware timers, you should hardwire this signal to zero.
|
12 |
|
|
|
13 |
|
|
To learn about the core's communication with the devices mentioned above, read the section [Timing diagrams](timing.md).
|
14 |
|
|
|
15 |
|
|
## Interrupt controller interface
|
16 |
|
|
|
17 |
|
|
The interrupt controller interface has three signals used to request external, timer and software interrupts, shown in the table below. The interrupt request process is explained in the sections [Exceptions and interrupts](traps.md) and [Timing diagrams](timing.md#interrupt-request).
|
18 |
|
|
|
19 |
|
|
| **Signal** | **Width** | **Direction** | **Description** |
|
20 |
|
|
| :----------------- | :--------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
21 |
|
|
| *E_IRQ* | 1 bit | Input | When set high indicates an external interrupt request. |
|
22 |
|
|
| *T_IRQ* | 1 bit | Input | When set high indicates a timer interrupt request. |
|
23 |
|
|
| *S_IRQ* | 1 bit | Input | When set high indicates a software interrupt request. |
|
24 |
|
|
|
25 |
|
|
## Instruction fetch interface
|
26 |
|
|
|
27 |
|
|
The instruction fetch interface has two signals used in the instruction fetch process, shown in the table below. The process of fetching instructions is explained in the section [Timing diagrams](timing.md#instruction-fetch).
|
28 |
|
|
|
29 |
|
|
| **Signal** | **Width** | **Direction** | **Description** |
|
30 |
|
|
| :---------------- | :--------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
31 |
|
|
| *INSTR* | 32 bits | Input | Contains the instruction fetched from memory. |
|
32 |
|
|
| *I_ADDR* | 32 bits | Output | Contains the address of the instruction the core wants to fetch from memory. |
|
33 |
|
|
|
34 |
|
|
## Data read/write interface
|
35 |
|
|
|
36 |
|
|
The data read/write interface has five signals used in the process of reading/writing data from/to memory. The signals are shown in the table below. The processes of fetching and writing data to memory are explained in the section [Timing diagrams](timing.md#data-writing).
|
37 |
|
|
|
38 |
|
|
| **Signal** | **Width** | **Direction** | **Description** |
|
39 |
|
|
| :---------------- | :--------- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
40 |
|
|
| *DATA_IN* | 32 bits | Input | Contains the data fetched from memory. |
|
41 |
|
|
| *D_ADDR* | 32 bits | Output | In a write operation, contains the address of the memory position where the data will be stored. In a read operation, contains the address of the memory position where the data to be fetched is. The address is always aligned on a four byte boundary (the last two bits are always zero). |
|
42 |
|
|
| *DATA_OUT* | 32 bits | Output | Contains the data to be stored in memory. Used only with write operations. |
|
43 |
|
|
| *WR_REQ* | 1 bit | Output | When high, indicates a request to write data. Used only with write operations. |
|
44 |
|
|
| *WR_MASK* | 4 bits | Output | Contains a mask of four *byte-write enable* bits. A bit high indicates that the corresponding byte must be written. Used only with write operations. |
|
45 |
|
|
|
46 |
|
|
## Real-time counter interface
|
47 |
|
|
|
48 |
|
|
The real time counter interface has just one signal used to update the **time** CSR, shown in the table below. The process of updating the **time** register is explained in the section [Timing diagrams](timing.md#time-csr-update).
|
49 |
|
|
|
50 |
|
|
| **Signal** | **Width** | **Direction** | **Description** |
|
51 |
|
|
| :---------- | :--------- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
52 |
|
|
| *REAL_TIME* | 64 bits | Input | Contains the current value read from a real time counter. |
|
53 |
|
|
|
54 |
|
|
## CLK and RESET signals
|
55 |
|
|
|
56 |
|
|
The core has **CLK** and **RESET** input signals, which were not shown in the figure presented above. The **CLK** signal must be connected to a clock source. The **RESET** signal is active high and resets the core synchronously.
|