Multiplexer
All project design I/O is routed through the Project Multiplexer. It makes sure that only the selected design has its outputs routed to the I/O pins. The Multiplexer can be talked to by the management controller over its wishbone interface. This is how the active project selection is changed, as well as other properties of the Multiplexer configured.
I/O Routing and design selection
Every design has access to up to 33 bi-directional I/O lines, mapped to mprj_io[37:5]
. To accomplish this, the pad io_in, io_out and io_oeb are routed to the designs as follows:
All designs can directly read from
io_in[37:5]
Two sets of wires,
io_out[32:0]
andio_oeb[32:0]
, leave each design and are routed into the MultiplexerAs the name implies, the Multiplexer only passes one set of io outs and output enables to the chip pads
Additionally, mprj_io[0]
is used as a dedicated reset line for the current design. The reset is a separate input into each design, thus allowing the Multiplexer to hold all non-selected designs in reset.
Custom Settings Register
A 32-bit wide register named simply “custom_settings” is also accessible via wishbone. Its contents are readable by all designs on-die, and allow additional settings be set on the selected design without the need to use IO pins for this purpose.
On-die RAM
The multiplexer also contains 64 bytes of on-die RAM, accessible by the selected design. If design 0 is selected, the RAM contents can be accessed and modified by the management controller, allowing memory contents to be pre-programmed.
Wishbone address map
Address |
Designation |
Meaning |
---|---|---|
0x30800000 |
reg_mprj_proj_sel |
Project selection register |
0x30400000 |
reg_mprj_counter |
Timer for debugging |
0x30200000 |
reg_mprj_settings |
Custom Settings Register |
0x30100000 |
reg_mprj_sram |
64-byte RAM start |
0x301000FC |
reg_mprj_sram + 252 |
64-byte RAM end |
Note: for implementation convenience, the SRAM is addressed by the wishbone bus as 64 32-bit words of which only the first 8 bits are used.
Design address map
Address |
Name |
---|---|
0 |
None - All outputs high-impedance |
1 |
LED Blinker |
2 |
SID |
3 |
SN76489 |
4 |
QCPU Microcontroller |
5 |
MC14500 bit-serial processor |
6 |
AY8913 |
7 |
Hellorld! |
8 |
TBB1143 |
9 |
AS-11 |
10 |
Tholin RISCV (RV32IM) |
11 |
Diceroll |
12 |
UE14500 / UE-1 |
The default state after power-up is design address == 0, with all design IO in high-impedance. This is to not potentially damage any project-specific hardware connected to the chip pins through wrong signals from a different design, no matter how brief.
Project Selection Register
The project selection register contains some additional options besides project selection. It is layed out as such:
OE is the “Override Enable”. When set, some internal signals can be overriden through the wishbone bus. Currently, this only consists of “RST” which, when set together with “OE”, forces the selected design into reset, no matter the state of mprj_io[0]
.