考慮一個數字信號處理的實例,比如有限沖擊響應濾波器(FIR)。用數學語言來說,FIR濾波器是做一系列的點積。取一個輸入量和一個序數向量,在系數和輸入樣本的滑動窗口間作乘法,然后將所有的乘積加起來,形成一個輸出樣本。
類似的運算在數字信號處理過程中大量地重復發生,使得為此設計的器件必須提供專門的支持,促成了了DSP器件與通用處理器(GPP)的分流:
1 對密集的乘法運算的支持
GPP不是設計來做密集乘法任務的,即使是一些現代的GPP,也要求多個指令周期來做一次乘法。而DSP處理器使用專門的硬件來實現單周期乘法。DSP處理器還增加了累加器寄存器來處理多個乘積的和。累加器寄存器通常比其他寄存器寬,增加稱為結果bits的額外bits來避免溢出。同時,為了充分體現專門的乘法-累加硬件的好處,幾乎所有的DSP的指令集都包含有顯式的MAC指令。
2 存儲器結構
傳統上,GPP使用馮.諾依曼存儲器結構。這種結構中,只有一個存儲器空間通過一組總線(一個地址總線和一個數據總線)連接到處理器核。通常,做一次乘法會發生4次存儲器訪問,用掉至少四個指令周期。
大多數DSP采用了哈佛結構,將存儲器空間劃分成兩個,分別存儲程序和數據。它們有兩組總線連接到處理器核,允許同時對它們進行訪問。這種安排將處理器存貯器的帶寬加倍,更重要的是同時為處理器核提供數據與指令。在這種布局下,DSP得以實現單周期的MAC指令。
還有一個問題,即現在典型的高性能GPP實際上已包含兩個片內高速緩存,一個是數據,一個是指令,它們直接連接到處理器核,以加快運行時的訪問速度。從物理上說,這種片內的雙存儲器和總線的結構幾乎與哈佛結構的一樣了。然而從邏輯上說,兩者還是有重要的區別。
GPP使用控制邏輯來決定哪些數據和指令字存儲在片內的高速緩存里,其程序員并不加以指定(也可能根本不知道)。與此相反,DSP使用多個片內存儲器和多組總線來保證每個指令周期內存儲器的多次訪問。在使用DSP時,程序員要明確地控制哪些數據和指令要存儲在片內存儲器中。程序員在寫程序時,必須保證處理器能夠有效地使用其雙總線。
此外,DSP處理器幾乎都不具備數據高速緩存。這是因為DSP的典型數據是數據流。也就是說,DSP處理器對每個數據樣本做計算后,就丟棄了,幾乎不再重復使用。
3 零開銷循環
如果了解到DSP算法的一個共同的特點,即大多數的處理時間是花在執行較小的循環上,也就容易理解,為什么大多數的DSP都有專門的硬件,用于零開銷循環。所謂零開銷循環是指處理器在執行循環時,不用花時間去檢查循環計數器的值、條件轉移到循環的頂部、將循環計數器減1。
與此相反,GPP的循環使用軟件來實現。某些高性能的GPP使用轉移預報硬件,幾乎達到與硬件支持的零開銷循環同樣的效果。
4 定點計算
大多數DSP使用定點計算,而不是使用浮點。雖然DSP的應用必須十分注意數字的精確,用浮點來做應該容易的多,但是對DSP來說,廉價也是非常重要的。定點機器比起相應的浮點機器來要便宜(而且更快)。為了不使用浮點機器而又保證數字的準確,DSP處理器在指令集和硬件方面都支持飽和計算、舍入和移位。
從表面上來看,DSP與標準微處理器有許多共同的地方:一個以ALU為核心的處理器、地址和數據總線、RAM、ROM以及I/O端口,從廣義上講,DSP、微處理器和微控制器(單片機)等都屬于處理器,可以說DSP是一種CPU。但DSP和一般的CPU又不同:
首先是體系結構:CPU是馮.諾伊曼結構的,而DSP有分開的代碼和數據總線即“哈佛結構”,這樣在同一個時鐘周期內可以進行多次存儲器訪問——這是因為數據總線也往往有好幾組。有了這種體系結構,DSP就可以在單個時鐘周期內取出一條指令和一個或者兩個(或者更多)的操作數。
標準化和通用性:CPU的標準化和通用性做得很好,支持操作系統,所以以CPU為核心的系統方便人機交互以及和標準接口設備通信,非常方便而且不需要硬件開發了;但這也使得CPU外設接口電路比較復雜,DSP主要還是用來開發嵌入式的信號處理系統了,不強調人機交互,一般不需要很多通信接口,因此結構也較為簡單,便于開發。如果只是著眼于嵌入式應用的話,嵌入式CPU和DSP的區別應該只在于一個偏重控制一個偏重運算了。
流水線結構:大多數DSP都擁有流水結構,即每條指令都由片內多個功能單元分別完成取指、譯碼、取數、執行等步驟,這樣可以大大提高系統的執行效率。但流水線的采用也增加了軟件設計的難度,要求設計者在程序設計中考慮流水的需要。
快速乘法器:信號處理算法往往大量用到乘加(multiply-accumulate,MAC)運算。DSP有專用的硬件乘法器,它可以在一個時鐘周期內完成MAC運算。硬件乘法器占用了DSP芯片面積的很大一部分。(與之相反,通用CPU采用一種較慢的、迭代的乘法技術,它可以在多個時鐘周期內完成一次乘法運算,但是占用了較少了硅片資源)。
地址發生器:DSP有專用的硬件地址發生單元,這樣它可以支持許多信號處理算法所要求的特定數據地址模式。這包括前(后)增(減)、環狀數據緩沖的模地址以及FFT的比特倒置地址。地址發生器單元與主ALU和乘法器并行工作,這就進一步增加了DSP可以在一個時鐘周期內可以完成的工作量。
硬件輔助循環:信號處理算法常常需要執行緊密的指令循環。對硬件輔助循環的支持,可以讓DSP高效的循環執行代碼塊而無需讓流水線停轉或者讓軟件來測試循環終止條件。
低功耗:DSP的功耗較小,通常在0.5W到4W,采用低功耗的DSP甚至只有0.05W,可用電池供電,很適合嵌入式系統;而CPU的功耗通常在20W以上。
-
dsp
+關注
關注
552文章
7962瀏覽量
348285 -
mcu
+關注
關注
146文章
17002瀏覽量
350332
原文標題:DSP與普通MCU的區別
文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論