אנו רוצים לבנות מחשב. האם כל פונקציה צריך לממש במיוחד? כמובן שלא. כמו בקוד, גם בחומרה בעיות חוזרות על עצמן.
מחבר חלקי(Half Adder)
למחבר שתי כניסות a,b ושתי יציאות S,Cout ומתקיים:
S=a⊕bCout=ab
כך נוכל לראות טבלת אמת של HA:
a0011b0101Cout0001S0110
מחבר מלא(Full Adder)
יש לו שלוש כניסות a,b,Cin ושתי יציאות S,Cout.
מתקיים:
S=XOR(a,b,Cin)
נבנה טבלת אמת:
a00001111b00110011Cin01010101Cout00010111S01101001
נבנה מפות קרנו של היצורים הללו כדי למצוא את הלוגיקה מאחורי המחבר.
Cin╲ab01001011111101⇓S=a⊕b⊕Cinראו פיתוח בתרגול הקודםCin╲ab01000111111101⇓Cout=ab+aCin+Cinb
ראינו בתרגול הקודם כי יש מימוש של FA שנראה כך:

אבל זה מימוש די מסובך. נוכל לקחת HA-ים ולממש בעזרתם את ה-FA כך:

ה-FA מהווה מערכת פעולות חצי שלמה ונראה זאת כך:
S(a,b,Cin)=a⊕b⊕Cin⟹S(a,1,0)=a
Cout(a,b,Cib)=ab+aCin+Cinb⟹Cout(a,b,0)=ab
ממשו את הפונקציה f(w,x,y)=∑(1,2) בעזרת FA וקבועים.
נוכל לתרגם ישירות את המינטרמים:
f(w,x,y)=wxy+wxy=w(xy+xy)=w(x⊕y)=S(w,1,0)S(x,y,0)=Cout(S(w,1,0),S(x,y,0),0)
ממשו מכפל 2 סיביות על 2 סיביות באמצעות שימוש בשערים לוגים וברכיבי HA בלבד.
הדבר הזה, כמו כל בעיה לוגית, יכול להיפתר באמצעות מפת קרנו. אבל זה מסובך שכן אנו צריכים 4 מפות קרנו שכן יש 4 סיביות יציאה.
זה גם לא יעזור לנו כי אמרו לנו להשתמש ברכיבי HA.
נסתכל על כפל ארוך:
+⋅a1a0b1b0a1b0a0b0a1b1a0b1M3M2M1M0

נתון הרכיב הבא:

רכיב זה סופר את כמות האחדות והאפסים בכניסותיו ומוציא את הערך בעל הספירה הגבוהה יותר.
לדוגמה: max(0,1,0)=0,max(1,1,1)=1,max(0,1,1)=1
לרשותכם כמות בלתי מוגבלת של רכיבים כאלו ואת הקבועים 0,1.
מהי הכמות המינימלית של רכיבי max הנחוצים על מנת לממש שער OR?
א. יש צורך ברכיב max יחיד ובקבוע 1.
ב. יש צורך בשני רכיבי max ובקבוע 0
ג. יש צורך בשלושה רכיבי max ובאחד מהקבועים.
ד. יש צורך בארבעה רכיבי max ובשני הקבועים יחד.
ה. הפונקציה max לא מהווה מערכת פעולות שלמה או חצי שלמה ולא ניתן לממש באמצעותה שער OR.
max(a,a,a)=amax(a,1,0)=amax(a,b,1)=a+b
נשים לב כי אם נשים max(a,b,1) אז אם אחד מהספרות היא 1 נקבל 1. אם שתי הספרות הן 1 נקבל 1 ואם 0 הוא שנייהם אז נקבל 0 בדיוק כפעולת שער OR.
לכן, התשובה הנכונה היא א.
בורר - Mux
ישנן n כניסות בקרה ו-2n כניסות מידע.
יש יציאה אחת.
מה שהבורר עושה זה שהוא מקבל סיגנל בכניסת בקרה, הוא יקח את הדאטא מהמקום המתאים ויוציא אותו החוצה.
שימוש טוב של Mux הוא בניתובים של מסלולים. נניח איזושהי מערכת שעושה חיבור, חיסור וכפל - כמו ALU.
מימוש פונקציות ע"י בוררים
נתונה הפונקציה f(x,y,z,w)=∑(0,1,5,7,13,14). ממשו אותה בעזרת:
א. בורר 16→1:
יש לנו מספיק כניסות כדי לתת פשוט את כל ערכי הפונקציה בכניסות. כעת, באמצעות טבלת אמת נראה כיצד אנו מכניסים את המשתנים.
0123456789101112131415MSBx0000000011111111y0000111100001111z0011001100110011LSBw0101010101010101f1100010100000110
כעת נוכל לראות לאן מכניסים מה:

ב. בעזרת בורר 8→1:
נקח בטבלה שלנו את העמודה של w ונהפוך אותו ל-data ואז ננסה לבנות טבלה חדשה:
01234561MSBx00001111y00110011LSBz01010101f10ww00ww
כעת, נרצה להכניס את w למימוש.
האם w היא הבחירה הכי טובה לזה? לאו דווקא. אנו צריכים שער NOT נוסף הרי.

ג. בעזרת 4 בוררים של 4→1:
נשתמש במבנה הכללי:

