[問題] verilog 乘法的小問題...

看板Electronics作者 (Trip.)時間9年前 (2016/03/31 21:01), 9年前編輯推噓3(309)
留言12則, 3人參與, 最新討論串1/1
各位大大好 最近在修改學長姐的硬體遇到一些問題 有一筆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

03/31 21:13, , 1F
常數14bit,有1個是sign bit,所以你有13bit的小數,你
03/31 21:13, 1F

03/31 21:13, , 2F
的data有8位小數,與常數相乘後會變為21位,為了維持位
03/31 21:13, 2F

03/31 21:13, , 3F
元寬度所以才會去掉後面新增的13bit小數從14位開始取。
03/31 21:13, 3F

03/31 22:16, , 4F
那請問[28]是因為k跟data的sign bit最後統一用[29]來代表,
03/31 22:16, 4F

03/31 22:16, , 5F
所以[28]被省略掉了嗎?
03/31 22:16, 5F

03/31 23:16, , 6F
取29是因為相乘之後29是最高位元,為Sign Bit,你取28
03/31 23:16, 6F

03/31 23:16, , 7F
或27的話就變成取到你整數部份了。
03/31 23:16, 7F

04/01 12:17, , 8F
cordic電路哦?
04/01 12:17, 8F

04/01 13:27, , 9F
是的...
04/01 13:27, 9F

04/01 13:28, , 10F
後來發現原來是我自己發蠢
04/01 13:28, 10F

04/01 13:29, , 11F
改成14bits 直接取data_out = {data_m[27],data_m[25:13]}
04/01 13:29, 11F

04/01 13:29, , 12F
是可以的
04/01 13:29, 12F
文章代碼(AID): #1M_H-Qf9 (Electronics)