Dr DC Hendry
1.1 Datapath
Data Inputs are data items (16 bit, 32 bit) bit patterns from the outside
world.
1.2 Controller Control + Data
Data Outputs are the data results from the processing of the data inputs.
Data Status are single bit signals indicating something about the data,
e.g. that an item is zero.
Internal Control are control lines to the datapath, multiplexor select
lines for example.
1.2 Controller
Control Inputs are single bit control lines from the outside world, e.g.
comms status lines.
Control Outputs are single bit control lines to the outside world.
Data Status are single bit signals indicating something about the data,
e.g. that an item is zero.
Internal Control are control lines to the datapath, multiplexor select
lines for example.
FSM View
Inputs
Outputs
R1 C/L R2
R1 C/L R2
R2 f (R1 )
2. Inputs to combinational logic may come from multiple registers, for ex-
ample, an adder will have two inputs (probably) from registers and one
output to a register:
R 3 R1 + R 2
R1
R3
R2
add/
subtract
1. R3 R1 + R2
2. In this case the ALU can either add or subtract, so the above statement
implies a value for the add/subtract input line.
R3 R 1 + R2
add subtract = 0
(1)
3 Communications
Communications
4. For chip level communications in large designs on chip local area networks
are needed (definitely not discussed here!).
3.1 Multiplexors
Multiplexors
Multiplexor Example
R1
R2
3. The second input of the ALU, and the output not specified in this diagram.
VHDL Code
3.2 Buses
Bus Structures
1. Bus structures best when a large number of sources need to drive (one at
a time) one target.
2. Each possible driver requires one output enable line.
3. Only one output enable line should be active at a time - drive these with
the FSM.
4. Any number of targets can read from the bus during the same clock cycle.
5. Long buses can suffer from high capacitance and so high power dissipation.
Type std logic includes the value Z for the high impedance value. Typical
VHDL:
signal bus1, r1, r2 : std logic vector(15 downto 0);
signal r1enable, r2enable : std logic;
.
.
r1driver : process(r1, r1enable)
begin
if (r1enable = 0) then
bus1 <= (others => Z);
else
bus1 <= r1;
end if ;
end process r1driver;