作者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://webptt.com/cn.aspx?n=bbs/Electronics/M.1459429274.A.A49.html
※ 编辑: StrKO (101.13.192.206), 03/31/2016 21:05:46
1F:推 s48102003: 常数14bit,有1个是sign bit,所以你有13bit的小数,你 03/31 21:13
2F:→ s48102003: 的data有8位小数,与常数相乘後会变为21位,为了维持位 03/31 21:13
3F:→ s48102003: 元宽度所以才会去掉後面新增的13bit小数从14位开始取。 03/31 21:13
4F:→ StrKO: 那请问[28]是因为k跟data的sign bit最後统一用[29]来代表, 03/31 22:16
5F:→ StrKO: 所以[28]被省略掉了吗? 03/31 22:16
6F:推 s48102003: 取29是因为相乘之後29是最高位元,为Sign Bit,你取28 03/31 23:16
7F:→ s48102003: 或27的话就变成取到你整数部份了。 03/31 23:16
8F:推 dasala: cordic电路哦? 04/01 12:17
9F:→ StrKO: 是的... 04/01 13:27
10F:→ StrKO: 後来发现原来是我自己发蠢 04/01 13:28
11F:→ StrKO: 改成14bits 直接取data_out = {data_m[27],data_m[25:13]} 04/01 13:29
12F:→ StrKO: 是可以的 04/01 13:29