僅使用與門的BCD到十進(jìn)制解碼器創(chuàng)建一個電路
介紹
這個項目的想法是在我完成數(shù)字電子課的一個實驗時產(chǎn)生的。目標(biāo)是創(chuàng)建一個電路,使用開關(guān)將4位二進(jìn)制數(shù)作為輸入,并將其作為等效的十六進(jìn)制數(shù)輸出到七段顯示器上。使用Quartus,我們將邏輯門電路編程到FPGA(現(xiàn)場可編程門陣列)上。
為一個看似簡單的電路編程,同時了解其設(shè)計背后的復(fù)雜過程和潛在的二進(jìn)制運(yùn)算,這是一件令人著迷的事情。
我決定承擔(dān)一個更具挑戰(zhàn)性的項目,這需要更深入的思考和仔細(xì)的計劃。有兩個想法閃過我的腦海:
?而不是輸出只有一個7段顯示,使用兩個代替
?在設(shè)計中限制門的類型為NAND門
為了降低成本,我選擇使用物理NAND門集成電路而不是FPGA,后者的成本通常在150美元左右。
我對額外的挑戰(zhàn)很滿意。因此,我的目標(biāo)是創(chuàng)建一個電路,接受4位二進(jìn)制輸入,并僅使用NAND門輸出等效的十進(jìn)制數(shù)。
Ben Eater關(guān)于設(shè)計7段解碼器的視頻是另一個靈感來源。
設(shè)計過程
我計劃使用的7段顯示是一個共同的陽極,這是有效的低。
活動低電平意味著邏輯低電平輸入激活相應(yīng)的段。如果我想打開“a”段,則需要將低電壓(約0V)應(yīng)用于“a”引腳。
創(chuàng)建真值表有助于理解哪些輸入組合對應(yīng)于輸出。
作為參考,表中的1表示邏輯級別高,0表示邏輯級別低。
真值表
輸出中的前七列表示七段顯示中的一位,而后七列對應(yīng)于十位。
對于輸入部分,每行對應(yīng)一個等效的十進(jìn)制數(shù)。
例如,二進(jìn)制輸入0111轉(zhuǎn)換為十進(jìn)制數(shù)7,如真值表中突出顯示的部分所示。所以,七段顯示看起來是這樣的。
7段顯示數(shù)字7
對于二進(jìn)制輸入0111,第一個數(shù)字需要段a、b和c亮起,因此需要一個低邏輯電平(0)來激活這些段。這可以從真值表中看出。
因此,為了將這些輸入和輸出組合轉(zhuǎn)換成電路,使用了k映射和布爾方程。
K映射是一種將真值表的輸入和輸出組合轉(zhuǎn)換為簡化形式的布爾方程的方法。
然后,布爾方程可以用不同的邏輯門轉(zhuǎn)換成電路。
例如,讓我們關(guān)注E1列。
E1的K映射是這樣的。
“AB”下最左邊的值是輸入AB的不同組合。“A”值是第一個數(shù)字,而“B”值是第二個數(shù)字。同樣的事情也發(fā)生在“CD”右側(cè)上方的值上?!癈”值是第一個數(shù)字,“D”值是第二個數(shù)字。
使用真值表時,只要E1列中有1,就會在K Map的相應(yīng)框中填充一個“1”。例如,輸入0001,輸出是1,其中K映射的第一行和第二列框中有一個1。
下一步是把這些“1”分成2、4或8組。這些基團(tuán)之間可能有一些重疊,看起來像這樣。
利用這些群,可以形成布爾方程。
從紅色組開始,當(dāng)看AB列時,“1”不移到另一行。這些1留在01行。這意味著A和B保持不變。當(dāng)查看CD行時,‘1’從‘00’列移動到‘01’列。移動列時唯一改變的是最后一個數(shù)字(D)從0變?yōu)?。這意味著C保持不變,但D改變了。
A保持0。B保持1。C保持0。
我們可以將變量B保持為布爾形式,因為它的值為1。
但是為了用布爾形式表示變量‘A’,它被表示為‘ā’以表示它的值為0。對于變量C也是一樣。
紅色組表示的布爾項是āBC。注意,這一項只包括不變的變量。D不是這一項的一部分。
有了最終的布爾方程E1 = āBC′s + D + ABC,我們可以進(jìn)一步簡化它,使其更容易轉(zhuǎn)換為NAND門電路。使用雙補(bǔ)語和德摩根定理就可以做到這一點。
第二個方程顯示了一個雙補(bǔ)。這個技巧被用來幫助建立第三個方程,它使用了德摩根定理。這個定理改變了乘法的加法,打破了第一個補(bǔ)。
這個方程現(xiàn)在是一個很容易使用NAND門的形式。所以最終的電路看起來是這樣的。
具有3個輸入非與門的E1電路
然后,為了將3個輸入NAND門變?yōu)?個輸入NAND門,使用De Morgan定理將3項變量分解為2項或更少的組。我已經(jīng)分配了單獨的變量(F, G和H),以便更容易理解。
簡化布爾項
然后將E1處的最后3個輸入NAND門分解,將方程變換為:
E1的最終布爾方程
然后使用這些NAND等效的OR門和NOT門:
與非門
非門等效
或門等效
從真值表到電路的過程在7段顯示器的每個引腳上重復(fù)。下面是在Quartus上為每個引腳設(shè)計的其他最終電路。
A1引腳電路
B1引腳電路
C1引腳電路
引腳D1電路
E1引腳電路
F1引腳電路
G1引腳電路
引腳B2和C2的電路
所有其他引腳(A2, D2, E2等)都連接到高邏輯電平輸出,因為這些引腳保持關(guān)閉狀態(tài)。它們不需要任何帶NAND門的電路。
使用這些電路,總共需要157個NAND門。
TinkerCAD電路也用于在面包板上構(gòu)建電路,因此我可以在稍后的構(gòu)建過程中輕松地復(fù)制它們。該軟件沒有單獨的NAND門組件,但它有這些稱為ic(集成電路)的黑色塊,這些特定的ic有4個帶有這些引腳的NAND門,如下所示。
這是我在TinkerCAD中為A1電路構(gòu)建的電路。四個開關(guān)對應(yīng)四個位(ABCD),并連接到其右側(cè)的NAND門。NAND門作為四個非門產(chǎn)生相反的輸出(它是產(chǎn)生ā B′C′和D′的那些)
左邊的兩個面包板是輸出和對應(yīng)輸出的軌道。然后連接到右邊的非與門,但是它顯示在引腳A1的電路的前面的圖中。這條軌道也將被所有其他電路使用。
為了驗證設(shè)置,將LED連接到輸出端。對輸入組合(ABCD)進(jìn)行測試,并將結(jié)果與A1列的真值表進(jìn)行比較。如果所有的組合都符合LED打開和關(guān)閉的時間,則設(shè)置良好。
在所有其他電路中重復(fù)了這一模擬。
在模擬并確認(rèn)每個電路產(chǎn)生正確的輸出后,我開始構(gòu)建過程。
構(gòu)建過程
我使用的NAND門IC是TI SN74HC00N。它是一個具有4個NAND門的IC,與模擬中的引腳相同。
每個IC包含4個NAND門,該項目需要40個IC,成本約為25美元。
該項目需要多個面包板和大量的電線。為了降低成本,我重新利用了我爸爸到處放著的5類電纜,剪斷并解開電線,這被證明是一項耗時的任務(wù)。
每個電路都是根據(jù)TinkderCad電路模擬構(gòu)建的,并且在末端附加了一個LED,以確保產(chǎn)生正確的輸出,并與真值表進(jìn)行檢查。
在每一個電路確認(rèn)工作后,我把它安全地放在一邊,開始另一個電路的工作。在每個電路建成后,所有電路都連接在一起,并連接到適當(dāng)?shù)囊_上,以連接七段顯示器。
在這個項目結(jié)束時,這是最終的結(jié)果:
最終的想法
最難完成的任務(wù)之一是調(diào)試LED輸出與真值表不匹配的情況。一開始很令人沮喪,但慢慢地,我花時間仔細(xì)檢查每根電線和每個引腳,確保每個電路都成功。
這個項目的另一個困難部分是在建造過程中失去動力。我的一部分只是想買電線,這樣我就不必花額外的時間切割,解開和剝離第5類電線,但只要一步一步地推進(jìn)這個過程,就能幫助我到達(dá)終點。
但我在這個項目中最大的樂趣肯定是在設(shè)計過程中。我喜歡用不同的工具和方法解決一個難題,從a點到b點。這個問題在一天內(nèi)可以解決的地方不太容易,但在看起來不可能解決的地方也不太難。這是一種合適的難度,足夠具有挑戰(zhàn)性,它要求我確保一切都是正確的。
最后,我很高興我完成了這個項目。這個項目讓我意識到我們今天使用的技術(shù)的復(fù)雜性,以及對這些硬件和不斷開發(fā)和改進(jìn)這些東西的人的贊賞。
在整個項目中,我在設(shè)計、構(gòu)建和測試階段學(xué)到了很多東西。此外,能夠很好地記錄它對我來說是一個巨大的學(xué)習(xí)曲線。我知道在寫文件的過程中我可以做很多改進(jìn),比如簡化一些解釋,在構(gòu)建過程中使用合適的圖片,編寫吸引人的材料等等。但我希望不斷進(jìn)步,不斷學(xué)習(xí),保持好奇心。
現(xiàn)在我只需要找個地方放這東西。
本文編譯自hackster.io