9.2 The Pinouts.
This unit has two major outputs that goes to different parts of the sub unit; they are the
regA
and the
mult_out
. Each of them have a particular selector which selects which of the inputs to use as outputs: for the
regA
the selector is
regA_sel
while for the
mult_out
the selector is
mult_sel
. These inputs includes both input and outputs from different units. The table below shows where each input is generated from and what select bits are required to select them.
Select Data |
Source |
select bit |
data | Output from the program memory | 0000 |
timer_data_in | input to timer unit | 0001 |
io_data_in | input to I/O unit (write pin) | 0010 |
lifo_in | input to LIFO unit | 0011 |
fifo_in | input to FIFO unit | 0100 |
ioREAD | input to I/O unit (read pin) | 0101 |
program_couter | Input to the Program memory | 0110 |
io_out | Data output from I/O unit | 0111 |
alu_out | Output from the ALU register | 1000 |
fifo_out | Output from the FIFO unit | 1001 |
lifo_out | Output from the LIFO unit | 1010 |
9.3 The schematic.
The schematic below shows two seperate multiplexers for the two different outputs of the databus. As can be seen, both multiplexers share thesame inputs which are positioned at thesame positions. What this means, is that if both multiplexer share thesame select bit, they produce thesame output. The inputs are the same as shown above. The unlabelled inputs will be tied to zero since they are connected anywhere. In later version of brainio we might make use of them. The instruction can produce different values for their select bits thereby giving different outputs.
9.4 databus.vhd
Let us introduce the title.
Include the IEEE; standard library
The ports are given in the diagram above
The databus has two main output or multiplexer output. One is the
DATAOUT1
. The
data_sel
signal is used to select the
DATAOUT1
output. The databus receives its input from all the sub units and using its data selector which comes from the instruction, decides which of them to set as output and which sub unit to send it.
The next output is the
regA
. The
regA_sel
signal is used to select the
regA
output. Both the
DATAOUT1
and the
regA
share the same set of inputs but their data selectors are different.
9.5 databus.h
The databus consist of two 4-bit select multiplexer which receives input from all the sub units and gives two outputs. Since it receives input from all the subunit we would include all the sub unit header files.
The databus gives two outputs called:
regA
and
MULT_OUT
. We would use an enum called
output_select
to select the particular output we need.
We would another enum called
databusOp
which would consist of all the inputs to the databus:
TIMER_DATA_IN, IO_DATA_IN, LIFO_IN, FIFO_IN, IOREAD, PROGRAM_COUNTER, INTERRUPTS
are all registers in the register unit.
IO_OUT, FIFO_OUT, LIFO_OUT, ALU_OUT
are all outputs from different subunits.
DATA
is from the instructions.
Next we define the databus struct called
dbus databus data
which consists of the two databus output namely;
MULTOUT
and
regA
.
The databus unit has two main functions: the
bus_set
and
set_dataregister
. The
bus_set
is used to select the output of this unit and consists of two arguments. The
databusOp sel
which is used to select the particular input and the
output_select outsell
which is used to select which output to use , whether it is
regA
or
MULT_OUT
. Two types of instructions are available in brainio. The executable instruction and data. When the decode unit decodes an instruction and finds out that it is not an executable instruction but a data, it will set this function which takes the data instruction as its argument. This function will then set the data register or
DATA
(also one of the inputs of the databus) to the value of the instruction.
9.6 databus.c
We start by including the databus header file. Then two variables: the
bus_output
this will store the output of the databus.
data_register
, which will store the data instruction.
The
set_dataregister
, will set the
data_register
as the value of the instruction.
The
bus_set
switches the
sel
and depending on the value will set the
bus_output
as one of the inputs.
After setting the
bus_output
, depending on the value of the
outsel
, one of the outputs of the databus will be set to the
bus_output
.