diff options
Diffstat (limited to 'language/hebrew/hebclass/iitcsw.tex')
-rw-r--r-- | language/hebrew/hebclass/iitcsw.tex | 825 |
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} |