在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1763|回复: 26

[求助] Verilog补码乘法

[复制链接]
发表于 2024-9-24 18:18:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
我在设计一个矩阵乘法模块,输入数据和输出数据都是补码,计算过程可以直接将两个数据相乘然后判断正负吗?还是说要先把补码转换成原码,然后把结果转换成补码输出
发表于 2024-9-24 20:06:17 | 显示全部楼层
乘法的话,不是通过符号位就可以直接得到吗?还有就是verilog 定义成signed的话工具会自动综合成有符号的乘法器吧
 楼主| 发表于 2024-9-24 20:50:06 | 显示全部楼层


ht_lch 发表于 2024-9-24 20:06
乘法的话,不是通过符号位就可以直接得到吗?还有就是verilog 定义成signed的话工具会自动综合成有符号的乘 ...


要能软件配置有符号还是无符号,比如有*有,有*无,无*有,无*无,直接定义signed的电路好像不能复用


发表于 2024-9-25 09:36:08 | 显示全部楼层
可以类似这么来写(tc_*控制输入数据为有符号(1)或无符号(0)):




  1. input [7:0] a, b;
  2. input tc_a, tc_b;
  3. output [15:0] z;

  4. wire signed [8:0] a_sgn, b_sgn;
  5. wire signed [15:0] z_sgn;

  6. assign a_sgn = $signed({tc & a[7], a});
  7. assign b_sgn = $signed({tc & b[7], b});
  8. assign z_sgn = a_sgn * b_sgn;
  9. assign z = $unsigned(z_sgn);



复制代码


发表于 2024-9-25 10:19:27 | 显示全部楼层


2441697316 发表于 2024-9-24 20:50
要能软件配置有符号还是无符号,比如有*有,有*无,无*有,无*无,直接定义signed的电路好像不能复用


那确实不能复用
发表于 2024-9-26 18:54:35 | 显示全部楼层
有补码乘法算法,可以参考 Computer arithmetic / Behrooz Parhami. – 2nd ed.有专门讲乘法器的章节, 在 https://bbs.eetop.cn/thread-976509-1-1.html 有提供下载
 楼主| 发表于 2024-9-27 10:45:42 | 显示全部楼层


liuguangxi 发表于 2024-9-25 09:36
可以类似这么来写(tc_*控制输入数据为有符号(1)或无符号(0)):


卧槽,确定这样的功能没问题吗,好简单的写法,我现在已经写完了,老老实实补码转源码
 楼主| 发表于 2024-9-27 10:49:05 | 显示全部楼层


liuguangxi 发表于 2024-9-25 09:36
可以类似这么来写(tc_*控制输入数据为有符号(1)或无符号(0)):


话说$signed可综合吗
发表于 2024-9-27 14:46:39 | 显示全部楼层


2441697316 发表于 2024-9-27 10:49
话说$signed可综合吗


当然可以综合,主流EDA工具都支持
 楼主| 发表于 2024-9-27 14:56:47 | 显示全部楼层


liuguangxi 发表于 2024-9-27 14:46
当然可以综合,主流EDA工具都支持


有个问题,为什么a_sgn要定义为9位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-15 00:57 , Processed in 0.024359 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表