חזור לתיקייה: תרגול

4 - מפות קרנו ושהייה

חיפוש בתיקיה
Ctrl K
לחץ כאן או הקש Ctrl K כדי לחפש בכל התיקיה
  • מפת קרנו
  • מציאת הצגה מינימלית
  • זמני שהייה של שערים לוגיים
  • סוגים של זמני שהייה
  • זמן שהייה של פונקציה צירופית

4 - מפות קרנו ושהייה

00440252

מערכות ספרתיות ומבנה המחשב

רשימות תרגול לקריאה בשבת

מפות קרנו ושהייה

הופק מתוך תקיית התואר של שקד

uni-folder.vercel.app

היום נדבר על מפת קרנו, נצמצם פונקציות, על גורמים ראשוניים וגוררים ראשוניים וצירופי ברירה.
בנוסף, נדבר על שהייה וחישוב שלה.

מפת קרנו

ראינו שאפשר לממש פונקציות בשערים לוגיים, אבל שער הוא בעל שטח ולוקח אנרגייה והנדל"ן מוגבל.
נרצה לממש פונקציות בתצורה היעילה ביותר!

מפת קרנו מורכבת:

  1. 2n2^n2n משבצות עבור nnn משתנים
  2. כל משבצת מתאימה למינטרם או מקסטרם
  3. סדר העמודות/שורות הוא לפי קוד גריי (קוד ציקלי)
  4. לכל משבצת יש nnn משבצות סמוכות
zw\xy00011110000412801151391137151110261410\begin{array}{c|c|c|c|c|} _{zw}\backslash^{xy} & {\mathbf{00}} & {\mathbf{01}} & {\mathbf{11}} & {\mathbf{10}} \\ \mathbf{00} & 0 & 4 & 12 & 8 \\ \mathbf{01} & 1 & 5 & 13 & 9 \\ \mathbf{11} & 3 & 7 & 15 & 11 \\ \mathbf{10} & 2 & 6 & 14 & 10 \\ \end{array}zw​\xy00011110​000132​014576​1112131514​10891110​

