① 什麼是FIFO緩存隊列
FIFO是英文First In First Out 的縮寫,是一種先進先出的數據緩存器,他與普通存儲器的區別是沒有外部讀寫地址線,這樣使用起來非常簡單,但缺點就是只能順序寫入數據,順序的讀出數據,其數據地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址。 FIFO一般用於不同時鍾域之間的數據傳輸,比如FIFO的一端時AD數據採集,另一端時計算機的PCI匯流排,假設其AD採集的速率為16位 100K SPS,那麼每秒的數據量為100K×16bit=1.6Mbps,而PCI匯流排的速度為33MHz,匯流排寬度32bit,其最大傳輸速率為1056Mbps,在兩個不同的時鍾域間就可以採用FIFO來作為數據緩沖。另外對於不同寬度的數據介面也可以用FIFO,例如單片機位8位數據輸出,而DSP可能是16位數據輸入,在單片機與DSP連接時就可以使用FIFO來達到數據匹配的目的。 3.FIFO的一些重要參數 FIFO的寬度:也就是英文資料里常看到的THE WIDTH,它只的是FIFO一次讀寫操作的數據位,就像MCU有8位和16位,ARM 32位等等,FIFO的寬度在單片成品IC中是固定的,也有可選擇的,如果用FPGA自己實現一個FIFO,其數據位,也就是寬度是可以自己定義的。 FIFO的深度:THE DEEPTH,它指的是FIFO可以存儲多少個N位的數據(如果寬度為N)。如一個8位的FIFO,若深度為8,它可以存儲8個8位的數據,深度為12 ,就可以存儲12個8位的數據,FIFO的深度可大可小,個人認為FIFO深度的計算並無一個固定的公式。在FIFO實際工作中,其數據的滿/空標志可以控制數據的繼續寫入或讀出。在一個具體的應用中也不可能由一些參數算數精確的所需FIFO深度為多少,這在寫速度大於讀速度的理想狀態下是可行的,但在實際中用到的FIFO深度往往要大於計算值。一般來說根據電路的具體情況,在兼顧系統性能和FIFO成本的情況下估算一個大概的寬度和深度就可以了。而對於寫速度慢於讀速度的應用,FIFO的深度要根據讀出的數據結構和讀出數據的由那些具體的要求來確定。 滿標志:FIFO已滿或將要滿時由FIFO的狀態電路送出的一個信號,以阻止FIFO的寫操作繼續向FIFO中寫數據而造成溢出(overflow)。 空標志:FIFO已空或將要空時由FIFO的狀態電路送出的一個信號,以阻止FIFO的讀操作繼續從FIFO中讀出數據而造成無效數據的讀出(underflow)。 讀時鍾:讀操作所遵循的時鍾,在每個時鍾沿來臨時讀數據。 寫時鍾:寫操作所遵循的時鍾,在每個時鍾沿來臨時寫數據。 讀指針:指向下一個讀出地址。讀完後自動加1。 寫指針:指向下一個要寫入的地址的,寫完自動加1。 讀寫指針其實就是讀寫的地址,只不過這個地址不能任意選擇,而是連續的。 4.FIFO的分類 根均FIFO工作的時鍾域,可以將FIFO分為同步FIFO和非同步FIFO。同步FIFO是指讀時鍾和寫時鍾為同一個時鍾。在時鍾沿來臨時同時發生讀寫操作。非同步FIFO是指讀寫時鍾不一致,讀寫時鍾是互相獨立的。 5.FIFO設計的難點 FIFO設計的難點在於怎樣判斷FIFO的空/滿狀態。為了保證數據正確的寫入或讀出,而不發生益處或讀空的狀態出現,必須保證FIFO在滿的情況下,不能進行寫操作。在空的狀態下不能進行讀操作。怎樣判斷FIFO的滿/空就成了FIFO設計的核心問題。由於同步FIFO幾乎很少用到,這里只描述非同步FIFO的空/滿標志產生問題。 補充: 在用到觸發器的設計中,不可避免的會遇到亞穩態的問題(關於亞穩態這里不作介紹,可查看相關資料)。在涉及到觸發器的電路中,亞穩態無法徹底消除,只能想辦法將其發生的概率將到最低。其中的一個方法就是使用格雷碼。格雷碼在相鄰的兩個碼元之間只由一位變換(二進制碼在很多情況下是很多碼元在同時變化)。這就會避免計數器與時鍾同步的時候發生亞穩態現象。但是格雷碼有個缺點就是只能定義2^n的深度,而不能像二進制碼那樣隨意的定義FIFO的深度,因為格雷碼必須循環一個2^n,否則就不能保證兩個相鄰碼元之間相差一位的條件,因此也就不是真正的各雷碼了。第二就是使用冗餘的觸發器,假設一個觸發器發生亞穩態的概率為P,那麼兩個及聯的觸發器發生亞穩態的概率就為P的平方。但這回導致延時的增加。亞穩態的發生會使得FIFO出現錯誤,讀/寫時鍾采樣的地址指針會與真實的值之間不同,這就導致寫入或讀出的地址錯誤。由於考慮延時的作用,空/滿標志的產生並不一定出現在FIFO真的空/滿時才出現。可能FIFO還未空/滿時就出現了空/滿標志。這並沒有什麼不好,只要保證FIFO不出現overflow or underflow 就OK了。 很多關於FIFO的文章其實討論的都是空/滿標志的不同演算法問題。 在Vijay A. Nebhrajani的《非同步FIFO結構》一文中,作者提出了兩個關於FIFO空/滿標志的演算法。 第一個演算法:構造一個指針寬度為N+1,深度為2^N位元組的FIFO(為便方比較將格雷碼指針轉換為二進制指針)。當指針的二進制碼中最高位不一致而其它N位都相等時,FIFO為滿(在Clifford E. Cummings的文章中以格雷碼表示是前兩位均不相同,而後兩位LSB相同為滿,這與換成二進製表示的MSB不同其他相同為滿是一樣的)。當指針完全相等時,FIFO為空。這也許不容易看出,舉個例子說明一下:一個深度為8位元組的FIFO怎樣工作(使用已轉換為二進制的指針)。FIFO_WIDTH=8, 補充: FIFO_DEPTH= 2^N = 8,N = 3,指針寬度為N+1=4。起初rd_ptr_bin和wr_ptr_bin均為「0000」。此時FIFO中寫入8個位元組的數據。wr_ptr_bin =「1000」,rd_ptr_bin=「0000」。當然,這就是滿條件。現在,假設執行了8次的讀操作,使得rd_ptr_bin =「1000」,這就是空條件。另外的8次寫操作將使wr_ptr_bin 等於「0000」,但rd_ptr_bin 仍然等於「1000」,因此FIFO為滿條件。 顯然起始指針無需為「0000」。假設它為「0100」,並且FIFO為空,那麼8個位元組會使wr_ptr_bin =「1100」,, rd_ptr_bin 仍然為「0100」。這又說明FIFO為滿。若寫指針的高兩位MSB大於讀指針的高兩位MSB則FIFO為「幾乎空」。 在Vijay A. Nebhrajani的《非同步FIFO結構》第三部分的文章中也提到了一種方法,那就是方向標志與門限。設定了FIFO容量的75%作為上限,設定FIFO容量的25%為下限。當方向標志超過門限便輸出滿/空標志,這與Clifford E. Cummings的文章中提到的STYLE #2可謂是異曲同工。他們都屬於保守的空滿判斷。其實這時輸出空滿標志FIFO並不一定真的空/滿。 說到此,我們已經清楚地看到,FIFO設計最關鍵的就是產生空/滿標志的演算法的不同產生了不同的FIFO。
② 編碼器如何編程
這個很簡單啊,
用變頻器+
編碼器+
PLC,
就能實現啊,PLC
讀取編碼器的位移值,然後判斷,讓變頻器
驅動電機轉2圈,.。。。
依此實現你說的功能。
至於
蠟和麻輪都有損耗
的問題,最好是均勻的損耗,
好計算的!
③ fifo演算法是什麼
先進先出演算法是最簡單的分頁替換演算法,是指每次有新的分頁需要調入時,會選擇調入內存時間最久的分頁換出。它簡單,容易實現,但這種絕對的公平方式容易導致效率的降低。
最簡單的分頁替換演算法就是先進先出演算法,當每次有新的分頁需要調入時,會選擇調入內存時間最久的分頁換出。
有兩種實現的方法:第一種是記錄每個分頁被調入到頁框的時間,當每次需要換出分頁時,會找到調入時間最早的一頁,也就是在主存儲器中存在最久的分頁。另外一種方式就是利用FIFO隊列來實現,當要進行分頁替換時,就把隊列最前端的分頁換出,再把要調入的分頁放到隊列的末端。
一、實現機制
使用鏈表將所有在內存的頁面按照進入時間的早晚鏈接起來,然後每次置換鏈表頭上的頁面就行了。新加進來的頁面則掛在鏈表的末端。
二、特點
1、優點
簡單,且容易實現。
2、缺點
這種絕對的公平方式容易導致效率的降低。例如,如果最先載入進來的頁面是經常被訪問的頁面,這樣做很可能造成常被訪問的頁面替換到磁碟上,導致很快就需要再次發生缺頁中斷,從而降低效率。
電子產品
FIFO通常在電子電路中用於硬體和軟體之間的緩沖和流控制。FIFO以其硬體形式主要由一組讀寫指針,存儲和控制邏輯組成。
存儲可以是靜態隨機存取存儲器(SRAM),觸發器,鎖存器或任何其他合適的存儲形式。對於非平凡大小的FIFO,通常使用雙埠SRAM,其中一個埠專用於寫入,另一埠專用於讀取。
電子設備中實現的第一個已知FIFO是1969年在飛兆半導體公司的Peter Alfke。[4]Alfke後來擔任Xilinx的董事。
1、同步性
同步FIFO是其中相同的時鍾用於讀取和寫入的FIFO。非同步FIFO使用不同的時鍾進行讀取和寫入,它們可能會引入亞穩定性問題。非同步FIFO的常見實現方式是對讀和寫指針使用格雷碼(或任何單位距離碼),以確保可靠的標志生成。
關於標志生成的另一條注釋是,必須使用指針演算法為非同步FIFO實現生成標志。相反,在同步FIFO實現中,可以使用泄漏存儲區方法或指針演算法來生成標志。
2、狀態標志
FIFO狀態標志的示例包括:已滿,為空,幾乎已滿和幾乎為空。當讀地址寄存器到達寫地址寄存器時,FIFO為空。當寫地址寄存器到達讀地址寄存器時,FIFO已滿。讀寫地址最初都位於第一個存儲器位置,並且FIFO隊列為空。
在這兩種情況下,讀和寫地址最終都是相等的。為了區分這兩種情況,一種簡單而強大的解決方案是為每個讀取和寫入地址添加一個額外的位,該地址在每次換行時都會反轉。
以上內容參考網路-先進先出演算法
④ 有關轉換進制問題
一、 常用數制及其相互轉換
在我們的日常生活中計數採用了多種記數制,比如:十進制,六十進制(六十秒為一分,六十分為一小時,即基數為60,運算規則是逢六十進一),……。在計算機中常用到十進制數、二進制數、八進制數、十六進制數等,下面就這幾種在計算機中常用的數制來介紹一下。
1.十進制數
我們平時數數採用的是十進制數,這種數據是由十個不同的數字0、1、2、3、4、5、6、7、8、9任意組合構成,其特點是逢十進一。
任何一個十進制數均可拆分成由各位數字與其對應的權的乘積的總和。例如:
?
?
?
這里的10為基數,各位數對應的權是以10為基數的整數次冪。為了和其它的數制區別開來,我們在十進制數的外面加括弧,且在其右下方加註10。
2.二進制數
在計算機中,由於其物理特性(只有兩種狀態:有電、無電)的原因,所以在計算機的物理設備中獲取、存儲、傳遞、加工信息時只能採用二進制數。二進制數是由兩個數字0、1任意組合構成的,其特點是逢二進一。例如:1001,這里不讀一千零一,而是讀作:一零零一或幺零零幺。為了與其它的數制的數區別開來,我們在二進制數的外面加括弧,且在其右下方加註2,或者在其後標B。
任何一個二進制數亦可拆分成由各位數字與其對應的權的乘積的總和。其整數部分的權由低向高依次是:1、2、4、8、16、32、64、128、……,其小數部分的權由高向低依次是:0.5、0.25、0.125、0.0625、……。
二進制數也有其運算規則:
加法:0+0=0????0+1=1???1+0=1????1+1=10
乘法:0×0=0????0×1=0????1×0=0????1×1=1
二進制數與十進制數如何轉換:
(1) 二進制數—→十進制數
對於較小的二進制數:
對於較大的二進制數:
方法1:各位上的數乘權求和??例如:
(101101)2=1×25+0×24+1×23+1×22+0×21+1×20=45
(1100.1101)2=1×23+1×22+0×21+0×20+1×2-1+1×2-2+0×2-3+1×2-4=12.8125
方法2:任何一個二進制數可轉化成若干個100…0?的數相加的總和??例如:
(101101)2=(100000)2+(1000)2+(100)2+(1)2
而這種100…00形式的二進制數與十進制數有如下關聯:1後有n個0,則這個二進數所對應的十進制數為2n。
所以:(101101)2=(100000)2+(1000)2+(100)2+(1)2=25+23+22+20=45
(2)十進制數—→二進制數
整數部分:整除以2取余法。例如:75
75/2=37…1??37/2=18…1??18/2=9…0??9/2=4…1??4/2=2…0??2/2=1…0???1/2=0…1
將得到的一系列的余數倒過來書寫就得到該數所對應的二進制數(1001011)2
小數部分:乘以2取整法。例如:0.7
0.7×2=1.4…1??0.4×2=0.8…0???0.8×2=1.6…1???0.6×2=1.2…1??0.2×2=0.4…0
3.八進制數
八進制數是由0、1、2、3、4、5、6、7、8任意組合構成的,其特點是逢八進一。為了與其它的數制的數區別開來,我們在八進制數的外面加括弧,且在其右下方加註8,或者在其後標Q。
八進制數的基數是8,任何一個八進制數亦可拆分成由各位數字與其對應的權的乘積的總和。其整數部分的權由低向高依次是:1、8、82、83、84、85、……,其小數部分的權由高向低依次是:8-1、8-2、8-3、8-4、……。
八進制數與其它數制的轉換:
(1)與十進制數的互換
八進制數—→十進制數
十進制數—→八進制數
方法均與二進制數與十進制數互換的方法一樣。
(2)與二進制數的互換
八進制數—→二進制數
把八進制數的每一位改成等值的三位二進制數,即「一位變三位」。
例如:56.103Q
解:?5?????6?.??1????0????3
???? ↓????↓???↓???↓???↓??????????????
???? 101??110???001??000??011
所以(56.103)8=(101110.001000011)2
二進制數—→八進制數
把二進制數從小數點開始向兩邊每三位為一段(不足補0),每段改成等值的一位八進制數即可,即「三位變一位」。
4.十六進制數
十六進制數是由0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F任意組合構成的,其特點是逢十六進一。為了與其它的數制的數區別開來,我們在十六進制數的外面加括弧,且在其右下方加註16,或者在其後標H。
十六進制數的基數是16,任何一個十六進制數亦可拆分成由各位數字與其對應的權的乘積的總和。其整數部分的權由低向高依次是:1、16、162、163、164、165、……,其小數部分的權由高向低依次是:16-1、16-2、16-3、16-4、……。
十六進制數與其它數制的轉換:
(1)與十進制數的互換
十六進制數—→十進制數
十進制數—→十六進制數
方法均與二進制數與十進制數互換的方法一樣。
(2)與二進制數的互換
十六進制數—→二進制數
把十六進制數的每一位改成等值的四位二進制數,即「一位變四位」。
例如:(3AD.B8)16
解:?3????A?????D.????B?????8
???? ↓????↓????↓????↓????↓??????????????
???? 0011??1010??1101??1011??1000
所以(3AD.B8)16=(1110101101.10111)2
二進制數—→十六進制數
把二進制數從小數點開始向兩邊每四位為一段(不足補0),每段改成等值的一位十六進制數即可,即「四位變一位」。
下表中列出了一些數的二、八、十和十六進制形式
二進制數 八進制數 十進制數 十六進制數 二進制數 八進制數 十進制數 十六進制數
0000 0 0 0 1001 11 9 9
0001 1 1 1 1010 12 10 A
0010 2 2 2 1011 13 11 B
0011 3 3 3 1100 14 12 C
0100 4 4 4 1101 15 13 D
0101 5 5 5 1110 16 14 E
0110 6 6 6 1111 17 15 F
0111 7 7 7 10000 20 16 10
1000 10 8 8 10001 21 17 11
??? 二、計算機中數的表示
在計算機中所有的數據、指令以及一些符號等都是用特定的二進制代碼表示的。
??? 1.數值數據的表示
我們把一個數在計算機內被表示的二進制形式稱為機器數,該數稱為這個機器數的真值。機器數有固定的位數,具體是多少位受到所用計算機的限制。機器數把其真值的符號數字化,通常是用規定的符號位(一般是最高位)取0或1來分別表示其值的正或負。例如:假設機器數為8位,則其最高位是符號位,那麼在整數的表示情況下,對於00101110和10010011,其真值分別為十進制數+46和-19。
機器數常採用原碼和補碼的形式作為其編碼方式。
(1)原碼
整數X的原碼是指:其符號位的0或1表示X的正或負,其數值部分就是X的絕對值的二進製表示。通常用[X]原表示X的原碼。
例如:假設機器數的位數是8,那麼:[+17]原=00010001???[-39]原=10100111
注意:由於[+0]原=00000000,[-0]原=10000000,所以數0的原碼不唯一,有「正零」和「負零」之分。
(2)反碼
在反碼的表示中,正數的表示方法與原碼相同;負數的反碼是把其原碼除符號位以外的各位取反(即0變1,1變0)。通常,用[X]反表示X的反碼。
例如:[+45]反=[+45]原=00101101??[-32]原=10100000???[-32]反=11011111
(3)補碼
在補碼的表示中,正數的表示方法與原碼相同;負數的補碼在在其反碼的最低有效位上加1。通常用[X]補表示X的補碼。
例如:[+14]補=10100100???[-36]反=11011011????[-36]補=11011100
注意1:數0的補碼的表示是唯一的,即[0]補=[+0]補=[-0]補=00000000
注意2:利用公式?[X]補+[±Y]補=[X±Y]補??可以把加法和減法統一成加法。(符號位和其它位上數一樣運算,如果符號位上有進位,則把這個進位的1捨去不要,即不考慮「溢出」問題)。
例如:??X=6,Y=2??求X-Y
解:??[X]補=00000110??????[-Y]補=11111110
?????? [X-Y]補=00000100
另:機器數中採用定點或浮點數的方式來表示小數!(略)
??? 2.ASCII碼
計算機除了能處理數值外還能處理字元(指字母A、B、…、Z、a、b、…、z,數字0、1、…、9,其它一些可列印顯示的符號如:+、-、*、/、<、>、…)。在計算機內部,這些符號也得用二進制代碼來表示,目前,在國際上廣泛採用的是美國標准信息交換代碼(American?Standard?Code?for?Information?Interechang),簡稱ASCII碼。
標準的ASCII碼中共有128(27)個字元,所以標準的ASCII碼採用7位二進制編碼。因為其中的字元排列是有序的,其對應的ASCII碼也是相連的,所以我們只需要記幾個關鍵字元的ASCII碼,其它可以推算。
『0』——48????『A』——65??????『a』——97
註:標準的ASCII碼能表示的字元較少,於是在其基礎上又設計了一種擴充的ASCII碼,採用的是8位二進制編碼,可以表示256個字元。
??? 3.BCD碼
十進制數在鍵盤輸入和列印、顯示輸出時往往是將各個數字以ASCII碼來表示的。但是在計算機內運算時,是以二進制形式進行的。為了便於轉換,設計了一些用二進制編碼表示的十進制數,稱為二—十進制碼,即BCD碼(Binary?coded?Decimal)。
BCD碼是用四位二進制代碼來表示一位十進制數。有多種BCD碼:8421碼、2421碼、餘3碼、格雷碼。
常用BCD碼
十進制數字 8421碼 2421碼 餘3碼 格雷碼
0 0000 0000 0011 0000
1 0001 0001 0100 0001
2 0010 0010 0101 0011
3 0011 0011 0110 0010
4 0100 0100 0110 0010
5 0101 0101 1000 1110
6 0110 0110 1001 1010
7 0111 0111 1010 1000
8 1000 1110 1011 1100
9 1001 1111 1100 0100
注意:BCD碼表示的數形式上像二進制數,但不是真正的二進制數。
⑤ 什麼是Adc電路
Adc電路就是指模數轉換電路。也就是將模擬信號變為數字信號。一般用在數據採集方面。
ADC,Analog-to-Digital Converter的縮寫,指模/數轉換器或者模擬/數字轉換器。是指將連續變數的模擬信號轉換為離散的數字信號的器件。真實世界的模擬信號,例如溫度、壓力、聲音或者圖像等,需要轉換成更容易儲存、處理和發射的數字形式。模/數轉換器可以實現這個功能,在各種不同的產品中都可以找到它的身影。
典型的模擬數字轉換器將模擬信號轉換為表示一定比例電壓值的數字信號。然而,有一些模擬數字轉換器並非純的電子設備,例如旋轉編碼器,也可以被視為模擬數字轉換器。
數字信號輸出可能會使用不同的編碼結構。通常會使用二進制二補數(也稱作「補碼」)進行表示,但也有其他情況,例如有的設備使用格雷碼(一種循環碼)。
模擬信號在時域上是連續的,因此可以將它轉換為時間上連續的一系列數字信號。這樣就要求定義一個參數來表示新的數字信號采樣自模擬信號速率。這個速率稱為轉換器的采樣率(sampling rate)或采樣頻率(sampling frequency)。
可以採集連續變化、帶寬受限的信號(即每隔一時間測量並存儲一個信號值),然後可以通過插值將轉換後的離散信號還原為原始信號。這一過程的精確度受量化誤差的限制。然而,僅當采樣率比信號頻率的兩倍還高的情況下才可能達到對原始信號的忠實還原,這一規律在采樣定理有所體現。
由於實際使用的模擬數字轉換器不能進行完全實時的轉換,所以對輸入信號進行一次轉換的過程中必須通過一些外加方法使之保持恆定。常用的有采樣-保持電路,在大多數的情況里,通過使用一個電容器可以存儲輸入的模擬電壓,並通過開關或門電路來閉合、斷開這個電容和輸入信號的連接。許多模擬數字轉換集成電路在內部就已經包含了這樣的采樣-保持子系統。
⑥ 什麼是分離BCD碼
分離BCD碼亦稱二進碼十進數或二-十進制代碼。用4位二進制數來表示1位十進制數中的0~9這10個數碼。是一種二進制的數字編碼形式,用二進制編碼的十進制代碼。
BCD碼這種編碼形式利用了四個位元來儲存一個十進制的數碼,使二進制和十進制之間的轉換得以快捷的進行。這種編碼技巧最常用於會計系統的設計里,因為會計制度經常需要對很長的數字串作準確的計算。
相對於一般的浮點式記數法,採用BCD碼,既可保存數值的精確度,又可免去使電腦作浮點運算時所耗費的時間。
(6)格雷碼存儲擴展閱讀:
BCD碼類別:
1、8421
8421 BCD碼是最基本和最常用的BCD碼,它和四位自然二進制碼相似,各位的權值為8、4、2、1,故稱為有權BCD碼。和四位自然二進制碼不同的是,它只選用了四位二進制碼中前10組代碼,即用0000~1001分別代表它所對應的十進制數,餘下的六組代碼不用。
2、5421和2421
5421 BCD碼和2421 BCD碼為有權BCD碼,它們從高位到低位的權值分別為5、4、2、1和2、4、2、1。
3、餘3碼
餘3碼是8421 BCD碼的每個碼組加3(0011)形成的。常用於BCD碼的運算電路中。
4、餘3循環碼
餘3循環碼是無權碼,即每個編碼中的1和0沒有確切的權值,整個編碼直接代表一個數值。主要優點是相鄰編碼只有一位變化,避免了過渡碼產生的「雜訊」。
5、Gray碼
Gray碼(格雷碼)也稱循環碼,在一組數的編碼中,若任意兩個相鄰數的代碼只有一位二進制數不同。這種代碼除了具有單位距離碼的特點外,還有一個特點就是具有反射特性,即按表中所示的對稱軸為界,除最高位互補反射外,其餘低位數沿對稱軸鏡像對稱。利用這一反射特性可以方便地構成位數不同的Gray碼。
⑦ 計算機原碼 反碼 補碼是什麼這跟編程有什麼用
在計算機系統中,數值,一律採用補碼表示和存儲。
計算機中,根本就不使用原碼和反碼。
補碼的功能,類似於:
時針,倒撥 3 小時,可以用正撥 9 小時代替。
按照這種思路,計算機中的負數,當然也可以用正數(即補碼)代替。
如果這樣,計算機中,就沒有負數了。
同時,減法運算,也都不存在了。
那麼,藉助於補碼,就能去掉計算機中的減法運算,從而就能簡化計算機的硬體。
這就是使用補碼的原因。
------------------------
在鍾表中,時針轉一圈,周期是 12。
正撥 9 代替倒撥 3,其演算法是:9 = -3 + 周期 12。
分針,倒撥 X 分,也可用正撥(-X + 周期 60)代替。
在三角函數中,周期是 2π。
一個負角度,也能用周期,算出等效的正角度。
如:-π/2,就可以轉換成成:+3π/2。
上述這些正數,就是「負數的補數」。
求補數的公式:
補數= 負數 + 周期。
------------------------
在計算機中,8 位 2 進制,稱為一個位元組。
其計數周期是:2^8 = 256。
那麼,求負數補碼的公式:
補碼 = 負數 + 周期 2^n。
-1 的補碼是:-1 + 256 = 255 = 1111 1111(二進制)。
-2 的補碼是:-2 + 256 = 254 = 1111 1110(二進制)。
。。。
正數,則必須直接參加運算,不許作任何轉換。
即:正數,根本就不存在補碼。
------------------------
例如,7-2 = 5,用八位補碼計算如下:
7 = 0000 0111
[-2] 補 = 1111 1110
--相加------------
得:(1) 0000 0101 = 5
舍棄進位,結果就完全正確。
由此可知,藉助於補碼,確實就消除了減法運算。
------------------------
補碼,是從計數系統的周期性,推導出來的。
補碼與「原碼反碼符號位」,並無半點關系。
由「取反加一」學習補碼,就不會理解補碼的作用和產生的原因。
那麼,為什麼要定義原碼、反碼、符號位?
老外數學不好,也就只能用這些騷操作,來求補碼了。
⑧ 數字信號編碼為模擬信號有哪些方法 數據通信中位同步的作用和方法 為什麼在已知位同步的情況下還要字
(1)抗干擾能力強、無雜訊積累。在模擬通信中,為了提高信噪比,需要在信號傳輸過程中及時對衰減的傳輸信號進行放大,信號在傳輸過程中不可避免地疊加上的雜訊也被同時放大。隨著傳輸距離的增加,雜訊累積越來越多,以致使傳輸質量嚴重惡化。�
對於數字通信,由於數字信號的幅值為有限個離散值(通常取兩個幅值),在傳輸過程中雖然也受到雜訊的干擾,但當信噪比惡化到一定程度時,即在適當的距離採用判決再生的方法,再生成沒有雜訊干擾的和原發送端一樣的數字信號,所以可實現長距離高質量的傳輸。�
(2)便於加密處理。信息傳輸的安全性和保密性越來越重要,數字通信的加密處理的比模擬通信容易得多,以話音信號為例,經過數字變換後的信號可用簡單的數字邏輯運算進行加密、解密處理。
(3)便於存儲、處理和交換。數字通信的信號形式和計算機所用信號一致,都是二進制代碼,因此便於與計算機聯網,也便於用計算機對數字信號進行存儲、處理和交換,可使通信網的管理、維護實現自動化、智能化。�
(4)設備便於集成化、微型化。數字通信採用時分多路復用,不需要體積較大的濾波器。設備中大部分電路是數字電路,可用大規模和超大規模集成電路實現,因此體積小、功耗低。�
(5)便於構成綜合數字網和綜合業務數字網。採用數字傳輸方式,可以通過程式控制數字交換設備進行數字交換,以實現傳輸和交換的綜合。另外,電話業務和各種非話業務都可以實現數字化,構成綜合業務數字網。�
(6)佔用信道頻帶較寬。一路模擬電話的頻帶為4kHz帶寬,一路數字電話約佔64kHz,這是模擬通信目前仍有生命力的主要原因。隨著寬頻帶信道(光纜、數字微波)的大量利用(一對光纜可開通幾千路電話)以及數字信號處理技術的發展(可將一路數字電話的數碼率由64kb/s壓縮到32kb/s甚至更低的數碼率),數字電話的帶寬問題已不是主要問題了。
以上介紹可知,數字通信具有很多優點,所以各國都在積極發展數字通信。近年來,我國數字通信得到迅速發展,正朝著高速化、智能化、寬頻化和綜合化方向邁進。�
數字信號的產生
(1)模擬信號�
信號波形模擬著信息的變化而變化,模擬信號其特點是幅度連續(連續的含義是在某一取值范圍內可以取無限多個數值)。模擬信號,其信號波形在時間上也是連續的,因此它又是連續信號。模擬信號按一定的時間間隔T抽樣後的抽樣信號,由於其波形在時間上是離散的,它又叫離散信號。但此信號的幅度仍然是連續的,所以仍然是模擬信號。電話、傳真、電視信號都是模擬信號。��
(2)數字信號
數字信號其特點是幅值被限制在有限個數值之內,它不是連續的而是離散的。二進碼,每一個碼元只取兩個幅值(0,A):四進碼,每個碼元取四(3、1、-1、-3)中的一個。這種幅度是離散的信號稱數字信號。
信號數字化過程
信號的數字化需要三個步驟:抽樣、量化和編碼。抽樣是指用每隔一定時間的信號樣值序列來代替原來在時間上連續的信號,也就是在時間上將模擬信號離散化。量化是用有限個幅度值近似原來連續變化的幅度值,把模擬信號的連續幅度變為有限數量的有一定間隔的離散值。編碼則是按照一定的規律,把量化後的值用二進制數字表示,然後轉換成二值或多值的數字信號流。這樣得到的數字信號可以通過電纜、微波干線、衛星通道等數字線路傳輸。在接收端則與上述模擬信號數字化過程相反,再經過後置濾波又恢復成原來的模擬信號。上述數字化的過程又稱為脈沖編碼調制。
抽樣�
話音信號是模擬信號,它不僅在幅度取值上是連續的,而且在時間上也是連續的。要使話音信號數字化並實現時分多路復用,首先要在時間上對話音信號進行離散化處理,這一過程叫抽樣。所謂抽樣就是每隔一定的時間間隔T,抽取話音信號的一個瞬時幅度值(抽樣值),抽樣後所得出的一系列在時間上離散的抽樣值稱為樣值序列,如圖2-4所示。抽樣後的樣值序列在時間上是離散的,可進行時分多路復用,也可將各個抽樣值經過量化、編碼變換成二進制數字信號。理論和實踐證明,只要抽樣脈沖的間隔T≤12fm(或≥2fm)(fm是話音信號的最高頻率),則抽樣後的樣值序列可不失真地還原成原來的話音信號。��
例如,一路電話信號的頻帶為300~3400Hz,fm=3400Hz,則抽樣頻率fs≥2×3400=6800Hz。如按6800Hz的抽樣頻率對300~3400Hz的電話信號抽樣,則抽樣後的樣值序列可不失真地還原成原來的話音信號,話音信號的抽樣頻率通常取8000Hz/s。對於PAL制電視信號。視頻帶寬為6MHz,按照CCIR601建議,亮度信號的抽樣頻率為13.5MHz,色度信號為6.75MHz。�
量化
抽樣把模擬信號變成了時間上離散的脈沖信號,但脈沖的幅度仍然是模擬的,還必須進行離散化處理,才能最終用數碼來表示。這就要對幅值進行舍零取整的處理,這個過程稱為量化。量化有兩種方式,示於圖2-5中。圖2-5(a)所示的量化方式中,取整時只舍不入,即0~1伏間的所有輸入電壓都輸出0伏,1~2伏間所有輸入電壓都輸出1伏等。採用這種量化方式,輸入電壓總是大於輸出電壓,因此產生的量化誤差總是正的,最大量化誤差等於兩個相鄰量化級的間隔Δ。圖(b)所示的量化方式在取整時有舍有入,即0~0.5伏間的輸入電壓都輸出0伏,0.5~1�5伏間的輸出電壓都輸出1伏等等。採用這種量化方式量化誤差有正有負,量化誤差的絕對值最大為Δ/2。因此,採用有舍有入法進行量化,誤差較小。
實際信號可以看成量化輸出信號與量化誤差之和,因此只用量化輸出信號來代替原信號就會有失真。一般說來,可以把量化誤差的幅度概率分布看成在-Δ/2~+Δ/2之間的均勻分布。可以證明,量化失真功率�,即與最小量化間隔的平方成正比。最小量化間隔越小,失真就越小。最小量化間隔越小,用來表示一定幅度的模擬信號時所需要的量化級數就越多,因此處理和傳輸就越復雜。所以,量化既要盡量減少量化級數,又要使量化失真看不出來。一般都用一個二進制數來表示某一量化級數,經過傳輸在接收端再按照這個二進制數來恢復原信號的幅值。所謂量化比特數是指要區分所有量化級所需幾位二進制數。例如,有8個量化級,那麼可用三位二進制數來區分,因為,稱8個量化級的量化為3比特量化。8比特量化則是指共有個量化級的量化。�
量化誤差與雜訊是有本質的區別的。因為任一時刻的量化誤差是可以從輸入信號求出,而雜訊與信號之間就沒有這種關系。可以證明,量化誤差是高階非線性失真的產物。但量化失真在信號中的表現類似於雜訊,也有很寬的頻譜,所以也被稱為量化雜訊並用信噪比來衡量。�
上面所述的採用均勻間隔量化級進行量化的方法稱為均勻量化或線性量化,這種量化方式會造成大信號時信噪比有餘而小信號時信噪比不足的缺點。如果使小信號時量化級間寬度小些,而大信號時量化級間寬度大些,就可以使小信號時和大信號時的信噪比趨於一致。這種非均勻量化級的安排稱為非均勻量化或非線性量化。數字電視信號大多採用非均勻量化方式,這是由於模擬視頻信號要經過校正,而校正類似於非線性量化特性,可減輕小信號時誤差的影響。�
對於音頻信號的非均勻量化也是採用壓縮、擴張的方法,即在發送端對輸入的信號進行壓縮處理再均勻量化,在接收端再進行相應的擴張處理。��
目前國際上普遍採用容易實現的A律13折線壓擴特性和μ律15折線的壓擴特性。我國規定採用A律13折線壓擴特性。�
採用13折線壓擴特性後小信號時量化信噪比的改善量可達24dB,而這是靠犧牲大信號量化信噪比(虧損12dB)換來的。�
編碼�
抽樣、量化後的信號還不是數字信號,需要把它轉換成數字編碼脈沖,這一過程稱為編碼。最簡單的編碼方式是二進制編碼。具體說來,就是用n比特二進制碼來表示已經量化了的樣值,每個二進制數對應一個量化值,然後把它們排列,得到由二值脈沖組成的數字信息流,整個過程見圖2-7。編碼過程在接收端,可以按所收到的信息重新組成原來的樣值,再經過低通濾波器恢復原信號。用這樣方式組成的脈沖串的頻率等於抽樣頻率與量化比特數的積,稱為所傳輸數字信號的數碼率。顯然,抽樣頻率越高,量化比特數越大,數碼率就越高,所需要的傳輸帶寬就越寬。��
除了上述的自然二進制碼,還有其他形式的二進制碼,如格雷碼和折疊二進制碼等,表2-1示出了這三種二進制碼。這三種碼各有優缺點:(1)自然二進制碼和二進制數一一對應,簡單易行,它是權重碼,每一位都有確定的大小,從最高位到最低位依次為,可以直接進行大小比較和算術運算。自然二進制碼可以直接由數/模轉換器轉換成模擬信號,但在某些情況,例如從十進制的3轉換為4時二進制碼的每一位都要變,使數字電路產生很大的尖峰電流脈沖。(2)格雷碼則沒有這一缺點,它在相鄰電平間轉換時,只有一位生變化,格雷碼不是權重碼,每一位碼沒有確定的大小,不能直接進行比較大小和算術運算,也不能直接轉換成模擬信號,要經過一次碼變換,變成自然二進制碼。(3)折疊二進制碼沿中心電平上下對稱,適於表示正負對稱的雙極性信號。它的最高位用來區分信號幅值的正負。折疊碼的抗誤碼能力強。
⑨ 什麼是FIFO
FIFO是First Input First Output的縮寫,先入先出隊列,這是一種傳統的按序執行方法,先進入的指令先完成並引退,跟著才執行第二條指令。
是一種先進先出的數據緩存器,它與普通存儲器的區別是沒有外部讀寫地址線,這樣使用起來非常簡單。
但缺點就是只能順序寫入數據,順序讀出數據,其數據地址由內部讀寫指針自動加1完成,不能像普通存儲器那樣可以由地址線決定讀取或寫入某個指定的地址。