編碼:觸發(fā)器(二)

1 前言

??本文是基于《編碼》腕侄、《穿越計算機的迷霧》兩部著作進(jìn)行讀后整理的記錄性博客。對書中較為重要的內(nèi)容進(jìn)行歸納整理進(jìn)行二次創(chuàng)作,略去了繁瑣的講述細(xì)節(jié)冕杠,力求簡明扼要微姊。


編碼:一種由若干符號和規(guī)則組成的系統(tǒng),用來向計算機表述指令拌汇。

2 正文

2.1 D 型觸發(fā)器

??R-S 觸發(fā)器最突出的特點在于柒桑,它可以記住哪個輸入端的最終狀態(tài)為 1。但是有時候我們需要一種記憶能力更加強大的電路噪舀,例如能記住在某個特定時間點上的一個信號是 0 還是 1魁淳。

我們想在計算機中保存一個比特,但我們會發(fā)現(xiàn)我們的觸發(fā)器有兩個輸出与倡,保存一個比特不需要這么多界逛,因此我們可以將 Q反廢棄不用。



我們的愿望是用觸發(fā)器保存一個比特纺座,一個比特只需要一根電線就可以傳送息拜,對于我們的觸發(fā)器它有兩個輸入端 S 和 R。而且净响,觸發(fā)器要正常工作少欺,離不開這兩個輸入端,要想使 Q = 0馋贤,S 必須為 0赞别,R 必須為 1;要想使 Q = 1配乓,必須使 S = 1 而 R = 0仿滔。
我們可以使用非門使 R 與 S 總是相反,解決觸發(fā)器保存 1 個比特的問題犹芹,如下圖所示崎页。很顯然,因為要想使觸發(fā)器保存一個比特腰埂,就必須使 S 和 R 以相反的方式出現(xiàn)飒焦,所以非門的作用就是創(chuàng)造這樣的條件。



可以發(fā)現(xiàn)屿笼,上述電路雖然可以保存 1 個比特牺荠,但它保存的比特會隨時因為后面?zhèn)魅氲臄?shù)據(jù)而改變,也即上面介紹的方法無法真正保存刁卜,被保存的比特不能夠獨立存在而不受影響志电。
因此我們可以考慮為上述電路添加一個 “控制器”,不保存數(shù)據(jù)時輸入數(shù)據(jù)無影響蛔趴,需要保存數(shù)據(jù)時打開 “門”挑辆,存入數(shù)據(jù),關(guān)上 “門”,后續(xù)輸入的數(shù)據(jù)無法存入除非再次打開 “門”鱼蝉。

??在構(gòu)造具備這種功能的電路之前洒嗤,讓我們先來思考一下它的具體行為。這個電路存在兩個輸入魁亦。其中一個我們稱之為數(shù)據(jù)端(Data)渔隶,用來傳入數(shù)據(jù)。與所有數(shù)字信號一樣洁奈,數(shù)據(jù)端取值為 0 或 1间唉;另一個輸入被稱為保持位(Hold That Bit),保持位的作用就是使當(dāng)前的狀態(tài)被 “記住”利术,通常情況下保持位被設(shè)置為 0呈野,在這種情況下數(shù)據(jù)端對電路不產(chǎn)生影響。當(dāng)保持位置 1 時印叁,數(shù)據(jù)端的值就會在電路系統(tǒng)中被 “記住”被冒。隨后保持位又置為 0,這時電路已經(jīng) “記住” 了數(shù)據(jù)端的最后一次輸入轮蜕,而之后數(shù)據(jù)端的輸入無論如何變化都不會對電路產(chǎn)生影響昨悼。

??我們可以把狀態(tài)轉(zhuǎn)化的過程以真值表的形式表示如下。

??在前兩種情況下跃洛,保持位為 1率触,輸出 Q 與數(shù)據(jù)端輸入相同;后面兩種情況下税课,保持位為 0闲延,輸出端 Q 和其前一個狀態(tài)保持一致痊剖。值得注意的是韩玩,保持位為 0 意味著輸出將不再變化,也就是說不再被數(shù)據(jù)端所影響陆馁,我們可以進(jìn)一步將真值表簡化為如下所示找颓。