ונבנה בעזרתו את היצור שלנו.
מפענח - Decoder
מקבל n כניסות בקרה וכניסת הפעלה, EN, אחת ומוציא 2n−1 כניסות.
נתונה הפונקציה הבאה f(A,B,C,D,E)=∑(1,3,5,9,11,13,27,31) ממשו אותה בעזרת מפענח 5→32.

בעזרת מפענח 4→16 ושערים לוגיים ממשו את הפונקציה f(A,B,C,D,E)=∑(1,3,5,9,11,13,27,31).
f(A,B,C,D,E)=Af1(B,C,D,E)+A′f2(B,C,D,E)
A00000011B00011111C00100101D01001011E11111111F11111111⟹f2(B,C,D,E)=∑(1,3,5,9,11,13)f1(B,C,D,E)=∑(11,15)

נשים לב כי זה לא הכי יעיל. אנו צריכים שני מפענחים ושער NOT.
אם נניח נפצל לפי E נגלה כי f2=0 ואז: f=Ef1.
האם מפענח 2→4 (ללא enable) מהווה מערכת פעולות שלמה?
- כן, ללא שימוש בשערים נוספים.
- כן, בתוספת שער NOT.
- כן, בתוספת שער AND.
- לא
A0011B0101f01000f10100f20010f30001
נשים לב כי פה יש לנו:
f0=a⋅bf1=abf2=abf3=ab
יש לנו שער AND. כעת חסר לנו NOT. נזכר כי aa=a ולכן a⋅a=a ולכן אם נבחר את f0 כשנכניס את a בשני היצורים הללו נקבל ב-f0 בדיוק את a.
לכן, התשובה הנכונה היא 1.
תרגיל (אביב 2017 מועד א' שאלה 3)
רוצים לממש את הפונקציה הבאה:
f(A,B,C,D,E)=∑(10,11,19,26,27)
באמצעות Decoder4→16.
איזה מהסיביות יש להוציא מסיביות הבקרה ולהעביר לסיבית ה-enable כך שנשתמש במספר מינימלי של מפענחים ובמספר מינימלי של שערים?
- סיבית D.
- סיבית C.
- סיבית A.
- קיימות שתי תשובות נכונות מבין התשובות א-ג.
- כל המימושים משתמשים באותו מספר של מפענחים.
נבנה טבלת אמת של הפונקציה:
A00111B11011C00000D11111E01101F11111
ניתן לראות פה כי עבור D=0 הפונקציה מוציאה 0 תמיד. לכן, נוכל לשים אותה בכניסת ה-EN ולא נדרש כלל שערים לוגיים.
לכן, התשובה הנכונה היא 1.
תרגיל (אביב 2017 מועד ב' שאלה 14)
נתונה הפונקציה הבאה:
f(w,x,y,z)=∑(7,15,6)+∅∑(5)
ברשותכם מפענחים 2→4 ללא כניסת EN ושערים לוגיים {AND,OR} בלבד.
מהו מספר המפענחים המינימלי הנדרש כדי לממש את f?
א. 0
ב. 1
ג. 2
ד. 3
ה. 4
נבנה טבלת אמת של הפונקציה:
w0100x1111y1110z1101f111∅
נשים לב כי הפונקציה שווה ל-0 אם x=0 בהכרח. לכן נוכל למיין אותו כבר בהתחלה באמצעות שער AND.
נשים לב בנוסף כי הפונקציה מוציאה 0 או ∅ אם y=0 ולכן נוכל למיין גם אותו באמצעות שער AND.
כעת נותרנו עם w,z המקיימים:
w0101z1100f1110
f∗=wz+wz+wz
אך אין לנו שערי NOT ולכן נדרש להשתמש במפענח יחיד :)
הערה (פתרון בתרגול עם מפת קרנו)
yz╲wx000111100001∅1111110
נשים לב כי ה-∅ מיותר שכן הוא לא עוזר לנו לכסות את הפונקציה. נקבל:
f(w,x,y,z)=wxy+xyz=xy(w+z)
הבעיה היחידה שלנו היא ה-NOT. אין לנו שער NOT אך מפענח 2→4 הוא מערכת פעולות שלמה ולכן הפתרון ל-NOT בקיום נתוני הבעיה הוא שימוש במפענח יחיד.
תרגיל (מועד ב' חורף 2025 שאלה 5)
נתונה הפונקציה הבאה: f(x,y,z,w)=∑(3,7,11,15) וברצוננו לממש את הפונקציה הנתונה בעזרת מספר מינימלי של רכיבים.
ברשותכם מספר בלתי מוגבל של מפענחים 2→4 עם כניסת EN ומספר בלתי מוגבל של שערי OR עם מספר כניסות לבחירתכם. מותר גם להשתמש בקבועים 0,1 ללא הגבלה.
מהו מספר הרכיבים המינימלי הדרוש בכדי לממש את הפונקציה f?
- מפענח בודד ושער OR בודד.
- מפענח בודד ללא צורך בשערי OR.
- שני מפענחים ללא צורך בשערי OR.
- שני מפענחים ושער OR בודד.
- שלושה מפענחים ושער OR.
נבנה טבלת אמת:
x0011y0101z1111w1111f1111
נשים לב כי z=w=1 בכל מקום בו הפונקציה מקבלת 1 ו-x,y לא משנים שכן אנו רואים את כל הערכים שלהם בטבלה הזו.
אנו בתכלס צריכים שער AND אחד. לכן, ניתן באמצעות מפענח בודד לממש שער AND בודד ולכן התשובה הנכונה היא 2.