tms320c54x dsp 的定標和歸一化問題
看書看到tms320c54x有乙個桶形移位器。
其功能是定標,以及累加器的歸一化處理。
初看不大明白,細查資料大致理解。
1 定標。
因為tms320c54x是定點dsp,本身不能處理浮點資料。
那麼為什麼不用浮點dsp呢?浮點dsp**貴,而且功率大。對於手機這類產品,顯然用浮點dsp不合適。
我們處理浮點資料,需要對資料位定標。定點dsp處理浮點資料是很麻煩的,經常要進行歸一化,還要防止溢位。
所位定標,
也就是,確定小數字多少位。
比如q15,小數點後就有15位。q0,小數點後0位,當然就是整數。
定標的處理,實際上就是移位。
2 歸一化處理
其實歸一化處理涉及比較高階一點的問題。就是浮點資料處理的定點化。
為了保證一定的精度,
對於乙個負數,如果前面有一些冗餘的符號位,也就是乙個比較小的小數,那麼可以去掉冗餘位,對資料進行左移。
對於乙個大的正數,如果後面有不少的0,那麼可以右移。因為這些0其實是沒有什麼實際運算作用。
當然,左移或者右移多少位,要儲存起來。
tms320c54x有兩條指令,來做歸一化。
首先是exp src指令。計算能夠移多少位,比如乙個數有20個冗餘符號位,那麼能夠左移20-8=12位,這個12會儲存到t暫存器。
然後是norm 指令,把暫存器的數歸一化,也就是移位。
給乙個書上的例子:
exp a; (多餘符號位數-8)→t暫存器。
st t,exponent;將儲存在t暫存器中的指數存入指定的資料儲存器中。
norm a;對累加器a進行歸一化處理。
40位累加器a中的定點數ff ffff f001。先用exp a指令,求得指數為13h,存放在t暫存器中,然後執行norm a指令,在單個週期內將定點數分成尾數ff 8008 0000和指數13h兩個部分。
具體計算方法:
將ff ffff f
001變成二進位制數,即 11111111 1111111111111111
1111000000000001
是不是有很多1是無用的符號位?
最後乙個f(藍色)的第四位前都是多餘的符號位(紅色數字),共27位,27-8=19,也就是13h,所以指數為13h,t=13h.
norm a 是將a歸一化,即向左移位t中所存的數(13h),右邊添0,移位的結果是ff 8008 0000。這樣就將乙個定點數轉化成乙個浮點數。
TMS320C6678上電配置和FPGA復位DSP
1.dsp上電復位配置什麼?dsp的大 小端,自啟動 boot 模式,pcie模式,網路協處理器時鐘選擇需要在上電復位的時候選擇,怎麼選擇?依靠上電時候鎖定dsp device configuration pins 裝置配置管腳 的邏輯電平。配置管腳的邏輯電平怎麼設定?一般採用兩種方式 合理的板載設...
TMS320C6678上電配置和FPGA復位DSP
1.dsp上電復位配置什麼?dsp的大 小端,自啟動 boot 模式,pcie模式,網路協處理器時鐘選擇需要在上電復位的時候選擇,怎麼選擇?依靠上電時候鎖定dsp device configuration pins 裝置配置管腳 的邏輯電平。配置管腳的邏輯電平怎麼設定?一般採用兩種方式 合理的板載設...
TMS320F2812的EALLOW和EDIS指令
1 巨集eallow和巨集edis一般是配套使用,在使用f2812的過程中,經常會看到main 函式的開頭使用eallow這個巨集。之所以使用它,是有原因的。因為f2812的一些配置暫存器是受保護的,無法直接寫操作,eallow巨集的使用相當於去掉了這些配置寄存的保護傘,是的可以直接寫操作,而後使用...