??X 表示 “其取值情況與結(jié)果無關(guān)”,只要保持位的值為 0叮贩,那么數(shù)據(jù)位對電路的輸出沒有影響击狮,電路的輸出和其前一個狀態(tài)相同。也即前面提到的 “關(guān)門” 操作益老,不再存入數(shù)據(jù)彪蓬。

??如果使用先前學(xué)過的 R-S 觸發(fā)器來實現(xiàn)這種具有保持位的功能系統(tǒng),那么我們的電路需要在輸入端增加兩個與門捺萌,下圖所給出了該系統(tǒng)的實現(xiàn)電路档冬。

??只要保持位為 0,則置位端對于輸出結(jié)果不會有任何影響。保持位為 0酷誓,那么無論復(fù)位和置位為什么輸出都為 0披坏,傳輸?shù)胶罄m(xù)的電路時對應(yīng)前面介紹的 R = 0,S = 0盐数,Q 和 Q反保持原有狀態(tài)棒拂。而這也保證了觸發(fā)器不被外面的數(shù)據(jù)干擾,繼續(xù)保持原先保存的那個比特玫氢。

??當(dāng)保持位信號為 1 時,這套電路系統(tǒng)就和先前講過的 R-S 觸發(fā)器功能一致涮阔。這時由于上面與門的輸出和復(fù)位端輸入相同,而下面與門的輸出和置位端輸入相同伟阔,所以電路系統(tǒng)的功能和普通的 R-S 觸發(fā)器是一樣的。

??但是我們離目標(biāo)還差一點合搅。我們只想要兩個輸入,而不是三個赌髓,怎么解決這個問題呢?先回憶一下 R-S 觸發(fā)器的功能表:兩個輸入端同時為1是非法的荣倾,要盡量避免鳖孤;而兩個輸入端同時為 0 是無意義的苏揣,因為那種情況下輸出就會保持不變平匈。我們只要將保持位設(shè)置為 0增炭,就完全可以實現(xiàn)相同的功能。

??由此可以總結(jié)出,真正有意義的輸入可以是 S 為 0靡馁,R 為 1 或者是 R 為 0赔嚎,S 為 1 的情形尤误。如果把數(shù)據(jù)端信號看做置位信號,把它取反后的值看做復(fù)位端信號沉馆,我們可以畫出相應(yīng)的電路圖如下所示揖盘。

??可以看出只要保持位為 0憾股,電路輸出就絲毫不受輸入端的影響茴恰。當(dāng)保持位為 1 時,電路反映出數(shù)據(jù)端輸入的值分冈。電路會 “記得” 當(dāng)保持位最后一次置 1 時數(shù)據(jù)端輸入的值,數(shù)據(jù)端的變化對此沒有影響坡椒。例如,數(shù)據(jù)端再置回 0 對輸出將不會產(chǎn)生影響。

??這個電路稱為電平觸發(fā)的 D 型觸發(fā)器梢睛,D(Data)表示數(shù)據(jù)端輸入。所謂電平觸發(fā)是指當(dāng)保持位輸入為某一特定電平(本例中為 “1”)時敷硅,觸發(fā)器才保存數(shù)據(jù)端的輸入值。

D 觸發(fā)器可以用下列符號來代替:



由于 Q反端舍棄不用,這里表示時也可不必畫出輸出線

??通常情況下澡屡,當(dāng)這種電路出現(xiàn)在書中的時候绩蜻,輸入端是不會被標(biāo)記為保持位的辜羊,而是被標(biāo)記為時鐘(clock)。

??通常把數(shù)據(jù)端簡寫為 D昔驱,時鐘端簡寫為 Clk,其功能表如下所示腋颠。

??這個電路也就是所謂的電平觸發(fā)的 D 型鎖存器面睛,它表示電路鎖存住一位數(shù)據(jù)并保持它土涝,以便將來使用。這個電路也可以被稱為 1 位存儲器蜡饵。后續(xù)會介紹如何將多個 1 位存儲器連接起來構(gòu)成多位存儲器巾乳。

