數字訊號處理/DSP 程式設計
乍一看,數字訊號處理單元與其他可程式設計微處理器、微控制器和 FPGA 非常相似。但是,DSP 晶片通常具有某些其他晶片類別沒有的功能和侷限性。本章將嘗試用廣泛的語言中立術語解釋 DSP 程式設計涉及的一些問題。
大多數程式設計師熟悉的 Intel 相容微處理器具有幾個功能,人們已經習慣於從可程式設計晶片中獲得這些功能。特別是,Intel 相容晶片具有稱為“溢位運算”的算術模式,也稱為模運算。假設我們在位元組大小的暫存器中儲存了整數 250(十進位制)。如果我們在該數字上加 10,處理器將溢位,並將答案回滾,得到答案 4。但是,DSP 晶片通常不會回滾,而是飽和到最大值。
假設我們正在處理灰度影像。此影像具有位元組大小的整數白色/黑色值,如下所示:純白色為 255,純黑色為 0。現在,假設我們想將每個畫素“提亮” 10 個點,以提高可見度。因此,我們建立一個迴圈,遍歷影像中的每個畫素,將 10 加到任何特定點的值。但是,如果我們將 10 加到已經是純白色的畫素會發生什麼?在普通的 Intel 相容晶片中,值 255 + 10 = 9。實際上,如果我們使白色畫素更亮,我們就把它們變成了黑色!現在,為了避免這種情況,DSP 晶片會飽和,並且會達到最高值(255),並且不會回滾。因此,在 DSP 晶片上,白色不能再變白了。以下是一些示例(使用無符號位元組)
在差分方程中,我們已經看到乘法和加法運算是最常見的。讓我們看一個一般性的例子
現在,我們注意到此方程中的每個元素都乘以一個係數,並加到總計中。DSP 工程師已經注意到這種模式,並且已經優化了 DSP 晶片以非常快速地進行乘法和加法運算(以犧牲其他缺少或緩慢的運算為代價)。實際上,許多 DSP 晶片將具有稱為乘累加的指令,這些指令將同時執行這兩個運算,比普通處理器能夠執行的快得多。