summaryrefslogtreecommitdiff
path: root/language/hebrew/hebclass/iitcsw.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /language/hebrew/hebclass/iitcsw.tex
Initial commit
Diffstat (limited to 'language/hebrew/hebclass/iitcsw.tex')
-rw-r--r--language/hebrew/hebclass/iitcsw.tex825
1 files changed, 825 insertions, 0 deletions
diff --git a/language/hebrew/hebclass/iitcsw.tex b/language/hebrew/hebclass/iitcsw.tex
new file mode 100644
index 0000000000..a793ab69fc
--- /dev/null
+++ b/language/hebrew/hebclass/iitcsw.tex
@@ -0,0 +1,825 @@
+\documentclass[%
+ %remarks, % Print remarks. I currenlt use "answers" instead
+ %norecpt, % Print receptin hours?
+ fancy, % make format slightly more fancy
+ %draft, %
+ %nowide, % Use a4 rather than a4wide
+ %eightbit, % re-work this one...
+ %nopairs, % don't print "submition in pairs only"
+ pagebreak, % Each question stars a new page
+ %noanswers,% (the default)
+ answers, % Print answers
+]{iitcsw}
+\usepackage{iitcsw-course}
+\usepackage{ifthen}
+\usepackage[%
+ hypertex,%
+ %ps2pdf,%
+ %dvips,%
+ %colorlinks,%
+ %nocolorlinks,%
+ %bookmarks,%
+]{hyperref}
+\hypersetup{colorlinks=false,raiselinks=false,breaklinks=true,%
+ plainpages=flase,pageanchor=false}
+\HeblatexRedefineL
+
+\usepackage{epic}
+\usepackage{eepic}
+%\usepackage{graphicx}
+
+\newcommand{\hebpar}[1]{)#1(}
+\renewcommand{\AssignmentSubject}{מעבד ה-\MIPS}
+\renewcommand{\HWNum}{5 \R{\Answer{)פת-רון(}}}
+\newcommand{\TaInCharge}{צפריר כהן}
+\newcommand{\TaInChargeEmail}{tzafrir@technion.ac.il} % no \L{} needed
+\newcommand{\RecHours}{יום ג' \L{13:30}-\L{14:30}}
+\newcommand{\SubmitionTime}{יום א', \L{3.3.2002}, בשעה \L{12:00}}% בבוקר, )הגשה מוקדמת עד
+% \L{21.2.2002}, בשעה \L{12:00} בבוקר(}
+%\courseSlogan{מבוא לתורת הצפינה - חורף תשס''ב}
+%\exerciseNumberAndDate{5}{11/02/2002}
+%\renewcommand\CourseName{תכן לוגי}
+%\renewcommand\CourseFullName{\CourseName \ \L{234262}} %or simply \CourseName
+%\renewcommand\Semester{חורף תשס"ב}
+\renewcommand{\ExtraInstructions}{%
+ \noindent השאלות מנוסחות בלשון רבות והן מיועדות לזוגות בלבד!%
+}
+\renewcommand{\submittersname}{מגישות}
+
+\newcommand{\BogoMIPS}{\embox{BogoMIPS}}
+
+\begin{document}
+\hyphenation{אסמ-בלר}
+%\title{bbb}\author{sfsdf}
+\maketitle
+
+\smallskip
+
+\question{מימוש פקודות}
+
+בתרגול 9 מודגמות כל מיני פקודות אותם אמור מעבד ה-\MIPS{} להיות מסוגל
+לבצע. אולם לא את כולם ניתן לממש עם מסלול הנתונים משרטוט \L{5.1} )משקפי
+ההרצאות( ולא את כולן מבצע הבקר משרטוט \L{5.3}.
+
+בשאלה זו נניח כי יחידת ה-\ALU{} מסוגלת לבצע את הפעולות הבאות )בלבד(:
+חיבור, חיסור, \L{AND}, \L{OR} ו-\L{SLT} )כמו בפקודה \L{SLT}(
+
+האם ניתן לממש את הפקודות הבאות ע"י הבקר? ע"י מסלול הנתונים?
+
+\smallskip
+
+\begin{otherlanguage}{english}
+\begin{center}
+\begin{tabular}{|c|c|c|}
+\hline
+\R{ע"י מסלול הנתונים} & \R{ע"י הבקר}& \R{פקודה} \\ \hline
+\hline
+\Answer{$\surd$} & \Answer{$\surd$} &ADD \\ \hline
+\Answer{$\surd$} & \Answer{$\surd$} &SUB \\ \hline
+\Answer{$\surd$} & \Answer{$\surd$} &AND \\ \hline
+\Answer{$\surd$} & \Answer{$\surd$} &OR \\ \hline
+\Answer{$\surd$} & \Answer{$\surd$} &SLT \\ \hline
+\Answer{$\times$} & \Answer{$\times$} &SLL \\ \hline
+\Answer{$\times$} & \Answer{$\times$} &SRL \\ \hline
+\Answer{$\surd$} & \Answer{$\times$} &ADDI \\ \hline
+\Answer{$\times$} & \Answer{$\times$} &LUI \\ \hline
+\Answer{$\surd$} & \Answer{$\surd$} &BEQ \\ \hline
+\Answer{$\surd$} & \Answer{$\times$} &BNE \\ \hline
+\Answer{$\surd$} & \Answer{$\surd$} &J \\ \hline
+\Answer{$\times$} & \Answer{$\times$} &JAL \\ \hline
+\Answer{$\times$} & \Answer{$\times$} &JR \\ \hline
+\end{tabular}
+\end{center}
+\end{otherlanguage}
+
+כעת עליכן לבחור שתי פקודות אשר אינן מבוצעות ע"י הבקר אך ניתנות
+למימוש ע"י מסלול הנתונים, ולפרט את פעולתן )אותות הבקר בכל מחזור שעון(:
+
+\medskip
+
+\begin{minipage}{\textwidth} % a minipage prevents page breaks
+\paragraph{פקודה ראשונה} \AnswerPlace{\L{BNE}}
+
+\noindent מחזור 1: \Answer{מחזור \L{Fetch} כרגיל} \hrulefill \\
+\noindent מחזור 2: \Answer{מחזור \L{Decode} כרגיל} \hrulefill \\
+\noindent מחזור 3:
+ \Answer{
+ $M_5=1$, $M_6=0$, $ALU_{op}=SUB$, $M_1=0$,
+ %$\underline{PC_{load}=\overline{ALU_{zero}}}$
+ \underline{$PC_{load}=\overline{ALU_{zero}}$}
+ }
+ \hrulefill \\
+\noindent מחזור 4: \hrulefill \\
+\noindent מחזור 5: \hrulefill \\
+\end{minipage}
+
+\begin{minipage}{\textwidth}
+\paragraph{פקודה שניה} \AnswerPlace{\L{ADDI}}
+
+\noindent מחזור 1: \Answer{מחזור \L{Fetch} כרגיל} \hrulefill \\
+\noindent מחזור 2: \Answer{מחזור \L{Decode} כרגיל} \hrulefill \\
+\noindent מחזור 3: \Answer{$M_5=1$, $M_6=1$, $ALU_{op}=ADD$} \hrulefill \\
+\noindent מחזור 4:
+ \Answer{
+ $M_5=1$, $M_6=1$, $ALU_{op}=ADD$
+ $M_3=0$, $M_4=1$, $REG_{write}$
+ }
+ \hrulefill \\
+\noindent מחזור 5: \hrulefill \\
+\end{minipage}
+
+\Answer{%
+ רוב הסטודנטים התעלמו מהבעיה עם \L{opcode} וסימנו שניתן לבצע את L{JR}.
+ במקרה שהבקר היה יכול להבחין בין L{JR} לבין פקודות אחרות )לדוגמה, אם הבקר היה
+ מקבל גם את \L{func}( אותות מחזור 3 היו:
+}
+
+\Answer{%
+ \L{%
+ $M_1=0$, $PC_{load}$, $M_6=0$, $M_5=0$ \quad%
+ ($R_t+R_s\rightarrow ALU_{out}\rightarrow PC)$)%
+ }%
+}
+
+\Answer{}
+
+כמוכן עליכן לבחור שתי פקודות אשר אינן ניתנות למימוש ע"י מסלול הנתונים,
+ולהסביר מה הבעיה במימושן:
+
+\paragraph{פקודה ראשונה} \
+
+\AnswerLines
+{
+ \textbf{\L{SLL}, \L{SRL}}:
+ בפקודות הללו צריך לבצע פעולת \L{shift} על ערך של רגיסטר. למעבד
+ ה-\MIPS{} שלנו אין יכולת לבצע את הפעולה הזו. בפרט אין במסלול הנתונים
+ שבשרטוט אפשרות להביא את הסיביות שבהן נתון \L{shamnt}. כמוכן יש לשים
+ לב שה-\L{opcode} של הפקודות הללו זהה לזה של \L{ADD}, \L{SUB}, וכו',
+ ולכן גם כל אותות הבקרה שיחידה $C_1$ שולחת במהלך ביצוע הפקודות הללו
+ צריכים להיות זהים.
+}
+
+\paragraph{פקודה שניה} \
+
+\AnswerLines
+{
+ \textbf{\L{JAL}}:
+ הבעיה עם פקודה זו היא שהיא דורשת כתיבה לרגיסטר מספר \L{31} ואילו
+ במסלול הנתונים אין אף קבוע כזה, ובקודה עצמה אין מקום לקודד את הקבוע
+ הזה.
+}
+
+\Answer{
+ שגיאה נפוצה על \L{JAL}: "אי אפשר את ערך \L{PC} ל\L{-}\L{RegFile}"
+}
+
+\Answer{}
+
+\noindent \Answer{ועוד פקודה שלא יכולה להתבצע:}
+\AnswerLines
+{
+ \textbf{\L{JR}}:
+ נשים לב שגם לפקודה זו יש \L{opcode=0} כמו ל-\L{ADD} וכמו ל-\L{SLL}
+ לעיל. מכאן שהפקודה לא יכולה לבצע כתיבה ל-\PC{} לאחר המחזור הראשון,
+ שהרי בכל מחזורי ביצוע פקודת \L{ADD} )למעט הראשון( לא כותבים ל-\PC{}.
+ באופן כללי כל אותות הבקרה שיחידה $C_1$ שולחת חייבים להיות זהים לאילו
+ שנשלחים בפקודות אחרות עם אותו \L{opcode}, כגון \L{ADD} ו-\L{SUB}.
+}
+
+
+
+% \commandsubsection{ADD}{חלק מהבקר}
+%
+% \commandsubsection{SUB}{חלק מהבקר}
+%
+% \commandsubsection{AND}{חלק מהבקר}
+%
+% \commandsubsection{OR}{חלק מהבקר}
+%
+% \commandsubsection{SLT}{חלק מהבקר}
+%
+% \commandsubsection{SLL}{לא נתמכת: אין דרך להעביר את ערך ה-\L{shamnt}}
+%
+% \commandsubsection{SLR}{ר' \L{SLL}}
+%
+% \commandsubsection{ADDI}{]להוסיף אותות מסלול נתונים[}
+%
+% \commandsubsection{LUI}{ה-\L{ALU} לא תמך בפעולה $sift_{16}(A+B)$, אין
+% דרך להעביר קבוע 16 ל-\L{ALU}}
+%
+% \commandsubsection{BEQ}{חלק מהבקר}
+%
+% \commandsubsection{BNE (\L{Branch on Not Equal})}{]להוסיף אותות מסלול נתונים[}
+%
+% \commandsubsection{J}{חלק מהבקר}
+%
+% \commandsubsection{JAL}{חסר הקבוע \L{31} בכניסת הכתיבה ל-\L{RF}}
+%
+% \commandsubsection{JR}{]להוסיף אותות מסלול נתונים[}
+
+
+%%
+% \question{מימוש פקודות}
+%
+% בתרגול 9 מודגמות כל מיני פקודות אותם אמור מעבד ה-\MIPS{} להיות מסוגל
+% לבצע. אולם לא את כולם ניתן לממש עם מסלול הנתונים משרטוט \L{5.1} )משקפי
+% ההרצאות( ולא את כולן ניתן לבצע עם הבקר משרטוט \L{5.3}.
+%
+% בשאלה זו נניח כי יחידת ה-\ALU{} מסוגלת לבצע את הפעולות הבאות )בלבד(:
+% \begin{itemize}
+% \item חיבור
+% \item חיסור
+% \item \L{AND}
+% \item \L{OR}
+% \item \L{SLT} )כמו בפקודה \L{SLT}
+% \end{itemize}
+%
+% לכל פקודה עליכן לרשום האם היא ניתנת לביצוע בעזרת מסלול הנתונים הנ"ל והאם
+% היא ניתנת למימוש בעזרת הבקר.
+%
+% עבור פקודה שנתמכת ע"י מסלול הנתונים אך לא ע"י הבקר, יש לרשום את אותות הבקרה של
+% מסלול הנתונים בכל מחזור. עבור פקודה שאינה נתמכת אף ע"י מסלול הנתונים, יש
+% לנמק בקצרה מדוע: מה חסר.
+%
+% אם הפקודה נתמכת ע"י הבקר וע"י מסלול הנתונים, אין צורך לכתוב נימוק.
+% אם סעיף שנימוק לתשובה אליו זהה לזה של סעיף קודם, מותר )ואף רצוי( לרשום
+% בנימוק ''ר' סעיף ]\emph{סעיף קודם}\L{``}.
+%
+% \newcommand{\commandsubsection}[2]{%
+% \vspace{-1ex}
+% \subsection{הפקודה \L{#1}}
+%
+% \vspace{-2ex}
+% ע"י הבקר: \AnswerPlace \quad ע"י מסלול הנתונים: \AnswerPlace
+% \answer{#2}
+%
+% \begin{tabular}{p{0.80\textwidth}l}% without factor of 0.95 I get a latex
+% % warning about the width
+% \\ & \R{מחזור 1:}
+% \\ \cline{1-1} & \R{מחזור 2:}
+% \\ \cline{1-1} & \R{מחזור 3:}
+% \\ \cline{1-1} & \R{מחזור 4:}
+% \\ \cline{1-1} & \R{מחזור 5:}
+% \\ \cline{1-1}
+% \end{tabular}
+% }
+%
+% \remark{שימו לב שהתשובות לא ישתנו גם אם ה-\L{ALU} מאפשר ביצוע \L{shift} לתוצאה}
+%
+% \commandsubsection{ADD}{חלק מהבקר}
+%
+% \commandsubsection{SUB}{חלק מהבקר}
+%
+% \commandsubsection{AND}{חלק מהבקר}
+%
+% \commandsubsection{OR}{חלק מהבקר}
+%
+% \commandsubsection{SLT}{חלק מהבקר}
+%
+% \commandsubsection{SLL}{לא נתמכת: אין דרך להעביר את ערך ה-\L{shamnt}}
+%
+% \commandsubsection{SRL}{ר' \L{SLL}}
+%
+% \commandsubsection{ADDI}{]להוסיף אותות מסלול נתונים[}
+%
+% \commandsubsection{LUI}{ה-\L{ALU} לא תמך בפעולה $sift_{16}(A+B)$, אין
+% דרך להעביר קבוע 16 ל-\L{ALU}}
+%
+% \commandsubsection{BEQ}{חלק מהבקר}
+%
+% \commandsubsection{BNE (\L{Branch on Not Equal})}{]להוסיף אותות מסלול נתונים[}
+%
+% \commandsubsection{J}{חלק מהבקר}
+%
+% \commandsubsection{JAL}{חסר הקבוע \L{31} בכניסת הכתיבה ל\L{RF}}
+%
+% \commandsubsection{JR}{]להוסיף אותות מסלול נתונים[}
+%
+% \vfill
+%
+%\pagebreak
+\question{הרצה}
+
+נתון קטע קוד באסמבלי של \MIPS:
+
+\newcommand\RegBase{\$1}
+\newcommand\RegA{\$2}
+\newcommand\RegB{\$3}
+\newcommand\RegRes{\$4}
+\newcommand\RegOne{\$5}
+\begin{otherlanguage}{english}
+\begin{tabbing}
+\tt
+begin: \= lw \hspace{1cm} \= \RegA, 0(\RegBase) \hspace{40pt} \= ; \$a = \textit{a} \\
+ \> lw \> \RegB, 4(\RegBase) \> ; \$b = \textit{b} \\
+ \> add \> \RegRes, \$0, \$0 \> ; \$res = 0 \\
+ \> addi \> \RegOne, \$0, 1 \> ; \$one = 1 \\
+loop: \> beq \> \RegB, \$0, endloop \> ; if (\$b == 0) goto \textit{endloop} \\
+ \> add \> \RegRes, \RegRes, \RegA \> ; \$res = \$res + \$a \\
+ \> sub \> \RegB, \RegB, \RegOne \> ; \$b = \$b - \$one \\
+ \> j \> loop \> ; goto \textit{loop} \\
+endloop:\> sw \> \RegRes, 8(\RegBase) \> ; \textit{res} = \$res
+%\rm
+\end{tabbing}
+\end{otherlanguage}
+
+%\pagebreak
+
+וכן תרגומו לשפת מכונה של ה-\MIPS:
+
+\smallskip
+
+\setlength{\tabcolsep}{0.2em}
+\begin{otherlanguage}{english}
+\begin{center}
+\begin{tabular}{|l|lll|r|r|r|r|r|r|r|c|}
+\hline
+address& & & & op&rs&rt&rd&shamnt& func& imm& hex\\ \hline
+\hline
+6FF0& & LW & \$2,0(\$1) & 35& 1& 2& & & & 0 & 8C220000\\ \hline
+6FF4& & LW & \$3,4(\$1) & 35& 1& 3& & & & 4 & 8C230004\\ \hline
+6FF8& & ADD & \$4,\$0,\$0 & 0 & 0& 0& 4& 0 & 32& & 00002020\\ \hline
+6FFC& & ADDI& \$5,\$0,1& 8 & 0 & 5& & & & 1 & 20050001\\ \hline
+7000& loop:& BEQ & \$3,\$0,endloop& 4 & 3& 0& & & & 3 & 10600003\\ \hline
+7004& & ADD & \$4,\$4,\$2 & 0 & 4& 2& 4& 0 & 32& & 00822020\\ \hline
+7008& & SUB & \$3,\$3,\$5 & 0 & 3& 5& 3& 0 & 34& & 00651822\\ \hline
+700C& & J & loop & 2 & & & & &&7168& 08001C00\\ \hline
+7010& endloop:& SW& \$4,8(\$1) & 43& 1& 4& & & & 8 & AC240008\\ \hline
+\end{tabular}
+\end{center}
+\end{otherlanguage}
+
+\smallskip
+
+%\subsection{הרצה}
+
+% נשתמש בסימון הבא למצבי הבקר: \L{F} ו-\L{D} למצב הראשון והמצב השני, בהתאמה,
+% ועבור כל מצב נוסף: $\hmbox{שם הפקודה}_{\hmbox{מספר המצב}}$. לדוגמה,
+% רצף מצבי הבקר בביצוע פקודת \L{LW} הוא \L{F, D, LW$_3$, LW$_4$, LW$_5$}
+%
+קטע הקוד נמצא בזכרון המעבד בכתובת המצויינת. במחזור מסויים הבקר במצב
+\L{Fetch}, ערכו של \L{PC} הוא \L{00006FF8} וערכי כמה מן הרגיסטרים:
+)מספרים בבסיס \L{16}(
+
+\begin{otherlanguage}{english}
+\noindent $R_1=001188AA$, $R_2=00005040$, $R_3=00004000$, $R_4=0000280C$,
+$R_5=00034458$
+\end{otherlanguage}
+
+% עליכן למלא את מצב המעבד ב-\L{20} המחזורים הבאים.
+
+% \smallskip
+%
+% \newcounter{row}
+% \setcounter{row}{1}
+% \setlength{\tabcolsep}{0.1em}
+% \newcommand{\tablerowlastcell}[1]{\stepcounter{row}& & & & & & & & #1 \\ \hline }
+% \newcommand{\tablerow}{\tablerowlastcell{\therow}}
+% \begin{otherlanguage}{english}
+% {\centering
+% \begin{tabular}{|*{7}{p{4.6em}|}c|r|}
+% \hline
+% $R_4$ & $R_3$ & $R_2$ & $R_1$ &\BPC & \IR & \PC & \R{בקר} & \\ \hline
+% \hline
+% 001188AA & 00005040 & 00004000 & 0000280C & \R{לא נתון} & \R{לא נתון} & 00006FFC & F & 1 \\ \hline
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \tablerow
+% \hline
+% \tablerowlastcell{}
+% \tablerowlastcell{}
+% \tablerowlastcell{}
+% \end{tabular}
+% }
+% \end{otherlanguage}
+%
+% \smallskip
+
+% אם המצב אינו ידוע, או אינו מוגדר היטב, יש לרשום ''לא ידוע\L{``}.
+%
+% \bigskip
+
+בסעיפים הבאים נציג מספר קלקולים במעבד ה-\MIPS{}. עבור כל קלקול )בנפרד(
+יש לכתוב באיזה מחזור שעון, אם בכלל, השתנה אחד האוגרים או הרגיסטרים
+שבבקר לעומת הביצוע במעבד תקין. יש לרשום מהו המחזור הראשון שבסיומו נכתב
+ערך שונה, וכן את הערכים שהשתנו.
+
+\newcommand{\commandsubsection}[4]{%
+ %\vspace{-1ex}
+ \begin{minipage}{\textwidth}
+ \subsection{\R{#1}}
+
+ %\vspace{-2ex}
+ פקודה: \AnswerPlace{#2},
+ אוגרים/רגיסטרים שהשתנו: \AnswerPlace[20em]{#3}%
+ %\answer{#3}%
+
+ \AnswerLines{#4}%
+ \end{minipage}
+}
+
+\bigskip
+
+\commandsubsection{קו ה-\L{zero} מעביר תמיד את הערך \L{`1'}}
+ {\L{BEQ}, מחזור 3}
+ {לרגיסטר \L{PC} יטען לערך \L{00007010} במקום להשאר \L{00007004}}
+ {במחזור הראשון לאחר \L{BEQ} ייכנס ל-\PC{} ערך שונה )\L{700C}(. כמובן
+ שלאחר מכן תבוא קפיצה לכתובת סיום הלולאה במקום המשך רגיל שלה.
+ }
+
+\commandsubsection{יחידת ה-\L{sign extention} מוסיפה למילה \L{16} אפסים
+ במקום להבצע הרחבת סימן}
+ {\L{---}}
+ {\L{---}}
+ {בכל הפקודות שבקטע הנ"ל הסיבית העליונה של \L{Imm} היא 0 ולכן בכל מקרה יחידת
+ הרחבת הסימן תעביר שם 0 בכל הסיביות.}
+
+\commandsubsection{סיבית מס' \L{15} של יציאת $M_6$ מוציאה תמיד ערך
+ \L{`0'}}
+ {\L{ADD}, מחזור שני}
+ {לרגיסטר \L{BPC} יטען לערך \L{0000707c} במקום להשאר \L{0000f07c}}
+ {במחזור השני של פקודת ה-\L{ADD} הראשונה מבוצע חישוב של הערך אשר נכנס
+ ל-\BPC{}. למרות שבפקודת \L{ADD} לא משתמשים בערך זה, הוא עדיין נשמר
+ ב-\BPC{} ולכן משנה את מצבו של ה-\MIPS{}. ביחידה המקולקלת יעביר
+ $M_6$ את הערך $0x80$ במקום הערך $0x8080$, ולכן ישתנה הסכום, אשר נכנס
+ ל-\BPC{}
+ }
+
+)מספרה של סיבית ה-\L{LSB} הוא 0(
+
+
+
+
+%\end{document}
+
+
+\question{איתור בעיות}
+
+חברת \MIPS{} החלה לשווק יחידות אשר לא עברו את בקרת האיכות תחת שם המותג
+\L{\href{http://www.unixguide.net/linux/faq/9.06.shtml}{\BogoMIPS}}.
+בעקבות נסיונות לקיצוץ עלויות במעבדות הפקולטה, הוחלט להשתמש במעבדי
+\BogoMIPS. כעת מוטל עליכן לנסות לאתר אילו פגמים יש במעבדים.
+
+ממידע פנימי שהתקבל מעובדי פס היצור, מתברר כי יש תקלה אופיינית אחת
+למעבדי \BogoMIPS{}: שתי היציאות של יחידת הרגיסטרים הוחלפו )$R_t$ נכנסת
+ל-$M_5$ ואילו $R_s$ נכנסת ל-$M_6$(.
+
+\smallskip
+
+עליכן לכתוב תוכנית קצרה )עד 7 פקודות( עבור מעבד ה-\BogoMIPS{} אשר כאשר
+תורץ על מעבד עם התקלה הנ"ל תקפוץ לכתובת \L{191296} ואילו על מעבד תקין
+תקפוץ לכתובת \L{1573696}. על התוכנית להתחיל בכתובת \L{4096} )כל
+המספרים בשאלה זו הם עשרוניים(. יש לכתוב את התוכנית כקוד אסמבלר,
+ובקידוד הקסדצימלי. כמוכן יש לנמק מדוע היא עובדת. אפשר להניח שבזמן ההתחלה יש
+בכל האוגרים בעלי מספר זוגי )$R_2$, $R_4$, \ldots, $R_{30}$( ערכים זוגיים
+ובכל האוגרים בעלי המספרים האי-זוגיים )$R_1$, $R_3$, \ldots, $R_{31}$( יש
+ערכים אי-זוגיים.
+
+\smallskip
+
+\begin{center}
+\begin{tabular}{|r|lll|} \hline
+\makebox[5em][c]{\R{קידוד}} & \multicolumn{3}{|c|}{\R{הפקודה}} \\ \hline \hline
+%\\ & \R{מחזור 1:}
+\ifiitcswanswers
+ \L{20010000} & & \L{ADDI} & \L{$R_1$,$R_0$,0} \\ \hline
+ \L{10010002} & & \L{BEQ} & \L{$R_1$,$R_0$,jgood} \\ \hline
+ \L{0800BAD0} & & \L{J} & \L{191296} \\ \hline
+ \L{0806OOD0} & \L{jgood}: & \L{J} & \L{1573696} \\ \hline
+\else
+ & & &\\ \hline
+ & & &\\ \hline
+ & & &\\ \hline
+ & & &\\ \hline
+\fi
+& & &\\ \hline
+& & &\\ \hline
+& & &\\ \hline
+\end{tabular}
+\end{center}
+
+\medskip
+
+\AnswerLines
+{
+ בשורה הראשונה יש השמה לתוך האוגר $R_1$. בביצוע תקין יוכנס הערך \L{0}. במעבד
+ מקולקל ישאר ב-$R_1$ הערך הקודם שהיה בו. מכיוון שמובטח שערכו היה אי\L{-}זוגי,
+ הרי שבפרט ערך זה שונה מ\L{-}\L{0} ולכן במעבד תקין פקודת \L{BEQ} תקפוץ.
+}
+
+%\pagebreak
+
+\vspace{-2ex}
+
+הקידוד של מספר פקודות \MIPS\ מובא בסיום.
+
+% כדי לבדוק את המעבדים הוצע להשתמש במערכת בדיקת מעבדי \MIPS. למערכת זו
+% מכניסים מעבד והיא מבצעת את הפעולות הבאות:
+% \begin{itemize}
+% \item מאפסת )ע"י כתיבה פיזית( את כל תאי הזיכרון וכל הרגיסטרים.
+% \item כותבת לזכרון הראשי מספר תאים
+% \item מריצה אותה למספר נתון מראש של פקודות, החל מכתובת \L{1000}
+% \item מדווחת מהו תוכן התא \L{500}
+% \end{itemize}
+
+
+
+%\pagebreak
+
+\question{תזמון}
+
+בשאלה זו נניח כי מעבד ה-\MIPS{} פועל עם מחזור שעון של $10ns$.
+
+מוצע השיפור הבא למעבד ה-\MIPS{}: יחידות ה-\L{\ALU} והזיכרון הראשי
+יוחלפו ביחידות חדשניות אשר השהייתן היא קצת פחות מ-$5ns$ )במקום קצת
+פחות מ-$10ns$(. המחיר לכך הוא שהשהייתה של יחידת הרגיסטרים תהיה
+\emph{קצת יותר מ-$10ns$} )אולם פחות מ-$12ns$(.
+
+\subsection{ללא שינוי זמן המחזור}
+
+אם המעבד המשופר לא יכלול שום שינוי בבקר משרטוט \L{5.3} )וימשיך לרוץ
+באותו זמן מחזור(: איזו פקודה לא תתבצע כמו שצריך? )מספיק אחת(
+%\answer{פקודות אשר צריכות לכתוב ל-\L{RF} במחזור האחרון: לא מובטח
+%שבמחזור הקודם הגיעו הערכים המתאימים לכניסות הכתיבה של ה-\L{RF}}
+
+\AnswerLines
+{
+ כל פקודה אשר צריכה לכתוב ליחידת הרגיסטרים )במחזור האחרון(: נשים לב
+ שבכל הפקודות הנתונים לפקודה יהיו מוכנים בזמן )בכל פקודה כזו יש מסלול צירופי
+ שעובר לכל היותר פעמיים ב-\L{register file} ולפחות פעם אחת ב-\L{ALU}(
+ הכתובת מגיעה מהשדה $R_t$ או השדה $R_t$ בפקודה )ב-\L{IR}. אולם לפני
+ המחזור של הכתיבה עצמה לא מוגדרים הערכים של הבוררים $M_3$ ו-$M_4$.
+}
+
+%\pagebreak
+
+\noindent מהם השינויים הנדרשים לבקר ע"מ שכל הפקודות יוכלו לעבוד בצורה
+ תקינה?
+%\answer{הגדרת אותם ערכים ל-$M_3$ ול-$M_4$ מחזור שעון אחד מוקדם יותר
+%בפקודות הכותבות ל-\L{RF}.}
+
+\AnswerLines
+{
+ השינוי הנדרש הוא פשוט: בכל הפקודות אשר כותבות לאוגר במחזור האחרון
+ שלהן, להבטיח שמחזור קודם לכן ינתנו כבר האותות המתאימים ל-$M_3$
+ ו-$M_4$ )במקום "ערך לא מוגדר" כיום(.
+}
+
+\subsection{שינוי מחזור השעון}
+
+מעוניינים לקבל מערכת עם תפוקה משופרת.
+בסעיף זה עליכן להציע שינויים לבקר ולזמן המחזור כך שזמן הביצוע של אף
+פקודה לא יפגע )ביחס להרצת אותה פקודה על מעבד ה-\MIPS{} המקורי עם זמן
+המחזור המקורי(.
+
+מה יהיה מחזור השעון החדש? \AnswerPlace{$5ns$}
+
+הבאנה שתי דוגמאות לביצוע של פקודות במעבד החדש:
+
+% איזו פקודה, לדוגמה, תוכל לעבוד יותר מהר? \AnswerPlace.
+\paragraph{פקודה ראשונה:} \AnswerPlace{}\
+מה יהיו אותות הבקרה בכל מחזור?
+% \answer{פקודות $opcode=0$: זמן הביצוע: $35ns$ במקום $40ns$, פקודות \L{ADDI},
+% \L{ANDI}, \L{ORI}: כנ"ל, \L{J}: $15ns$ במקום $30ns$, \L{BEQ}: $25ns$ במקום
+% $30ns$, \L{JR}: $20ns$ במקום $30ns$}
+
+\AnswerLines{}
+
+%\pagebreak
+
+% עבור איזו פקודה, לדוגמה, זמן הביצוע לא ישתנה? \AnswerPlace\
+\paragraph{פקודה שניה:} \AnswerPlace{}\
+מה יהיו אותות הבקרה בכל מחזור?
+
+\AnswerLines{}
+
+%\pagebreak
+\question{שאלת בניה}
+
+יש להוסיף למעבד ה-\MIPS\ את הפקודה \L{DSW} )\L{Double Store Word}(:
+
+\begin{otherlanguage}{english}
+DSW $R_i$, $R_j$:
+
+{\tt
+ MEM[$R_i$] $\leftarrow$ $R_j$
+
+ MEM[$R_j$] $\leftarrow$ $R_i$
+}
+\end{otherlanguage}
+
+יש להמנע מפגיעה במהלך הביצוע של פקודות אחרות. על המכונה להשתמש בתוספת
+חומרה מינימלית, ותחת זאת להשיג מספר מחזורים מינימלי. המחיר של תוספת
+חומרה:
+
+\smallskip
+
+\begin{center}
+\begin{tabular}{|c||r|}
+\hline
+ \R{עלות} & \R{השינוי} \\ \hline
+\hline
+ $n\cdot k$ & \R{תוספת בורר של $k$ סיביות עם $n$ כניסות} \\ \hline
+ $\left(n_2-n_1\right)k$ & \R{הרחבת בורר $k$ סיביות מ-$n_1$ כניסות ל-$n_2$ כניסות} \\ \hline
+ $10\cdot k$ & \R{תוספת אוגר ברוחב $k$ סיביות} \\ \hline
+ $1000$ & \R{הוספת יחידת \L{ALU}} \\ \hline
+\end{tabular}
+\end{center}
+
+\smallskip
+
+שינויים בבקר, וכן שינויים בחיווט הם בחינם.
+
+עליכן לפרט את:
+\begin{enumerate}
+\item קידוד הפקודה
+\item השינויים למסלול הנתונים
+\item השינויים לבקר )דיאגרמת מצבים(
+\end{enumerate}
+
+\ifiitcswanswers
+ \paragraph{הקידוד:}
+\fi
+\Answer{נראה די טבעי לקודד את $R_i$ ו-$R_j$ כ-$r_s$ ו-$r_t$, ואכן כך
+ נעשה. כדי לאפשר להוציא מיציאת ה-\ALU\ את $R_s$ נשים בשדה ה-\L{Imm} את
+ הערך \L{"0"} )\L{16} ביטים(.
+}
+
+% This is the quickes way I found to have allow a row with no vertical
+% rules:
+\newcommand{\Mul}[1]{\multicolumn{1}{c}{#1}}
+\begin{otherlanguage}{english}
+\begin{center}
+\Answer{
+ \begin{tabular}{|c|c|c|c|}
+ \Mul{6} & \Mul{5} & \Mul{5} & \Mul{16} \\ \hline
+ DSW & $R_i$ & $R_j$ & "0" \\ \hline
+ \end{tabular}
+}
+\end{center}
+\end{otherlanguage}
+%}
+\renewcommand{\goodluckname}{%
+ \hyperlink{http://home.att.net/~cecw/lastpage.htm}{\R{בהצלחה}}%
+}
+%\vfill
+\answer{כאשר \L{DSW} הוא קוד פקודה השונה מכל קוד פקודה קיים}
+
+\Answer{
+ מסלול הנתונים הנוכחי מאפשר כתיבה לזכרון רק מתוך יציאת $R_t$ של
+ ה-\L{RF}. כמוכן, בעזרת הקידוד שלנו אנו יכולים להעביר ליציאת ה-\L{ALU}
+ את $R_s$ וכך להעביר ערך זה לכניסת $ADDR$ של הזכרון. בכך נשלים רק חצי
+ מהמשימה: אנו צריכים לעשות את אותו הדבר, אולם תוך החלפת $R_s$ ו-$R_t$.
+}
+
+\Answer{
+ נראה די מתבקש, איפה, להוסיף עוד שני בוררים שיאפשרו לנו להחליף בין
+ הערכים של $R_s$ ו-$R_t$. אפשר לעשות את זה בשני מקומות: לפני
+ ה-\L{register file}: להחליף בין מספרי הרגיסטרים, או אחרי
+ ה-\L{register file}: להחליף בין הערכים עצמם. במקרה הראשון צריכים
+ בוררים של 5 ביטים, אולם שינוי בערכים מחייב מחזור נוסף של קיראה
+ מהאוגרים. במקרה השני צריכים בוררים יותר רחב )\L{32} סיביות( אך לא
+ צריך לחכות מחזור נוסף לקריאה. מכיוון שאנו רוצים מינימום חומרה, נבחר
+ באפשרות הראשונה.
+}
+
+\ifiitcswanswers
+
+ % TODO: this fails to work. rem-out the following line to be able t typeset
+ % the file properly
+ \CenterFigure{iitcsw-samplefig}
+
+ \Answer{בכל מקום שבו לא נאמר אחרת, $M_7=0$, $M_8=1$ )כלומר: חיבור כמו במסלול
+ הנתונים הרגיל(}
+\fi
+
+
+
+\ifiitcswanswers
+ \subsection*{מהלך ביצוע הפקודה:}%
+\fi
+
+\noindent\Answer{במחזור הראשון והשני: כמו כל הפקודות}
+
+\noindent\Answer{%
+ מחזור שלישי:
+ )אליו עוברים אם \L{opcode=DSW}( חישוב ב-\L{ALU} של $R_s+Imm$
+}
+
+\noindent\Answer{%
+ מחזור רביעי:
+ חישוב ב-\L{ALU} של $R_s+Imm$, כתיבה לכתובת $ALU_{out}$ את $R_t$
+}
+
+\noindent\Answer{%
+ מחזור חמישי:
+ "החלפת התפקידים" של $R_s$ ו-$R_t$, קריאת הערכים מה-\L{RF} מחדש
+}
+
+\noindent\Answer{%
+ מחזור שישי:
+ חישוב ב-\L{ALU} של $R_s+Imm$
+}
+
+\noindent\Answer{מחזור שביעי:
+ חישוב ב-\L{ALU} של $R_s+Imm$, כתיבה לכתובת $ALU_{out}$ את $R_t$
+}
+
+\ifiitcswanswers
+ \subsection*{אותות הבקרה:}
+\fi
+
+\noindent\Answer{במחזור הראשון והשני: כמו כל הפקודות}
+
+\noindent\Answer{מחזור שלישי: $M_5=1$, $M_6=1$, $ALU_{op}=ADD$}
+
+\noindent\Answer{מחזור רביעי:
+ $M_5=1$, $M_6=1$, $ALU_{op}=ADD$, $M_2=1$, $MEM_{write}$
+}
+
+\noindent\Answer{מחזור חמישי: $M_7=1$, $M_8=0$}
+
+\noindent\Answer{מחזור שישי: $M_7=1$, $M_8=0$, $M_5=1$, $M_6=1$, $ALU_{op}=ADD$}
+
+\noindent\Answer{מחזור שביעי:
+ $M_7=1$, $M_8=0$, $M_5=1$, $M_6=1$, $ALU_{op}=ADD$, $M_2=1$,
+ $MEM_{write}$
+}
+
+
+
+
+%\begin{figure}[b]
+\begin{minipage}{\textwidth}
+\subsection*{הקידוד של מספר פקודות:}
+
+\begin{otherlanguage}{english}
+\begin{verbatim}
+
+ADD $a, $b, $c: opcode=0, rs=b, rt=c, rd=a, shamnt=0, func=32
+SUB $a, $b, $c: opcode=0, rs=b, rt=c, rd=a, shamnt=0, func=34
+OR $a, $b, $c: opcode=0, rs=b, rt=c, rd=a, shamnt=0, func=37
+AND $a, $b, $c: opcode=0, rs=b, rt=c, rd=a, shamnt=0, func=36
+SLT $a, $b, $c: opcode=0, rs=b, rt=c, rd=a, shamnt=0, func=42
+SLL $a, $b, c : opcode=0, rs=0, rt=b, rd=a, shamnt=c, func=0
+SRL $a, $b, c : opcode=0, rs=0, rt=b, rd=a, shamnt=c, func=2
+JR $a: opcode=0, rs=a, rt=0, rd=0, shamnt=0, func=8
+
+ADDI $a, $b, Imm: opcode=8, rs=b, rt=a
+LUI $a, Imm: opcode=15, rs=0, rt=a
+BEQ $a, $b, Imm: opcode=4, rs=a, rt=b
+SW $a, Imm($b): opcode=43, rs=b, rt=a
+LW $a, Imm($b): opcode=35, rs=b, rt=a
+
+J Imm: opcode=2
+JAL Imm: opcode=3
+
+\end{verbatim}
+
+%
+% \newcommand{\reg}[1]{R$_{\textrm{#1}}$}
+%
+% \begin{tabular}{*{10}{l}}
+% & command &OP &JImm& \reg{s} &\reg{t} &Imm &\reg{d} &
+% {\scriptsize shamnt} & func \\
+% ADD & \reg{a}, \reg{b}, \reg{c} &0 & &b &c & &a &0 &32 \\
+% SUB &\reg{a}, \reg{b}, \reg{c} &0 & &b &c & &a &0 &34 \\
+% OR &\reg{a}, \reg{b}, \reg{c} &0 & &b &c & &a &0 &37 \\
+% AND &\reg{a}, \reg{b}, \reg{c} &0 & &b &c & &a &0 &36 \\
+% SLT &\reg{a}, \reg{b}, \reg{c} &0 & &b &c & &a &0 &42 \\
+% SLL &\reg{a}, \reg{b}, c &0 & &0 &b & &a &c &0 \\
+% SRL &\reg{a}, \reg{b}, c &0 & &0 &b & &a &c &2 \\
+% JR &\reg{a} &0 & &a &0 & &0 &0 &8 \\
+% ADDI &\reg{a}, \reg{b}, Imm &8 & &b &a &Imm & & & \\
+% LUI &\reg{a}, Imm: &15 & &0 &a &Imm & & & \\
+% BEQ &\reg{a}, \reg{b}, Imm &4 & &a &b &Imm & & & \\
+% SW &\reg{a}, Imm(\reg{b}) &43 & &b &a &Imm & & & \\
+% LW &\reg{a}, Imm(\reg{b}) &35 & &b &a &Imm & & & \\
+% J &JImm &2 &JImm & & & & & & \\
+% JAL &JImm &3 &JImm & & & & & & \\
+%
+% \end{tabular}
+\end{otherlanguage}
+\end{minipage}
+%\end{figure}
+
+\FinalText{}
+
+\end{document}