הצמצום מתבצע לפי הכללים הבאים:

  • לסכום מכפלות: Ax+Ax′=AAx+Ax'=AAx+Ax′=A
  • למכפלות סכומים: (A+x)(A+x′)=A(A+x)(A+x')=A(A+x)(A+x′)=A

לדוגמה:
​תרגול ספרתיות מפות קרנו 1.png

הגדרה 1 (גורר)

ליטרל או מכפלת ליטרלים המכוסה ע"י הפונקציה.

g⊆f    if    g=1  ⟹  f=1g \subseteq f \;\; if \;\; g=1\implies f=1g⊆fifg=1⟹f=1

​תרגול ספרתיות מפות קרנו 3.png

הגדרה 2 (גורר ראשוני)

גורר שכל השמטה של ליטרל ממנו יוצרת מכפלה שאינה מכוסה ע"י הפונקציה.

עבור הפונקציה f=ywf=ywf=yw מתקיים כי:

zw\xy00011110000111111110zw\xy00011110000111111110ywyz′wראשוני!לא ראשוני!\begin{matrix} \begin{array}{c|c|c|c|c|} _{zw}\backslash^{xy} & 00 & 01 & 11 & 10 \\ \hline 00 \\ \hline 01 & & {\color{red}1} & {\color{red}1} \\ \hline 11 & & {\color{red}1} & {\color{red}1} \\ \hline 10 \\ \hline \end{array} & \begin{array}{c|c|c|c|c|} _{zw}\backslash^{xy} & 00 & 01 & 11 & 10 \\ \hline 00 \\ \hline 01 & & {\color{red}1} & {\color{red}1} \\ \hline 11 & & 1 & 1 \\ \hline 10 \\ \hline \end{array} \\ yw & y{\color{red}z'}w \\ \R{\text{ראשוני!}} & \R{\text{לא ראשוני!}} \end{matrix}zw​\xy00011110​00​0111​1111​10​ywראשוני!​zw​\xy00011110​00​0111​1111​10​yz′wלא ראשוני!​
הגדרה 3 (גורר ראשוני הכרחי)

גורר ראשוני המכסה מינטרם שאינו מכוסה ע"י אף גורר ראשוני אחר.

נניח בטבלה הבאה:

zw\xy0001111000101111111110\begin{array}{c|c|c|c|c|} _{zw}\backslash^{xy} & 00 & 01 & 11 & 10 \\ \hline 00 & 1 \\ \hline 01 & 1 & 1 & 1 \\ \hline 11 & & 1 & 1 \\ \hline 10 \\ \hline \end{array}zw​\xy00011110​0011​0111​1111​10​

הגוררים הראשונים ההכרחים הינם: yw,x′y′z′yw,x'y'z'yw,x′y′z′, שהם הריבוע והפס בשמאל למעלה.

מציאת הצגה מינימלית

השיטה הולכת כך:

  1. יצירת רשימה של כל הגוררים הראשוניים.
  2. מציאת כל הגוררים הראשונים ההכרחיים והכנסתם לביטוי.
  3. הוצאת כל הגוררים הראשונים ההכרחיים וכל הגוררים הראשונים שכוסו ע"י ההכרחיים מרשימת הגוררים.
  4. אם קבוצת הגוררים הראשונים ההכרחיים מכסה את fff - סיימנו.
  5. אחרת, נבחר את הגוררים הראשונים המינימליים, כך שכל הפונקציה תכוסה.

נתונה הפונקציה: f(x,y,z)=∑(0,1,2,4,5)f(x,y,z)=\sum(0,1,2,4,5)f(x,y,z)=∑(0,1,2,4,5). מצאו את סכום המכפלות ומכפלת הסכומים המינימלית:
​4 - מפות קרנו ושהייה 2026-05-25 08.48.57.excalidraw.svg
נתחיל מהמינטרם ונרשום את כל הגורמים הראשוניים: x′z′,y′x'z',y'x′z′,y′, נכניס את כל ההכרחיים לביטוי ואז נקבל כי כיסינו את fff כך:

f(x,y,z)=x′z′+y′f(x,y,z)=x'z'+y'f(x,y,z)=x′z′+y′

באותו הדרך, במכפלת סכומים נקבל:

f(x,y,z)=(z′+y′)(y′+x′)f(x,y,z)=(z'+y')(y'+x')f(x,y,z)=(z′+y′)(y′+x′)

נצמצם כעת את הפונקציה הבאה: f(w,x,y,z)=∑(0,1,2,4,5,7,10,11,14,15)f(w,x,y,z)=\sum(0,1,2,4,5,7,10,11,14,15)f(w,x,y,z)=∑(0,1,2,4,5,7,10,11,14,15) ונמצא את כל הכיסויים המינימליים כסכום מכפלות.

PI:    w‾xz,xyz,w‾  ⁣x‾  ⁣z‾,x‾yz‾,wyEPI:    w‾  ⁣y‾\begin{align*} PI: \;\;& \overline{w}xz,xyz,\overline{w}\ \!\overline{x}\ \!\overline{z},\overline{x}y\overline{z},wy \\ EPI: \;\;& \overline{w}\ \! \overline{y} \end{align*}PI:EPI:​wxz,xyz,w x z,xyz,wyw y​​

כעת נוכל לכסות את המפה ונקבל את הפונקציות הבאות:
[להשלים אחרי התרגול[שקף 16]]

תרגיל

נתונה הפונקציה: f(w,x,y,z)=x(w+y)+z+x‾(y‾+wz‾)f(w,x,y,z)=x(w+y)+z+\overline{x}(\overline{y}+w\overline{z})f(w,x,y,z)=x(w+y)+z+x(y​+wz).
מצאו ביטוי מינימלי ל-f‾\overline{f}f​.

נפתח סוגריים:

f(w,x,y,z)=xw+xy+z+x‾  ⁣y‾+x‾wz‾f(w,x,y,z)=xw+xy+z+\overline{x}\ \!\overline{y}+\overline{x}w\overline{z}f(w,x,y,z)=xw+xy+z+x y​+xwz

כעת, נציב במפת קרנו ונבחר את האפסים כאחדים :)
​4 - מפות קרנו ושהייה 2026-05-25 09.00.27.excalidraw.svg

הגדרה 4 (צירופי ברירה - ∅\varnothing∅)

צירופים שבהם הפונקציה אינה מוגדרת וניתן להגדירם כ-000 או 111 כרצוננו.

אם נכסה צירוף ברירה תתקבל בסוף הליך צמצום הפונקציה שונה מאשר אם לא היינו מכסים אותו, אך שתי הפונקציות נכונות. כלומר, שתיהן מייצגות נכון את הצירופים שבהם הפונקציה מוגדרת.

תרגיל

מצאו ביטוי מינימלי לפונקציה:

f(w,x,y,z)=∑(1,4,5,12)+∑∅(0,3,8,15)f(w,x,y,z)=\sum(1,4,5,12)+\sum_{\varnothing}(0,3,8,15)f(w,x,y,z)=∑(1,4,5,12)+∅∑​(0,3,8,15)

​4 - מפות קרנו ושהייה 2026-05-25 09.06.27.excalidraw.svg
נבחר ששני צירופי הברירה העליונים יהיו 111 בעוד ששני התחתונים יהיו 000 כדי שנוכל לצמצם הכי טוב שאפשר:
​4 - מפות קרנו ושהייה 2026-05-25 09.08.05.excalidraw.svg

f(w,x,y,z)=y‾  ⁣z‾+w‾  ⁣y‾=∑(0,1,4,5,8,12)f(w,x,y,z)=\overline{y}\ \!\overline{z}+\overline{w}\ \! \overline{y}=\sum(0,1,4,5,8,12)f(w,x,y,z)=y​ z+w y​=∑(0,1,4,5,8,12)
תרגיל (אביב 2017 א')

נתון הרכיב הצירופי הבא:
​4 - מפות קרנו ושהייה 2026-05-25 09.14.03.excalidraw.svg
ל-f1f_{1}f1​ 4 כניסות ויציאה אחת. נתון שהמוצא של הרכיב f1f_{1}f1​ יהיה 111 אם ורק אם בכניסות שלו יהיו לפחות 333 אחדים.
מהו הייצוג המינימלי של f1f_{1}f1​ כסכום מכפלות עבור הרכיב הספציפי הזה?

נבנה מפת קרנו של האירוע הזה:
​4 - מפות קרנו ושהייה 2026-05-25 09.10.24.excalidraw.svg

נשים לב כי החוט של www זהה לחוט של xxx ולכן הם תמיד יהיו שווים. לכן, לא איכפת לנו מה יקרה אם הם שונים כי זה בחיים לא יקרה ולכן שמנו שם צירוף ברירה.

PI:  xz,wz,wy,xyPI:\; xz,wz,wy,xyPI:xz,wz,wy,xy

אין גורם הכרחי שכן כל 1 מכוסה לפחות על ידי שני ריבועים. לכן, נבנה 4 פונקציות:

f1=xz+wyf2=xz+xyf3=wz+wyf4=wz+xy\begin{matrix} f_{1}=xz+wy \\ f_{2}=xz+xy \\ f_{3}=wz+wy \\ f_{4}=wz+xy \end{matrix}f1​=xz+wyf2​=xz+xyf3​=wz+wyf4​=wz+xy​

אלו כלון ייצוג של f1f_{1}f1​ לאור צירופי הברירה, שכן אנו יכולים לבחור שהם 0 ו-1 מתי שאנו רוצים.

זמני שהייה של שערים לוגיים

שערים לוגיים הם רכיב פיזי ויש להם דיליי אופייני שאפשר לחשב.

הגדרה 5 (tCDt_{\tiny CD}tCD​)

הזמן מתחילת ביצוע שינוי בכניסה במהלכו מובטח כי היציאה אינה משנה את ערכה הלוגי.

ההגדרה הזו היא קצת הזיה, אז בואו נסתכל על מה הולך.
מרגע שהגענו ל-VIHV_{IH}VIH​ ישנו שינוי שמתרחש בשער וזאת עד שנגיע ל-VILV_{IL}VIL​.
tCDt_{CD}tCD​ מדבר על הזמן בין הרגע שהקלט מתחיל להשתנות לרגע שהפלט מתחיל להשתנות

הגדרה 6 (tPDt_{PD}tPD​)

הזמן מרגע סיום ביצוע השינוי בכניסה שלאחריו מובטח כי היציאה התייצבה על ערכה הלוגי הסופי.

tPDt_{PD}tPD​ מדבר על הזמן מרגע שהפלט מתחיל להשתנות ועד שהוא מתייצב בערכו הסופי.
​תרגול ספרתיות מפות קרנו 4.png

דוגמה

נניח יש לנו שער NANDNANDNAND עם tcd=5ns,tpd=10nst_{cd}=5ns, t_{pd}=10nstcd​=5ns,tpd​=10ns.
​תרגול ספרתיות מפות קרנו 5.png

סוגים של זמני שהייה

אנחנו מבדילים בין tpdLH,tpdHLt_{pdLH},t_{pdHL}tpdLH​,tpdHL​ שכן הזמן השהייה בין 000 ל-111 שונה מזמן השהייה בין 111 ל-000.
בנוסף יש glitchglitchglitch-ים מדי פעם והם מסומנים tpdHH,tpdLLt_{pdHH},t_{pdLL}tpdHH​,tpdLL​.

tpd,H=max⁡{tpdLH,tpdHH}tpd,L=max⁡{tpdHL,tpdLL}tpd=max⁡{tpdL,tpdH}\begin{matrix} t_{pd,H}=\max\left\{ t_{pdLH},t_{pdHH} \right\} \\ t_{pd,L}=\max\left\{ t_{pdHL},t_{pdLL} \right\} \\ t_{pd}=\max\left\{ t_{pdL},t_{pdH} \right\} \end{matrix}tpd,H​=max{tpdLH​,tpdHH​}tpd,L​=max{tpdHL​,tpdLL​}tpd​=max{tpdL​,tpdH​}​
דוגמה

אנו מעוניינים לחשב tpdHLt_{pdHL}tpdHL​ עבור המסלול הבא:
​תרגול ספרתיות מפות קרנו 6.png
כלומר, אנו מעוניינים לחשב את tpdt_{pd}tpd​ כאשר היציאה עוברת מגבוה לנמוך.
שער 3 הוא שער NANDNANDNAND שכניסותיו זהות. לכן, כשאנו עוברים מ-HHH ל-LLL בפלט אנו נדרש שקלט יעבור מ-LLL ל-HHH.
באותו האופן, השער השני הוא OROROR ולכן, שתי כניסותיו יעברו מ-LLL ל-HHH שכן הן זהות.
השער הראשון הוא NOTNOTNOT ולכן כניסותיו יעברו מ-HHH ל-LLL.
נתונה הטבלה הבאה לפיה נחשב:

tpdLHtpdHLNOT35OR42NAND34\begin{array}{|c|c|c|} \hline & t_{pdLH} & t_{pdHL} \\ \hline NOT & 3 & 5 \\ OR & 4 & 2 \\ NAND & 3 & 4 \\ \hline \end{array}NOTORNAND​tpdLH​343​tpdHL​524​​ tpdHL(0→3)=tpdHL(NAND)+tpdLH(OR)+tpdLH(NOT)=4+4+3=11nst_{pdHL}(0\to 3)=t_{pdHL}(NAND)+t_{pdLH}(OR)+t_{pdLH}(NOT)=4+4+3=11 nstpdHL​(0→3)=tpdHL​(NAND)+tpdLH​(OR)+tpdLH​(NOT)=4+4+3=11ns

כעת, אנו מעוניינים לחשב את tpdt_{pd}tpd​. לשם כך נדרש לחשב את tpdLHt_{pdLH}tpdLH​.

tpdLH(0→3)=tpdLH(NAND)+tpdHL(OR)+tpdHL(NOT)=3+2+5=10nst_{pdLH}(0\to{3})=t_{pdLH}(NAND)+t_{pdHL}(OR)+t_{pdHL}(NOT)=3+2+5=10nstpdLH​(0→3)=tpdLH​(NAND)+tpdHL​(OR)+tpdHL​(NOT)=3+2+5=10ns tpd=max⁡{11ns,10ns}=11nst_{pd}=\max\left\{ 11ns,10ns \right\}=11nstpd​=max{11ns,10ns}=11ns
תרגיל

מצאו ביטוי ל-tpd(Z→Q)t_{pd}(Z\to Q)tpd​(Z→Q) בהנחה שרק כניסה ZZZ משתנה.
קבעו מהו ערכן של שאר הכניסות Y,XY,XY,X שגורמות לשינוי במוצא QQQ.
​תרגול ספרתיות מפות קרנו 7.png

כדי לנעול את ה-OROROR ואת ה-NANDNANDNAND כדי שרק ZZZ ישפיע עליהם נקבע X=0,Y=1X=0,Y=1X=0,Y=1.
כעת נתחיל מ-LHLHLH שבשבילו הכניסה של OROROR תבצע שינוי LHLHLH ב-NANDNANDNAND יתבצע שינוי LHLHLH וב-NOTNOTNOT יתבצע HLHLHL ואז:

tpdLH(Z→Q)−tpdLH(OR)+tpdLH(NAND)+tpdHL(NOT)t_{pdLH}(Z\to Q)-t_{pdLH}(OR)+t_{pdLH}(NAND)+t_{pdHL}(NOT)tpdLH​(Z→Q)−tpdLH​(OR)+tpdLH​(NAND)+tpdHL​(NOT)

באותו האופן נחשב את tpdHLt_{pdHL}tpdHL​ ואז נמצא באמצעות מקסימום.

תרגיל

מצאו ביטוי ל-tpdHL(X→Q)t_{pdHL}(X\to Q)tpdHL​(X→Q) וביטוי ל-tpdLH(X→Q)t_{pdLH}(X\to Q)tpdLH​(X→Q)
​תרגול ספרתיות מפות קרנו 8.png

נשים לב כי בסוף הפלט הוא xxx שכן x‾‾=x\overline{\overline{x}}=xx=x.
כאשר אנו משנים את XXX מ-000 ל-111 הפלט יתעדכן ישר כש-XXX יפגע בו שכן זה שער OROROR. לכן:

tpdLH=tpdLH(OR)t_{pdLH}=t_{pdLH}(OR)tpdLH​=tpdLH​(OR)

בצד השני זה לא כזה פשוט, שכן השערים צריכים להתהפך כדי שב-OROROR לא יהיה 1 מהצד של ה-NOTNOTNOT.

tpdHL=tpdLH(NOT)+tpdHL(NOT)+tpdHL(OR)t_{pdHL}=t_{pdLH}(NOT)+t_{pdHL}(NOT)+t_{pdHL}(OR)tpdHL​=tpdLH​(NOT)+tpdHL​(NOT)+tpdHL​(OR)

זמן שהייה של פונקציה צירופית

הגדרה 7

זמן השהיה של כניסה x0x_{0}x0​ הוא הזמן שנדרש מרגע שכניסה זו משתנה ועד שמוצא המערכת משתנה.
זאת כאשר שאר הכניסות קבועות.

  • זמן ההשהיה תלוי במימוש הפונקציה
  • יתכן זמן השהיה שונה מכניסה מסויימת למוצא בהתאם לערך ביתר הכניסות
  • יתכן שעבור ערכים בכניסות האחרות, כניסה x0x_{0}x0​ לא תשנה את המוצא.

זמני ההשהיה מכניסה מסויימת נקבעים לפי המקרה הגרוע ביותר.
אנו נשתמש במפת קרנו כדי לראות אילו ערכים צריכים להיות ביתר הכניסות כדי ששינוי יתרחש.
​תרגול ספרתיות מפות קרנו 9.5.png

תרגיל

נתונות הפונקציות הלוגיות הבאות:

S=x⊕y⊕CiS=x \oplus y \oplus C_{i}S=x⊕y⊕Ci​ C0=xy+xCi+yCiC_{0}=xy+xC_{i}+yC_{i}C0​=xy+xCi​+yCi​

השתמשו בשערים הבאים למימוש המעגל:

tpdLHtpdHL2 input AND15202 input OR22222 input XOR3023\begin{array}{|c|c|c|} \hline & t_{pdLH} & t_{pdHL} \\ \hline \text{2 input AND} & 15 & 20 \\ \text{2 input OR} & 22 & 22 \\ \text{2 input XOR} & 30 & 23 \\ \hline \end{array}2 input AND2 input OR2 input XOR​tpdLH​152230​tpdHL​202223​​

​תרגול ספרתיות מפות קרנו 10.png

נתחיל בלחפש Ci→CoutC_{i}\to C_{out}Ci​→Cout​.
מה אנחנו רואים כשאנו מסתכים על המעגל הזה?

  • השער OROROR לא איכפת לנו איזה שינוי הוא עושה.
  • ישנה סימטריה בין xxx ל-yyy.

ננחש ש-tpd(Ci→C0)=tpdHL(AND)+2tpd(OR)=64nst_{pd}(C_{i}\to C_{0})=t_{pdHL}(AND)+2t_{pd}(OR)=64 nstpd​(Ci​→C0​)=tpdHL​(AND)+2tpd​(OR)=64ns.
איך אנו יודעים שזה מסלול חוקי? נבחר x=0x=0x=0 ואז כיבינו את u2u_{2}u2​. נשים y=1y=1y=1 ואז נקבל בדיוק את המסלול שרצינו.
זה המקרה הגרוע שניחשנו והוא קיים ולכן אין צורך לבדוק עוד אפשרויות.

נותר לנו לעשות Ci→SC_{i}\to SCi​→S.

  • אין לנו הרבה חופש בחירה
  • זה חייב לעבור דרך שער XORXORXOR.
  • ה-XORXORXOR המסומן u6u_{6}u6​ לא משנה כלל כאשר CiC_{i}Ci​ משתנה שכן אין הוא תלוי בו.

ננחש את ה-XORLHXOR_{LH}XORLH​ ואז: tpd(Ci→S)=tpdLH(XOR)=30nst_{pd}(C_{i}\to S)=t_{pdLH}(XOR)=30nstpd​(Ci​→S)=tpdLH​(XOR)=30ns
המסלול הזה מתקיים כאשר x=y=0x=y=0x=y=0 ואז u6u_{6}u6​ מחזיר 000.
אזי בהתחלה היו לנו 000 בשתי הכניסות של u7u_{7}u7​ ואז שינינו את CiC_{i}Ci​ ל-111 ולכן גם u7u_{7}u7​ ישתנה.

כעת נדרש לבדוק גם כן עבור x,yx,yx,y. - נבדוק רק עבור xxx שכן x,yx,yx,y סימטריים לחלוטין.

tpd(x→S)=2tpdLH(XOR)=60nst_{pd}(x\to S)=2t_{pdLH}(XOR)=60nstpd​(x→S)=2tpdLH​(XOR)=60ns tpd(x→C0)=tpd(Ci→C0)=64nst_{pd}(x\to C_{0})=t_{pd}(C_{i}\to C_{0})=64nstpd​(x→C0​)=tpd​(Ci​→C0​)=64ns
תרגיל

ממשו את הפונקציה הלוגית בעזרת שערי NANDNANDNAND עם 2 כניסות בלבד.

C0=xy+xCi+yCiC_{0}=xy+xC_{i}+yC_{i}C0​=xy+xCi​+yCi​
=xy‾⋅xCi‾‾+yCi=xy‾⋅xCi‾‾‾⋅yCi‾‾=\overline{\overline{xy}\cdot \overline{xC_{i}}}+yC_{i}=\overline{\overline{\overline{\overline{xy}\cdot \overline{xC_{i}}}}\cdot \overline{yC_{i}}}=xy​⋅xCi​​​+yCi​=xy​⋅xCi​​​​⋅yCi​​​ D=NAND(NAND(x,y),NAND(x,Ci))D=NAND(NAND(x,y),NAND(x,C_{i}))D=NAND(NAND(x,y),NAND(x,Ci​)) NOT(D)=NAND(D,D)NOT(D)=NAND(D,D)NOT(D)=NAND(D,D) C0=NAND(NOT(D),NAND(y,Ci))C_{0}=NAND(NOT(D),NAND(y,C_{i}))C0​=NAND(NOT(D),NAND(y,Ci​))
תרגיל

ממשו את הפונקציה הלוגית בעזרת שערי NANDNANDNAND עם 2 כניסות בלבד.

S=x⊕y⊕Ci=XOR(XOR(X,Y),Ci)S=x \oplus y \oplus C_{i}=XOR(XOR(X,Y),C_{i})S=x⊕y⊕Ci​=XOR(XOR(X,Y),Ci​)
XOR(a,b)=a‾b+b‾a=aa‾+ab‾+a‾b+bb‾=a(a‾+b‾)+b‾(a+b)=a(a‾+b‾)+b‾(a+b)‾‾XOR(a,b)=\overline{a}b+\overline{b}a=a\overline{a}+a\overline{b}+\overline{a}b+b\overline{b}=a(\overline{a}+\overline{b})+\overline{b}(a+b)=\overline{\overline{a(\overline{a}+\overline{b})+\overline{b}(a+b)}}XOR(a,b)=ab+ba=aa+ab+ab+bb=a(a+b)+b(a+b)=a(a+b)+b(a+b)​​ =a(a‾+b‾)‾‾‾⋅b⋅(a‾+b‾)‾‾‾‾=a⋅a⋅b‾‾⋅b⋅a⋅b‾‾‾=\overline{\overline{a\overline{\overline{(\overline{a}+\overline{b})}}}\cdot \overline{b\cdot \overline{\overline{(\overline{a}+\overline{b})}}}}=\overline{\overline{a\cdot \overline{a\cdot b}}\cdot \overline{b\cdot \overline{a\cdot b}}}=a(a+b)​​​⋅b⋅(a+b)​​​​=a⋅a⋅b⋅b⋅a⋅b S=NAND(NAND(a,NAND(a,b)),NAND(b,NAND(a,b)))S=NAND(NAND(a,NAND(a,b)), NAND(b, NAND(a,b)))S=NAND(NAND(a,NAND(a,b)),NAND(b,NAND(a,b)))