Re: [斧正] 關於數位電子的一些問題
: 在實作上,至少有 TTL 及 CMOS 兩大晶片群,它們認定的電壓是不同的(同樣運作5V內時)
: 所以 TTL 的輸出腳直接接到 CMOS 的輸入腳會根本無法傳遞訊號
我們為什麼要在同一張電路板上,用上兩種不同準位電壓的 IC 呢?
對純軟體的工程師來說,他們不用接觸這個問題
但實務上一直存在
IC,就好像貨架上的商品
這問題就好像'為什麼有 4.7K的電阻,怎麼不是整數的 5K,4K,有沒有 4.71K,4.72K'?
答案是:你訂做就有(註)
(以下是舊資訊,我離開硬體及通訊業界很久了)
CMOS 有省電優勢,電腦的 BIOS內,含有一顆不斷電的時鐘,所以關機後時間還在跑
它的電力來自電池,需要 CMOS 省電設計
其他週邊元件不必,就可能用 TTL 設計
光這樣我就有在同一張電路板上用兩種 IC 的需求了
再加上經常省電與速度是互詰的選項,所以電腦內部的 0 與 1
可能是幾個不同準位的電壓
所以電腦內部是 0 與 1 的世界嗎?
這..只講數位的話,是..
講到實現它的類比技術,我也不確定
應該說,我不確定所有的 0 與 1 是用同一套電壓準位在表達
我們談到生物的神經元,說它很不同於電子電路
有的是全有或無,有的能表達強弱
這...演化為什麼會有這樣的結果,我不清楚
但我們在設計電子電路時,是模仿很多的
全用數位比較好嗎?我也不確定
我只能說市場目前是主流
要不然你如何解釋有類比電腦及混合電腦的存在?
而如果我用混合電腦這個最大集合來討論
它是不是可以更像神經元?
再重看一眼莊子秋水篇,你想舉什麼例,一直強調,就會以為真的是那樣
所以我常說'都對',因為都可以舉到例子
但是目前數位電腦是主流,很有可能不講數位感覺就不太對
數位電腦中另一個重點是時脈,一個時脈送出一個 bit
然後我們就一直說電腦是二進位
對照我前面說的多電壓準位,你要說電腦內只有0與1也好
你要說這0與1還有好幾套也好 XD
然後就可以討論另一個問題: 電腦內有沒有 16進位
這...字眼不統一是談不下去的
到底是要談16種電壓準位還是 4bit?
如果是人為認定的邏輯,你愛把 4bit 合稱一單位,那就是 16進位
但是不要忘了,單位是人為的切割
你用不同的切割方式,電腦並不這麼認為
(或者我們跳 tone 到電腦有沒有主體意識,它能'認為'什麼?)
不過,切割到最基本單位的一個重點是:我能不能'定址'它
就好像我能不能叫你的名字,
又或者這個名字是不是菜市場名,一喊就有十幾個人應聲?
'定址'要有唯一性,才會方便;而定址的最小單位也才好拿出來計算
如果我命名一個位址,其內有 4bit,那這是 16進位
高階語言的使用者用的是變數,其實不必談幾位元
而低階語言的使用者用的是位址,暫存器
最小單位是進位旗標 C
這個旗標是一個 bit,二進位
它也不是什麼 16進位
我們一般接受'電腦是二進位,16進位是人為認定'會很方便
因為我已經具有能控制最小單位到 1bit 的能力
如果你要說電腦是 16 進位,那當然也可以
這是巨觀和微觀的差別;但不掌握微觀時,就不好討論微觀的題目
就好像你要說我手上的包子是麵粉組成,分子組成,或原子組成
那都可以;就看想微觀到什麼境界
講到中文化電腦,為什麼電腦是 16 進位?為什麼不是 32進位?
像這樣的題目就好像問市面上為什麼沒賣 4.70001K 的電阻一樣
...手工打造就有啊 XD
不過我們還是可以看到,為什麼要把觀察電腦的 scope,定位在一個 NIBBLE
(4bit = 1 Nibble,8bit = 1 Byte)
一個 NIBBLE的確可以視為 16進位,它很特別的被觀察到了
剛才說電腦內最小單位是進位旗標
再來就是暫存器,有好幾種,8,16,32位元都已成為主流
恰好都是倍數成長的,而那是為了和舊版相容
(相容才可以取用舊版程式,資料)
有沒有不是倍數成長的?有..位址暫存器
20條位址線被發明出來時,前一代是 16條位址線
為什麼下一代不是 32條位址線咧?
所以要向我堅持電腦世界的成長一定是倍數成長云云
我是可以舉到反例的
但你做出來就要賣得出去..
當初 20條位址線的發明,並不是沒人抱怨
但人家有強力的支援,最後可以自圓其說
那就成功了
如此而已
把一個 BYTE 0~256 的值,用兩個字元顯示,一個字元剛好一個 NIBBLE
這在 BCD 是很方便的
而就算不方便,能買到的都是這種元件,除非訂做呀~
在 BIT 後,還可以談到另一個很特別的基本單位,Baud
BIT 是 CPU 內的基本單位,但不是通訊上的;通訊上的是 Baud
我們講電腦傳輸速度時,可能是 10M/sec
這是巨觀的,微觀到最小單位時,電路上跑的不是一個一個 BIT
而是一個一個 Baud,所以我們談鮑率(Baudrate)
Baud 是指一次電位變化,可以辨視出一個數位資料
乍聽起來和 BIT 很像,但 BIT 只有 0,1 兩種電位變化
Baud 卻是有 N 種電位變化,如果有三種,那就是3進位
這種東西是真的有被做出來的
如果你說一個 3進位要用兩個位元來儲存,是種浪費
那 NAND 組成三種基本邏輯閘算不算浪費?
如果你說電路只能表達 0 或 1,
那 TTL 和 CMOS 間準位不同,調整電位的工程師怎麼做到?
事實上是,如果真的很在乎,我會重新開發直接元件
我的意思是,NOT 電路可以用一個 PNP 接面做出來,叫做直接元件
但也可以用 NAND 邏輯閘做出來,叫做組合邏輯,組合元件
我在乎的話我就想法子直接做,不在乎的話也沒什麼了不起;浪費是處處可見的
而前面舉的 Multi-And,它能有多輸入接點,它很妙的是本身就是一個直接元件
要開發這種元件必需微觀到較內層(電子學)討論
而不是只有二進位的邏輯;當你腦中充滿二進位的框框,就不可能掌握更微觀的細節
3進位做出來要怎麼用呢?
之前我列過一次表
三進位 => 二進位
00 000
01 001
02 010
10 011
11 100
12 101
20 110
21 111
22 多餘控制
不是把每個 3進位的 Baud,對應到 2進位的兩個 bit
三進位 => 二進位
00 0000
01 0001
02 0010
10 0100
11 0101
12 0110
20 1000
21 1001
22 1010
這不是不可以,這叫編碼法,有好幾種,要看你的目的
如果這些都要談,那我要不要談葛雷碼?
故意用這種編碼法,然後說二進位在四位元明明可以表達16種變化
卻只拿來表達 9種,是種極大的浪費
其一:浪費已經處處可見了,如果有必要,那就浪費吧!
其二:請看我的編碼法,沒有浪費
反而是 3進位用兩個 Baud,可以編成 2進位 3個 Baud(也可以說 Bit)
且還多一種變化
這多出來的變化很好用,只要這種資料出現,就代表不是普通資料
可以用在開始停止位元,或特殊控制
比如,如果我要從 A 傳資料到 B,中間還想閃個燈
我可以在要閃燈時送出 22(三進位),而不必佔用任何資料代碼
一般有佔用的就要定 Escape Sequence Rule
比如 C 語言裏用 " 框住字串
但當我字串裏也想要這個引號時,就得多打個 \
那 \ 也被佔用了,當我字串裏想要 \ 時,就得打兩個,\\
Escape Sequence Rule 會使資料複雜化,直接看到時也沒了可讀性
那善用多出來的控制變化不是很好嗎?
在通訊上並不只 3進位,或者我也不知有沒有 3進位
只是通訊上的基本單位是 Baud,是指這個意思
這在傳送大量資料時會起到使資料變短的效果(對,通訊就是想要這樣,要求速度)
而傳統上要傳送大量資料時,我們會做壓縮
因為講解 Baud 編碼效果很麻煩,
所以我們會對使用者說這種通訊模式有壓縮效果
事實上這不是壓縮;每 3個 2進位,變成 2個 3進位,效果是固定的
而壓縮的效果要看資料的重覆程度(比如一堆空白,壓縮率會很高)
講 Bit/sec 還不夠精確,但講 Baud/sec 就精確多了
Baud,就是一個可辨識的資料最小單元,如果是 3進位,它可以是 0,1,2
資料要傳送前要編碼,傳完後要解碼
Baud Rate 快當然好,但相同 Baud Rate 時,速度不一定一樣快
還得看我一個 Baud 能攜帶幾種變化
就通訊佈線的成本來說,提高 Baud 的變化量比較值得,所以不用二進位
(我在學 56K Modem 時,手上有一張表,密密麻麻的是幾十種變化吧..,一個 Baud)
前面我說,要不要跳 tone 到電腦是不是生命,它有沒有法子'認為'什麼
其實,我們人又能'認為'什麼?
在溝通上,我是看著你的表情,聽你的聲音,看你的文字
凡此種種,我所溝通的都是外界的符號
而不是直接插入你腦內的神經元(除非我們科技強到'讀腦')
因此,當有人詢問他和電腦的溝通時
那我也得問他怎麼去計較電腦內部的訊號
是螢幕上看到的字,還是插一根針到電腦內的記憶體去'讀腦'
就螢幕上的字來說,一個中文字佔用兩個 BYTE,不像英文一字一BYTE
但就算一個 NIBBLE 可以表達 32 種變化好了
(前面的 32進位題目,其實那字眼不精確;NIBBLE 永遠是 16種變化
重點在定址法,一個位址有 256 種變化)
可以解決問題嗎?
..問題仍沒有解決,因為中文字沒那麼少,中文字解決了還有世界各國文字
UniCode 已經改了好幾版耶...
而擴充一個位址的變化量好不好?
好像把暫存器寬度從 8位元改成 9位元
嗯..那不能和舊版相容呀,我們是一次擴充到 16位元,剛好兩倍
並且以此和舊版相容,那不是更好?
說到底我們還是得把電位變化量和位元變化量分開講
而電腦內部電位變化量的主流仍是二進位
除非有大廠瘋了全面改寫,不然這狀況不會改變
那我敢不敢賭定絕對不會呢?才不敢咧..
通訊上的 Baud 代表這件事做得到,而且有很多 IC 在支援
相關通訊理論存在數十年,全因成本因素沒有實現;但並不是新觀念
後來相關 IC 降價,連鎖反應下就通通出爐了
(比如浪費一些 bit,在電路降價後實在沒麼了不起)
而 CPU 的腳數愈來愈多,位址解碼開始複雜,委由南北橋晶片
如果哪一天你家主機板上面開始跑三進位
我會大吃一驚,但不會不能接受
只要相關元件都降價就可以用..
可是我們不會把這種事讓 user 知道 XD
因為要相容,要 user friendly
我們一定會想法子弄得很像 2進位的
事實上,現在新的 IC 一面市,就可以有它的高階語言 Compiler
不管它內部的組合語言有多大差異..
因為 Compiler 本身也是一支程式,可以在把差異當參數餵給程式後
產生一支相對應的 Compiler 出來 (所謂 Compiler 的 Compiler)
而對組合語言 User 來說,一顆三進位的 CPU,我也可以包一層 shell
在外面跑 2進位(也就是組合語言相對仍是高階, CPU 內跑微指令)
這下要談到微指令?...那就不談了
因此,我們都不必知道電腦在'認為'什麼
太微觀的東西不是重點,反正我們只巨觀的看到外表
也就是電腦螢幕上看到的東西
這可能要談得很高階,比如瀏覽器,它用的編碼法可多了
UTF-8,Big-5...
有些編碼法根本是超級浪費,比如 e-mail,按個 view source 會嚇一跳
而一個問題到底會由硬體解決,還是由軟體更上層的瀏覽器解決
這其實都要看成本
不過軟體的變動成本低,我們改軟體有快一點
(也因為以為這樣,所以軟體工程師要為一句'應該很簡單吧'的話加班
但如果不由軟體做,由硬體做可是要重開模咧)
註釋:
電阻的阻值和長度成正比,在設計 IC 時,如果你能參與畫底片的階段
畫多長就能換算多大的阻值,(彈性)要多少有多少 XD
但如果你不在訂製端,而是只能買半成品回來兜的散客
那人家出了你就用,選擇變少
通常一些國際大廠大賣的家電會影響市場上的存貨
比如某電視機大賣,都用 4.7K的電阻,那麼電阻商不會只做足量的電阻
開模最貴,量產後就便宜,這是常見的道理
多做的 4.7K電阻就流到市面上,然後學生就奇怪怎麼 4.7K這麼多
學生時老師要我們自己設計電路,我設計要用 4.701K...這怎麼辦?
抱歉,你不是大咖,去買 4.7K & 0.001K 回來串聯吧~
約十年前,影響元件庫的變成手機,手機用什麼元件,市面上什麼原件就多
當時我在業界就感受到手機的影響力了
工程師選用元件時必需在乎的幾個問題:
交期,庫存,單價,Lead Time(提前期,當已無庫存而我們下單,必需多久才能出貨?)
只要廠商說:這個元件有大廠在用,訂單很穩
那意思就是他們會揹庫存,不用擔心
不然我們自己就要揹庫存,因為 Lead Time 會很長
大量生產的工廠和學生組裝不同,要的量大,常缺零件
零件一缺一年也碰過,一年沒上市你還有什麼競爭力?(天!你跟我說你缺某電阻就不能做)
所以在 OEM 廠,預估生產備料庫存很重要
進業界前覺得有些點子好簡單,廠商怎麼不做
進業界後發覺,好簡單的東西要做出來也要好幾個月
所以如果問:怎麼不XXX設計
這問題裏,工程難度只佔一半
生產控制難度又佔另一半
一些比較爛的設計卻橫行市場的例子比比皆是
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.59.179.152
※ 編輯: HuangJC 來自: 61.219.65.16 (07/20 12:18)
討論串 (同標題文章)
ask-why 近期熱門文章
PTT職涯區 即時熱門文章