日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用加法器构造能够实现连续加法的电路

發布時間:2025/4/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用加法器构造能够实现连续加法的电路 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 構造實現連續加法的電路
      • 1.1 構造實現連續加法的電路
      • 1.2 對連續加法的電路進行優化
      • 1.3 解決先后問題

有了前面搭建得各分立元器件,就可以開始組裝我們自己的CPU了!

1 構造實現連續加法的電路

1.1 構造實現連續加法的電路

我們先來看一下我們之前構造的8位加法器:

如果我們現在要計算10+8+6+4的和,對于中間結果需要我們手動保存:

能不能讓加法器自己記住這個中間結果,并使其自動的參與和下一個加數的運算呢?這樣的話,肯定需要將加法的結果與輸入相連,我們為了從同一總線獲得兩個加數,我們需要做出如下改進:

這樣的話兩個加數就可以依次輸入,輸入第一個加數時,我們按一下KRA這樣第一個加數就被存儲到RA寄存器中,然后輸入第二個加數,即可得到加法的結果。

我們將加法器的輸出反饋到加法器的加數輸入:


我們觀察上面的電路會發現存在兩個問題:

  • 加法的輸出結果直接接到輸入值,會造成不斷進行加法,加法的值越來越大。
  • 加法的輸出值和加數輸入值接到一起,會造成總線沖突。
  • 我們對電路做出如下改進:

    我們增加了一個寄存器TR和兩個多路繼電器GA、GB。我們可以通過如下方式進行計算10+8+6的值:

  • 輸入加數10,按下KGA不松,按下KRA,松開KGA(這就將第1個加數進行了輸入)。
  • 輸入加數8,按下KGA不松,這時候加法器將輸出10+8=18,我們按下KTR鎖存加法值,松開KGA,按下KGB不松開,按下KRA將18鎖存,松開KGB。
  • 輸入加數6,按下KGA不松,這個時候得到18+6的值24,按下KTR,鎖存結果,松開KGA。
  • 其實我們可以將上面的操作分解為如下3個基本動作:

    • 加載:其實就是輸入第一個加數(KGA-KRA)。
    • 相加:其實就是輸入下一個加數,然后和上一個加數進行相加,并將結果存儲起來(KGA-KTR)。
    • 記憶:其實就是將中間結果鎖存在加法器上面的輸入端,以備參與下次的運算(KGB-KRA)。

    1.2 對連續加法的電路進行優化

    優化的電路如下:

    對于上述電路分析如下:
    對于加載來說,當K加載為1、K1為1時,GA和RA輸出1,但是我們需要保證GA先輸出1,然后RA再輸出1,這部分電路的搭建放到后面再進行介紹。同樣,相加、記憶中也存在同樣的先后問題。

    對于計算10+9+8+7+6+5我們需要進行如下操作:

  • 加載10。
  • 相加10+9。
  • 記憶19。
  • 相加19+8。
  • 記憶27。
  • 相加27+7。
  • 記憶34。
  • 相加34+6。
  • 記憶40。
  • 相加40+5。
  • 我們可以發現前兩個數的相加并沒有節省計算步驟,但是從第4步往后,我們只需要分別點擊K0、K1就可完成計算。

    1.3 解決先后問題

    改進后的電路如下:

    我們先大致看一下都有哪些改動,因為我們做加法運算的大部分操作,就是不斷地點擊K0和K1。而這些操作,在本質上就是1在它倆之間不斷地循環。這樣,我們就很容易想到,我們之前所學的循環移位寄存器。所以,我們使用了一個有兩個輸出的上升沿觸發的循環移位寄存器RR來代替K0和K1這兩個開關,來給譯碼器提供輸入。并且,在初始狀態下,K0=1,K1=0。

    我們每觸發一次RR,它們的值就會進行一次交替,而觸發信號是由按鍵K來產生的,并且它們之間還加了一個非門。然后,譯碼器的每個和寄存器相連的輸出端都要和按鍵K的另一路輸出進行與運算。

    現在,我們就來演示一下改造后的電路是如何工作的,它又是如何幫我們解決先后問題的:

    首先在加數端口輸入第一個加數。然后,閉合K加載,這時,由于K0=1,所以IGA=1、IRA=1,傳輸門GA打開,數據被傳送到了RA的門口,但是RA沒有被觸發,因為IRA要和K的另一路輸出進行與運算。我們可以發現,我們只是閉合了K加載,傳輸門GA就被打開了。關鍵點在于,我們之前需要按下K0開關才能使K0的值=1,而現在,K0的值默認就=1。所以,我們不再需要手動的去設置它的值,只要閉合K加載就可以了。

    那為什么RA沒有被觸發呢?因為,雖然IRA=1,但是它需要和K的另一路輸出做與運算。而我們并沒有按下按鍵K,只是閉合了K加載而已,所以它不會被觸發。

    接下來,我們按下按鍵K,隨著K的接通,將同時產生兩路脈沖。第一路通過非門到達循環移位寄存器,但是非門將上升沿變成了下降沿,所以,循環移位寄存器并沒有被觸發。所以,譯碼器將保持原來的輸出,不會發生變化。與此同時,另一路脈沖被送到了與IRA相連的與門,結果就是RA從0變成了1,產生了一個上升沿,寄存器RA被觸發第一個加數就被加載到了加法器中。

    然后,當我們松開K按鍵時,會產生一個下降沿,而這個下降沿通過非門后變成了一個上升沿,RR被觸發,這時K0變成了0、K1變成了1,這時,譯碼器所有的輸出都=0。

    我們通過閉合K加載,來打開傳輸門,通過按下K按鍵,來觸發寄存器。這樣,我們就解決了先后的問題。同時大家要注意RR循環移位寄存器被觸發的時間,它是在K按鍵被松開的時候觸發的。

    盡管現在我們已經完成了加載操作,但是我們需要再按一次按鍵K。按下的時候,第一路輸出不會觸發RR寄存器。第二路輸出,因為譯碼器的輸出全部是0,所以也不會觸發任何一個寄存器。也就是說,在按下的時候,并不會產生任何作用。而松開的時候,會觸發RR,使得K0=1、K1=0,這也是我們的目的所在:使RR回到初始狀態。因為,我們的下一步是相加,而相加操作時,K0的值為1。

    總結來說加載操作是這樣的,閉合K加載,然后點兩下K。這樣不但完成了加載操作,同時還為下一步的相加操作做好了準備。

    接著,我們開始執行相加操作。首先在加數端口輸入第二個加數。然后,斷開K加載,閉合K相加,這時,由于K0=1,所以,IGA=1、ITR=1,傳輸門GA打開,數據進入加法器并和第一個數進行相加,并且結果被送到了TR門口。但是TR沒有被觸發,因為ITR還需要和按鍵K的另一路輸出進行與運算。現在,按下按鍵K,因為非門的存在,所以RR沒有被觸發。但是,按鍵K的另一路脈沖和ITR做與運算,結果就是TR從0變成了1,產生一個上升沿,TR被觸發,相加的結果被存儲在TR寄存器中。

    接著,松開按鍵K,RR被觸發,于是,K0=0、K1=1。這就為記憶的操作提前做好了準備。

    現在,我們開始執行記憶操作。因為K相加已經是閉合狀態,所以我們不需要再去改動它,而且K1已經=1了。所以這時,傳輸門GB打開,中間結果被傳送到了RA的門口。然后我們按下按鍵K,因為非門的存在,所以RR依然沒有被觸發。但是,RA被觸發,因為按鍵K的第二路輸出和IRA做與運算被觸發后,RA將中間結果存儲在了加法器中。然后松開按鍵K,RR被觸發,使得K0=1、K1=0,RR又重新回到了最初始的狀態,為下一次相加操作做好了準備。

    現在,我們的操作就變成了這樣。閉合K加載、點2下K,完成第一個加數的加載。斷開K加載、閉合K相加、點兩下K,完成第二個加數相加和記憶。

    這時,K相加是閉合的,所以,我們不再需要去操作它。直接點兩下K,就完成了第三個數的相加和記憶。再點兩下K,就完成了第四個數的相加和記憶。每點兩下K就完成了對一個數的運算,直到加完最后一個數為止,而最終的結果存儲在RA寄存器中 。

    我們來總結一下這個電路運行的特點:
    第一個特點:
    閉合K加載或者K相加,就會直接打開某一個傳輸門。因為,K0和K1的值不需要我們手動的去設置。而且,與傳輸門相連的輸出端和傳輸門之間是直接連通的。

    第二個特點:
    必須按下K按鍵,寄存器才會被觸發。因為,與寄存器相連的輸出端要和K的輸出進行與運算。所以,不按下K,寄存器是不會被觸發的。

    現在,我們不但解決了先后的問題,而且進一步簡化了操作。因為,K0、K1這兩個開關被K這一個開關取代了,之前,我們需要對K0和K1這兩個開關進行操作,而現在,我們的大部分操作基本上就變成了不斷地輸入加數,然后點擊按鍵K就可以了。


    參考資料:

  • 深度學習:C/C++、計算機體系
  • 總結

    以上是生活随笔為你收集整理的用加法器构造能够实现连续加法的电路的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。