??在鎖存器中保存多位值通常是很有用的氨鹏。假如你想用前面介紹的加法器把 3 個 8 位數(shù)相加,可以在開關(guān)的第 1 行中存入第 1 個加數(shù)镣丑,以同樣的方式把第 2 個加數(shù)存入第 2 行,但是必須記下第一次相加的結(jié)果。然后你需要把這個結(jié)果輸入到開關(guān)的一行中遥缕,再把第 3 個加數(shù)輸入到開關(guān)的另一行中单匣。這里介紹也即我們?nèi)粘S嬎愣鄠€數(shù)相加時的操作讽营,例如 1+2+3膜蠢,我們先輸入 1 和 2 再計算 1+2 的結(jié)果算出并記錄下來,再將這個計算結(jié)果輸入并和輸入的 3 相加莉兰。

??實際上不必輸入中間結(jié)果挑围,我們可以在第一次計算之后直接使用它√腔模可以使用鎖存器來解決這個問題杉辙。我們在一個小盒子里布置 8 個鎖存器捶朵,如前所述泡垃,每個鎖存器包括兩個或非門、兩個與門以及一個反相器芜茵。所有的時鐘輸入端都互相連在一起。結(jié)果如下圖所示扑馁。

??這個鎖存器可以一次保存 8 位數(shù)咽笼。上面的 8 個輸入端依次標(biāo)記為 D_0~D_7层宫,下面的 8 個輸出端被標(biāo)記為 Q_0~Q_7。左邊的輸入是時鐘(Clk)物喷,時鐘信號通常為 0较屿。當(dāng)時鐘信號為 1 時辉川,D 端輸入的 8 位值被送到 Q 端輸出。當(dāng)時鐘信號為 0 時,這 8 位值將保持不變,直到時鐘信號再次被置 1澡腾。

??下面是 8 位加法器的圖示喇肋。

??通常,8 個 A 輸入端和 8 個 B 輸入端連接到開關(guān)上登钥,CI(進(jìn)位輸入)接地姿锭,而 8 個 S(計算和)輸出以及 CO(進(jìn)位輸出)端連接到燈泡上忿磅。經(jīng)過改進(jìn)葱她,8 位加法器的 8 個 S 輸出端既與燈泡相連啡氢,又連接到 8 位鎖存器的數(shù)據(jù)(D)輸入端。標(biāo)記為 “保存”(Save)的開關(guān)是鎖存器的時鐘輸入渤涌,用來存放加法器的運算結(jié)果佩谣。

??標(biāo)識為 2-1 選擇器的方塊是讓你用一個開關(guān)來選擇加法器的 B 端輸入是取自第 2 排開關(guān)還是取自鎖存器的 Q 端輸出。當(dāng)開關(guān)閉合時实蓬,就選擇了用 8 位鎖存器的輸出作為 B 端輸入茸俭。

[了解] 2-1 選擇器使用了 8 個如下所示的電路。



如果選擇端(Select)輸入是 1安皱,那么或門的輸出和 B 端的輸入就是一致的调鬓。這是因為上面與門的輸出和 B 端輸入是一樣的,而下面與門的輸出是 0练俐。類似的袖迎,如果選擇端的輸入是 0,那么或門的輸出則和 A 端輸入一致腺晾⊙嘧叮總結(jié)起來如下表所示。


??改進(jìn)后的加法器不能很好地處理進(jìn)位輸出(CO)信號悯蝉。如果兩個數(shù)的相加使得進(jìn)位輸出信號為 1归形,那么當(dāng)下個數(shù)被加進(jìn)來的時候,這個信號將被忽略掉鼻由。一個可能的解決方案是將加法器暇榴、鎖存器厚棵、選擇器均設(shè)置為 16 位寬,或者至少應(yīng)該比你可能遇到的最大的和的位數(shù)多一位蔼紧。這個問題留到后續(xù)部分具體講述婆硬。

??對于加法器來說,一個更好的改進(jìn)方法是去掉一整排 8 個開關(guān)奸例。但是首先要對 D 觸發(fā)器做一些修改彬犯,為它加一個或門和一個稱為清零(Clear)的輸入信號。清零信號通常為 0查吊,但當(dāng)它為 1 時谐区,Q 輸出為 0,如下圖所示逻卖。

