-
Notifications
You must be signed in to change notification settings - Fork 0
/
data-path-ifu.tex
92 lines (86 loc) · 4.03 KB
/
data-path-ifu.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
\documentclass{standalone}
\usepackage{circuitikz}
\usepackage{rotating}
\tikzset{ALU/.style={muxdemux,
muxdemux def={Lh=5, NL=2, Rh=2, NR=1, NB=1, NT=2, w=2,
inset w=1, inset Lh=2, inset Rh=0, square pins=1}},
REG/.style={muxdemux,
muxdemux def={Lh=1, Rh=1, NL=1, NB=0, NR=2, w=5}},
PC/.style={muxdemux,
muxdemux def={Lh=1, Rh=1, NL=2, NB=0, NR=1, w=5}},
MAR/.style={muxdemux,
muxdemux def={Lh=1, Rh=1, NL=2, NB=0, NR=0, w=5}},
MDR/.style={muxdemux,
muxdemux def={Lh=1, Rh=1, NL=2, NB=0, NR=2, w=5}},
SH/.style={muxdemux,
muxdemux def={Lh=1, Rh=1, NL=0, NB=1, NR=1, w=5}}}
\begin{document}
\begin{circuitikz}
\draw
(0,0)coordinate(o)node[MAR](mar){MAR}
(o)++(0,-1)coordinate(o)node[MDR](mdr){MDR}
(o)++(0,-1)coordinate(o)node[PC](pc){PC}
(o)++(0,-1)coordinate(o)node[REG](mbr1){MBR1}
(o)++(0,-1)coordinate(o)node[REG](mbr2){}
;
\draw[dashed](o)++(0,-0.5)--++(0,-1)coordinate(o);
\draw
(o)++(0,-0.5)coordinate(o)node[REG](h){H}
(mdr.rpin 2)to[short,i=\mbox{},-d]++(0.3,0)coordinate(busa)
(mbr1.rpin 1)to[short,i=\mbox{}]++(0.3,0)
(mbr2.rpin 1)to[short,i=\mbox{}]++(0.3,0)
(h.rpin 1)to[short,i=\mbox{}]++(0.3,0)
;
\draw[line width=2,->](busa)--++(0,-5.6)node[ALU, anchor=blpin 2, rotate=270, line width=0.5](alu){\rotatebox{90}{ALU}};
\draw
(mdr.rpin 1)to[short,i=\mbox{},-d]++(2.25,0)coordinate(busb)
(pc.rpin 1)to[short,i=\mbox{}]++(2.25,0)
(mbr1.rpin 2)to[short,i=\mbox{}]++(2.25,0)
(mbr2.rpin 2)to[short,i=\mbox{}]++(2.25,0)
(h.rpin 2)to[short,i=\mbox{}]++(2.25,0)
;
\draw[line width=2, ->](busb)--(alu.blpin 1);
\draw
(alu.tpin 1)to[short,i=\mbox{},-d]++(0.5,0)node[right]{N}
(alu.tpin 2)to[short,i=\mbox{},-d]++(0.5,0)node[right]{Z}
(alu.bpin 1)++(-0.5,0)to[multiwire=6,i=\mbox{},d-](alu.bpin 1)
(alu.rpin 1)node[SH, anchor=north](sh){Shifter}
(sh.rpin 1)++(0.5,0)to[multiwire=2,i=\mbox{},d-](sh.rpin 1)
(sh.bpin 1)to[short,i=\mbox{},-d]++(-4.67,0)coordinate(busc)node[above right]{Bus C}
(mar.lpin 1)to[short,i=\mbox{},d-](mar.blpin 1)
(mdr.lpin 1)to[short,i=\mbox{}](mdr.blpin 1)
(pc.lpin 1)to[short,i=\mbox{}](pc.blpin 1)
(h.lpin 1)to[short,i=\mbox{}](h.blpin 1)
;
\draw[line width=2](busc)--(mar.lpin 1);
\draw
(alu.blpin 2)++(0,0.1)coordinate(busa)
(alu.blpin 1)++(0,0.1)coordinate(busb)
node[above right]at(busa){Bus A}
node[above right]at(busb){Bus B}
;
\draw[<-, thick](mar.center)++(-1,-0.25)--++(0,-0.2);
\draw[<-, thick](mdr.center)++(-1,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](mdr.center)++(1,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](mdr.center)++(1.25,-0.25)--++(0,-0.2);
\draw[<-, thick](pc.center)++(-1,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](pc.center)++(1,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](mbr1.center)++(1.25,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](mbr1.center)++(1,-0.25)--++(0,-0.2);
\draw[<-,thick](mbr2.center)++(-1,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](mbr2.center)++(1.25,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](mbr2.center)++(1,-0.25)--++(0,-0.2);
\draw[<-, thick](h.center)++(-1,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](h.center)++(1.25,-0.25)--++(0,-0.2);
\draw[<-, thick, gray](h.center)++(1,-0.25)--++(0,-0.2);
\draw[->, very thick, gray](mar.blpin 2)--++(-3.5,0);
\draw[<->, very thick, gray](mdr.blpin 2)--++(-3.5,0);
\draw[->, very thick, gray](pc.blpin 2)--++(-1.5,0);
\draw[<-, very thick, gray](mbr1.blpin 1)--++(-1.5,0)node[black, anchor=east,rectangle,draw,minimum height=3 cm,minimum width= 1.5 cm](ifu){IFU};
\draw[<-, very thick, gray](mbr2.blpin 1)--++(-1.5,0);
\draw[->,very thick,gray](ifu.180)--++(-0.5,0);
\draw[dashed, thick](2.5,0.5)--(-2.5,0.5)--(-2.5,-4.5)--(2.5,-4.5)--(2.5,0.5);
\node[rectangle, very thick, draw,anchor=0, minimum width=0.5cm, minimum height=0.5cm]at(mbr1.east){};
\node[rectangle, very thick, draw,anchor=0, minimum width=0.5cm, minimum height=0.5cm]at(mbr2.east){MBR2};
\end{circuitikz}
\end{document}