OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6645|回复: 3

[XILINX] Verilog定点乘积再截位语句该怎样优化?

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2020-8-1
在线时间
0 小时
发表于 2020-8-7 17:37:33 | 显示全部楼层 |阅读模式
1金钱
reg signed [63:0] temp1; temp1 = $signed(a) * $signed(b) - $signed(c) * $signed(d) ;
a <= {temp1[62],temp1[46:16]} ; 上面的语句通过阻塞赋值计算四个数的有符号乘法并相减,再通过非阻塞赋值将temp截位传给a(定点数相乘再相减)。一次操作用两句话太繁琐,也优化为一句话:
reg signed temp1;
reg signed [14:0] temp2;
reg signed [15:0] temp3;
{temp1,a[31],temp2,a[30:0],temp3} = $signed(a) * $signed(b) - $signed(c) * $signed(d) ;
将temp(64bit)转换为temp1(1bit),temp2(15bit),temp3(16bit),节省了一定的资源。但这句话中temp1,temp2,temp3只起到占位的作用,后续没有操作,是没有意义的。再倘若这样的相乘再相减的操作需要并行执行好几个,从写法上需要reg nx3个temp,反而不如之前的reg nx1个temp方便。 所以想咨询大家,有无其他写法,可以更美观?感谢!


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-8-8 00:52:38 | 显示全部楼层
回复

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-8-10 09:29:18 | 显示全部楼层
帮顶!
回复

使用道具 举报

2

主题

136

帖子

0

精华

高级会员

Rank: 4

积分
661
金钱
661
注册时间
2020-4-21
在线时间
85 小时
发表于 2020-8-10 09:40:16 | 显示全部楼层
可以这么写reg [63:0] a ,{a[63],a[31],a[62:48],a[30:0],a[47:32]} = $signed(a) * $signed(b) - $signed(c) * $signed(d) ;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 19:55

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表