作者HuangJC (吹笛牧童)
看板ask-why
标题Re: [斧正] 关於数位电子的一些问题
时间Sat Jul 18 17:57:48 2009
: 在实作上,至少有 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)