|
11 | 11 | | Top entity ports: | none |
|
12 | 12 | | Configuration generics: | `IO_TRNG_EN` | implement TRNG when `true`
|
13 | 13 | | | `IO_TRNG_FIFO` | data FIFO depth, min 1, has to be a power of two
|
14 |
| -| CPU interrupts: | - | none |
| 14 | +| CPU interrupts: | fast IRQ channel 0 | TRNG data available interrupt (see <<_processor_interrupts>>) |
15 | 15 | |=======================
|
16 | 16 |
|
17 | 17 |
|
@@ -53,18 +53,28 @@ of random data in a short time. The random data FIFO can be cleared at any time
|
53 | 53 | setting the `TRNG_CTRL_FIFO_CLR` flag. The FIFO depth can be retrieved by software via the `TRNG_CTRL_FIFO_*` bits.
|
54 | 54 |
|
55 | 55 |
|
| 56 | +**TRNG Interrupt** |
| 57 | + |
| 58 | +As the neoTRNG is a rather slow entropy source, a "data available" interrupt is provided to inform the application |
| 59 | +software that new random data is available. This interrupt can be trigger by either of two conditions: trigger the |
| 60 | +interrupt if _any_ random data is available (i.e. the data FIFO is not empty; `TRNG_CTRL_IRQ_SEL = 0`) or trigger |
| 61 | +the interrupt if the random pool is full (i.e. the data FIFO is full; `TRNG_CTRL_IRQ_SEL = 1`). |
| 62 | +Once the TRNG interrupt has fired it remains pending until the actual cause of the interrupt is resolved. |
| 63 | + |
| 64 | + |
56 | 65 | **Register Map**
|
57 | 66 |
|
58 | 67 | .TRNG register map (`struct NEORV32_TRNG`)
|
59 | 68 | [cols="<2,<1,<4,^1,<7"]
|
60 | 69 | [options="header",grid="all"]
|
61 | 70 | |=======================
|
62 | 71 | | Address | Name [C] | Bit(s), Name [C] | R/W | Function
|
63 |
| -.8+<| `0xfffffa00` .8+<| `CTRL` <|`7:0` `TRNG_CTRL_DATA_MSB : TRNG_CTRL_DATA_MSB` ^| r/- <| 8-bit random data |
| 72 | +.9+<| `0xfffffa00` .9+<| `CTRL` <|`7:0` `TRNG_CTRL_DATA_MSB : TRNG_CTRL_DATA_MSB` ^| r/- <| 8-bit random data |
64 | 73 | <|`15:8` - ^| r/- <| reserved, read as zero
|
65 | 74 | <|`19:16` `TRNG_CTRL_FIFO_MSB : TRNG_CTRL_FIFO_MSB` ^| r/- <| FIFO depth, log2(`IO_TRNG_FIFO`)
|
66 | 75 | <|`27:20` - ^| r/- <| reserved, read as zero
|
67 |
| - <|`28` `TRNG_CTRL_FIFO_CLR` ^| -/w <| flush random data FIFO when set; auto-clears |
| 76 | + <|`27` `TRNG_CTRL_IRQ_SEL` ^| r/w <| interrupt trigger select (0 = data available, 1 = FIFO full) |
| 77 | + <|`28` `TRNG_CTRL_FIFO_CLR` ^| -/w <| flush random data FIFO when set; flag auto-clears |
68 | 78 | <|`29` `TRNG_CTRL_SIM_MODE` ^| r/- <| simulation mode (PRNG!)
|
69 | 79 | <|`30` `TRNG_CTRL_EN` ^| r/w <| TRNG enable
|
70 | 80 | <|`31` `TRNG_CTRL_VALID` ^| r/- <| random data is valid when set
|
|
0 commit comments