作者StrKO (Trip.)
看板Electronics
標題[問題] verilog 乘法的小問題...
時間Thu Mar 31 21:01:09 2016
各位大大好
最近在修改學長姐的硬體遇到一些問題
有一筆data[15:0]運算完後最後會乘上一個常數K=0.6073
parameter signed K=14'b01001101101111
我有算過
2^(-1)+2^(-4)+2^(-5)+2^(-7)+2^(-8)+2^(-10)+2^(-11)+2^(-12)+2^(-13)
會趨近於0.6073沒錯
data_m = data*k;
data_out = {data_m[29],data_m[27:13]};
想請問最後data_out為什麼是這樣取...
還有想請問我有嘗試將data改成14bits
但我最後異想天開的改成 data_out = {data_m[27],data_m[25:13]}
可是最後發現結果會跟演算法不符
感謝各位大大了
P.S. data的部分學長姐應該是假設前8bits為整數,後8bits為小數
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.192.206
※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1459429274.A.A49.html
※ 編輯: StrKO (101.13.192.206), 03/31/2016 21:05:46
推 s48102003: 常數14bit,有1個是sign bit,所以你有13bit的小數,你 03/31 21:13
→ s48102003: 的data有8位小數,與常數相乘後會變為21位,為了維持位 03/31 21:13
→ s48102003: 元寬度所以才會去掉後面新增的13bit小數從14位開始取。 03/31 21:13
→ StrKO: 那請問[28]是因為k跟data的sign bit最後統一用[29]來代表, 03/31 22:16
→ StrKO: 所以[28]被省略掉了嗎? 03/31 22:16
推 s48102003: 取29是因為相乘之後29是最高位元,為Sign Bit,你取28 03/31 23:16
→ s48102003: 或27的話就變成取到你整數部份了。 03/31 23:16
推 dasala: cordic電路哦? 04/01 12:17
→ StrKO: 是的... 04/01 13:27
→ StrKO: 後來發現原來是我自己發蠢 04/01 13:28
→ StrKO: 改成14bits 直接取data_out = {data_m[27],data_m[25:13]} 04/01 13:29
→ StrKO: 是可以的 04/01 13:29