??無論其他信號是什么宋列,清零信號總是強制使 Q 輸出為 0,以達(dá)到使觸發(fā)器清零的目的评也。

??也許你還不明白為什么要設(shè)置這個信號炼杖,為什么不能通過把數(shù)據(jù)輸入端置 0 和把時鐘輸入端置 1 來使觸發(fā)器清零呢?這也許是因為我們無法精確控制數(shù)據(jù)端的輸入信息的緣故仇参。我們可能有一組 8 個鎖存器嘹叫,它們連著 8 位加法器的輸出端,如下圖所示诈乒。注意,標(biāo)識為 “相加”(Add)的開關(guān)現(xiàn)在控制著鎖存器的時鐘輸入婆芦。你可能會發(fā)現(xiàn)這個加法器比前面的那個好用怕磨,特別是當(dāng)你需要加上一長串?dāng)?shù)字時。首先按下清零開關(guān)消约,這個操作會使鎖存器的輸出為 0肠鲫,并且熄滅了所有的燈泡,同時使 8 位加法器的第 2 行輸入全為 0。然后,通過開關(guān)輸入第一個加數(shù)乍桂,并且閉合 “相加” 開關(guān)子巾,這個加數(shù)的值就反映在燈泡上。再輸入第二個加數(shù)并再次閉合 “相加” 開關(guān)沐扳。由開關(guān)輸入的 8 位操作數(shù)加到前面的結(jié)果上,所得的和體現(xiàn)到燈泡上。反復(fù)如此操作袋毙,可以連續(xù)進(jìn)行很多次加運算。

通過鎖存器能夠?qū)崿F(xiàn)將多個數(shù)的相加冗尤。例如我們要計算 1 + 2 + 3听盖,初始在 A 端輸入 1胀溺,由于鎖存器清零,所以 B 端輸出 0皆看,經(jīng)過加法器相加得到 1仓坞,存入鎖存器。之后 A 端輸入 2腰吟,B 端接通鎖存器則 B 端輸出 1扯躺,通過加法器得到 3,同樣結(jié)果 3 存入加法器蝎困。后續(xù)類似录语,結(jié)果通過燈泡的亮滅表示(亮即為 1)。


3 小結(jié)

??編碼:觸發(fā)器(二)篇結(jié)合前文介紹的 R-S 觸發(fā)器引出 D 型觸發(fā)器禾乘,對 D 型觸發(fā)器進(jìn)行了介紹澎埠。為了精簡內(nèi)容刪減了部分較為詳細(xì)的書寫,僅作為整理總結(jié)始藕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蒲稳,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子伍派,更是在濱河造成了極大的恐慌江耀,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件诉植,死亡現(xiàn)場離奇詭異祥国,居然都是意外死亡,警方通過查閱死者的電腦和手機晾腔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門舌稀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人灼擂,你說我怎么就攤上這事壁查。” “怎么了剔应?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵睡腿,是天一觀的道長。 經(jīng)常有香客問我峻贮,道長席怪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任月洛,我火速辦了婚禮何恶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嚼黔。我一直安慰自己细层,他們只是感情好惜辑,可當(dāng)我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著疫赎,像睡著了一般盛撑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捧搞,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天抵卫,我揣著相機與錄音,去河邊找鬼胎撇。 笑死介粘,一個胖子當(dāng)著我的面吹牛晚树,可吹牛的內(nèi)容都是我干的姻采。 我是一名探鬼主播爵憎,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蛉签,長吁一口氣:“原來是場噩夢啊……” “哼正蛙!你這毒婦竟也來了愚隧?” 一聲冷哼從身側(cè)響起狂塘,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泪漂,沒想到半個月后露筒,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伶氢,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扇救。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片装畅。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚂夕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情等脂,我是刑警寧澤上遥,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站伟骨,受9級特大地震影響底靠,放射性物質(zhì)發(fā)生泄漏暑中。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望政冻。 院中可真熱鬧汽摹,春花似錦逼泣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榄审。三九已至浪感,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間峻堰,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工镶蹋, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人拂酣。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓踱葛,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸳惯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容